From ce583b94186022446aff362aeffb7de061b3d414 Mon Sep 17 00:00:00 2001 From: Krusty93 Date: Tue, 9 Jun 2026 16:21:57 +0200 Subject: [PATCH] build --- .../version-plan-1781270291055.md | 5 + .../version-plan-1781270390103.md | 5 + apps/cli/README.md | 14 + apps/cli/bin/index.js | 16 +- apps/cli/package.json | 8 + .../adapters/azure-monitor/instrumentation.ts | 93 +++++ .../src/adapters/azure-monitor/telemetry.ts | 28 ++ .../src/adapters/commander/commands/add.ts | 2 + .../src/adapters/commander/commands/doctor.ts | 3 + .../adapters/octokit/__tests__/index.test.ts | 92 ++++- apps/cli/src/adapters/octokit/index.ts | 28 ++ .../src/adapters/plop/actions/setup-pnpm.ts | 4 + apps/cli/src/index.ts | 155 +++++++- apps/website/docs/dx-cli/requirements.md | 13 + package.json | 9 +- pnpm-lock.yaml | 376 ++++-------------- pnpm-workspace.yaml | 58 +-- 17 files changed, 583 insertions(+), 326 deletions(-) create mode 100644 .nx/version-plans/version-plan-1781270291055.md create mode 100644 .nx/version-plans/version-plan-1781270390103.md create mode 100644 apps/cli/src/adapters/azure-monitor/instrumentation.ts create mode 100644 apps/cli/src/adapters/azure-monitor/telemetry.ts diff --git a/.nx/version-plans/version-plan-1781270291055.md b/.nx/version-plans/version-plan-1781270291055.md new file mode 100644 index 0000000000..c7fbcd200a --- /dev/null +++ b/.nx/version-plans/version-plan-1781270291055.md @@ -0,0 +1,5 @@ +--- +"@pagopa/dx-cli": minor +--- + +For users in PagoPA organization, logs are sent to Application Insights diff --git a/.nx/version-plans/version-plan-1781270390103.md b/.nx/version-plans/version-plan-1781270390103.md new file mode 100644 index 0000000000..43719bc92b --- /dev/null +++ b/.nx/version-plans/version-plan-1781270390103.md @@ -0,0 +1,5 @@ +--- +docs: minor +--- + +Add GitHub login as a requirement to use the cli diff --git a/apps/cli/README.md b/apps/cli/README.md index 8bffcdc19e..32d047406b 100644 --- a/apps/cli/README.md +++ b/apps/cli/README.md @@ -66,6 +66,20 @@ npm run build node ./apps/cli/bin/index.js --help ``` +## 🔐 Authentication + +The CLI requires GitHub authentication for every command **except** `--version` +and `--help`. Authenticate using one of the following (checked in this order): + +1. The `GH_TOKEN` environment variable +2. The `GITHUB_TOKEN` environment variable +3. The [GitHub CLI](https://cli.github.com/) — run `gh auth login` + +If no credential is found, the CLI exits with an error asking you to log in. + +> Telemetry is emitted only for members of the `pagopa` GitHub organization; +> all other users can use the CLI normally with telemetry disabled. + ## 🛠️ Usage ### Available Commands diff --git a/apps/cli/bin/index.js b/apps/cli/bin/index.js index 00a9559cf4..00b7d4dc1d 100644 --- a/apps/cli/bin/index.js +++ b/apps/cli/bin/index.js @@ -1,6 +1,16 @@ #!/usr/bin/env node -import { runCli } from "../dist/index.js"; -import packageJson from "../package.json" with { type: "json" }; +// The instrumentation module must be loaded first so that the OpenTelemetry +// module hook (import-in-the-middle) is registered before any of the CLI's +// modules are imported. Static imports are always hoisted before code runs, so +// sequential dynamic imports are the only way to guarantee this load order. +await import("../dist/adapters/azure-monitor/instrumentation.js"); -runCli(packageJson.version).catch((error) => console.error(error.message)); +const { runCli } = await import("../dist/index.js"); +const { default: packageJson } = await import("../package.json", { + with: { type: "json" }, +}); + +await runCli(packageJson.version).catch((error) => + console.error(error.message), +); diff --git a/apps/cli/package.json b/apps/cli/package.json index f1f4668621..2eb37aa158 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -24,6 +24,13 @@ "@azure/arm-authorization": "^9.0.0", "@azure/arm-keyvault": "^4.0.0", "@azure/arm-msi": "^2.2.0", + "@azure/monitor-opentelemetry": "catalog:opentelemetry", + "@opentelemetry/api": "catalog:opentelemetry", + "@opentelemetry/api-logs": "catalog:opentelemetry", + "@opentelemetry/instrumentation": "catalog:opentelemetry", + "@opentelemetry/instrumentation-undici": "catalog:opentelemetry", + "@opentelemetry/sdk-logs": "catalog:opentelemetry", + "import-in-the-middle": "^3.0.0", "@azure/arm-resourcegraph": "^4.2.1", "@azure/arm-resources": "^7.0.0", "@azure/arm-resources-subscriptions": "^2.1.0", @@ -32,6 +39,7 @@ "@azure/keyvault-secrets": "^4.11.1", "@azure/storage-blob": "catalog:azure", "@logtape/logtape": "catalog:", + "@logtape/otel": "catalog:opentelemetry", "@microsoft/microsoft-graph-client": "^3.0.7", "@pagopa/dx-savemoney": "workspace:^", "chalk": "^5.6.2", diff --git a/apps/cli/src/adapters/azure-monitor/instrumentation.ts b/apps/cli/src/adapters/azure-monitor/instrumentation.ts new file mode 100644 index 0000000000..8a1073665d --- /dev/null +++ b/apps/cli/src/adapters/azure-monitor/instrumentation.ts @@ -0,0 +1,93 @@ +/** + * OTel preload module for the dx CLI. + * + * This module is a deliberate side-effect entrypoint. It MUST be the first + * module loaded by the process (via a sequential dynamic import in bin/index.js) + * so that import-in-the-middle can register its hook before any HTTP client + * libraries (undici/fetch, octokit, Azure SDKs) are loaded. + * + * Initialising the Azure Monitor exporter is deferred to `enableAzureMonitor()` + * so the CLI can decide at runtime whether to emit telemetry (only PagoPA org + * members do). The import-in-the-middle hook is still registered eagerly at + * preload because it must run before any instrumented module is imported. + * + * Reads APPLICATIONINSIGHTS_CONNECTION_STRING from process.env because this IS + * the configuration boundary — no higher caller can inject config at this point + * in the process lifecycle. + */ + +import { useAzureMonitor } from "@azure/monitor-opentelemetry"; +import { metrics, trace } from "@opentelemetry/api"; +import { registerInstrumentations } from "@opentelemetry/instrumentation"; +import { UndiciInstrumentation } from "@opentelemetry/instrumentation-undici"; +// import-in-the-middle and module must be the first imports so that +// createAddHookMessageChannel / register run as early as possible. +import { createAddHookMessageChannel } from "import-in-the-middle"; +import { register } from "module"; +import os from "node:os"; + +const { registerOptions, waitForAllMessagesAcknowledged } = + createAddHookMessageChannel(); + +// Register the ESM module hook so that subsequent dynamic imports are +// intercepted by OpenTelemetry's module instrumentation. +register("import-in-the-middle/hook.mjs", import.meta.url, registerOptions); + +// Set service name before useAzureMonitor() initialises the Resource so +// that Azure Monitor picks it up as the cloud_RoleName. +process.env["OTEL_SERVICE_NAME"] = "dx-cli"; +process.env["ATTR_SERVICE_NAMESPACE"] = "dx"; + +// Append OS resource attributes to any pre-existing OTEL_RESOURCE_ATTRIBUTES +// value (e.g. set by the environment). OTel picks these up automatically when +// it builds the Resource inside useAzureMonitor(). +// os.platform() returns "win32" on Windows; the OTel os.type enum uses "windows". +const osPlatform = os.platform(); +const osType = osPlatform === "win32" ? "windows" : osPlatform; +process.env["OTEL_RESOURCE_ATTRIBUTES"] = [ + process.env["OTEL_RESOURCE_ATTRIBUTES"], + `os.type=${osType}`, + `os.version=${os.release()}`, + `os.machine=${os.machine()}`, +] + .filter(Boolean) + .join(","); + +let azureMonitorEnabled = false; + +/** + * Initialises the Azure Monitor exporter and registers HTTP instrumentation. + * + * Deferred (not run at preload) so the CLI only emits telemetry once it has + * confirmed the user is a PagoPA org member. Idempotent: safe to call more than + * once. Must be called before logging is configured so the logtape OTel sink + * binds to the real (rather than no-op) LoggerProvider. + */ +export const enableAzureMonitor = (): void => { + if (azureMonitorEnabled) { + return; + } + azureMonitorEnabled = true; + + useAzureMonitor({ + azureMonitorExporterOptions: { + connectionString: + process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || + "InstrumentationKey=e0ff8094-78fa-45e5-a21d-e62b453dc5d1;IngestionEndpoint=https://italynorth-0.in.applicationinsights.azure.com/;LiveEndpoint=https://italynorth.livediagnostics.monitor.azure.com/;ApplicationId=ce469d55-2ff7-4dfd-a249-cc787291e672", + }, + enableLiveMetrics: true, + }); + + // Registered after useAzureMonitor() so the instrumentation binds to the + // real tracer/meter providers it installs (rather than the no-op defaults). + registerInstrumentations({ + instrumentations: [new UndiciInstrumentation()], + meterProvider: metrics.getMeterProvider(), + tracerProvider: trace.getTracerProvider(), + }); +}; + +// Block module evaluation until the hook is fully acknowledged. +// This ensures that when bin/index.js proceeds to import the CLI entry +// module, all transitive imports go through the registered hook. +await waitForAllMessagesAcknowledged(); diff --git a/apps/cli/src/adapters/azure-monitor/telemetry.ts b/apps/cli/src/adapters/azure-monitor/telemetry.ts new file mode 100644 index 0000000000..328ba00ab9 --- /dev/null +++ b/apps/cli/src/adapters/azure-monitor/telemetry.ts @@ -0,0 +1,28 @@ +/** + * Telemetry helpers for the dx CLI. + * + * All functions are no-ops when the OTel SDK has not been initialised (i.e., + * when telemetry is disabled or the connection string is absent). + */ + +/** + * Flush pending telemetry before the process exits. + * + * Uses shutdownAzureMonitor() which force-flushes AND shuts down every + * provider (traces, logs, metrics). Flushing only the logger provider is not + * enough: the root span ends right before the process exits, so without a + * trace flush it would never be exported and would not appear in the + * Application Insights timeline. + * + * Safe to call unconditionally — swallows all errors and is a no-op when the + * SDK was never initialised (telemetry disabled or no connection string). + */ +export const flushTelemetry = async (): Promise => { + try { + const { shutdownAzureMonitor } = + await import("@azure/monitor-opentelemetry"); + await shutdownAzureMonitor(); + } catch { + // Telemetry must never break the CLI. + } +}; diff --git a/apps/cli/src/adapters/commander/commands/add.ts b/apps/cli/src/adapters/commander/commands/add.ts index 63f9f9cc84..0a0a1d6632 100644 --- a/apps/cli/src/adapters/commander/commands/add.ts +++ b/apps/cli/src/adapters/commander/commands/add.ts @@ -109,6 +109,7 @@ export const authorizeCloudAccounts = type AddResult = { authorizationPrs: AuthorizationResult[]; + payload: EnvironmentPayload; }; const displaySummary = (result: AddResult) => { @@ -187,6 +188,7 @@ const addEnvironmentAction = ( authorizeCloudAccounts(authorizationService)(payload).map( (authorizationPrs) => ({ authorizationPrs, + payload, }), ), ); diff --git a/apps/cli/src/adapters/commander/commands/doctor.ts b/apps/cli/src/adapters/commander/commands/doctor.ts index fffceb9c3f..6499a14ca5 100644 --- a/apps/cli/src/adapters/commander/commands/doctor.ts +++ b/apps/cli/src/adapters/commander/commands/doctor.ts @@ -9,6 +9,7 @@ */ import chalk from "chalk"; import { Command } from "commander"; +import process from "node:process"; import type { CommandPresenter } from "../../../domain/command-presenter.js"; import type { Dependencies } from "../../../domain/dependencies.js"; @@ -58,5 +59,7 @@ export const makeDoctorCommand = ( reportDoctorResult(presenter, outputMode)(result); + // Use process.exitCode instead of process.exit() so that the finally + // block in runCli() can flush telemetry before the process terminates. process.exitCode = result.hasErrors ? 1 : 0; }); diff --git a/apps/cli/src/adapters/octokit/__tests__/index.test.ts b/apps/cli/src/adapters/octokit/__tests__/index.test.ts index ffb889e084..bae8deba24 100644 --- a/apps/cli/src/adapters/octokit/__tests__/index.test.ts +++ b/apps/cli/src/adapters/octokit/__tests__/index.test.ts @@ -11,7 +11,7 @@ import { RepositoryNotFoundError, } from "../../../domain/github.js"; import { fetchLatestRelease, fetchLatestTag } from "../index.js"; -import { OctokitGitHubService } from "../index.js"; +import { isPagopaOrgMember, OctokitGitHubService } from "../index.js"; const makeEnv = () => { const mockOctokit = mockDeep(); @@ -512,3 +512,93 @@ describe("octokit adapter", () => { }); }); }); + +describe("isPagopaOrgMember", () => { + const token = "test-token"; + const client = mockDeep(); + + beforeEach(() => { + mockReset(client); + }); + + it("returns true when the membership state is active", async () => { + client.rest.orgs.getMembershipForAuthenticatedUser.mockResolvedValue({ + data: { state: "active" }, + headers: {}, + status: 200, + url: "", + } as never); + + const result = await isPagopaOrgMember(token, client); + + expect(result).toBe(true); + expect( + client.rest.orgs.getMembershipForAuthenticatedUser, + ).toHaveBeenCalledWith({ org: "pagopa" }); + }); + + it("returns false when the membership state is pending", async () => { + client.rest.orgs.getMembershipForAuthenticatedUser.mockResolvedValue({ + data: { state: "pending" }, + headers: {}, + status: 200, + url: "", + } as never); + + const result = await isPagopaOrgMember(token, client); + + expect(result).toBe(false); + }); + + it("returns false when the user is not a member (404)", async () => { + const error = new RequestError("Not Found", 404, { + request: { + headers: {}, + method: "GET", + url: "https://api.github.com/user/memberships/orgs/pagopa", + }, + response: { + data: { message: "Not Found" }, + headers: {}, + status: 404, + url: "https://api.github.com/user/memberships/orgs/pagopa", + }, + }); + client.rest.orgs.getMembershipForAuthenticatedUser.mockRejectedValue(error); + + const result = await isPagopaOrgMember(token, client); + + expect(result).toBe(false); + }); + + it("returns false when access is forbidden (403)", async () => { + const error = new RequestError("Forbidden", 403, { + request: { + headers: {}, + method: "GET", + url: "https://api.github.com/user/memberships/orgs/pagopa", + }, + response: { + data: { message: "Forbidden" }, + headers: {}, + status: 403, + url: "https://api.github.com/user/memberships/orgs/pagopa", + }, + }); + client.rest.orgs.getMembershipForAuthenticatedUser.mockRejectedValue(error); + + const result = await isPagopaOrgMember(token, client); + + expect(result).toBe(false); + }); + + it("returns false on a network error", async () => { + client.rest.orgs.getMembershipForAuthenticatedUser.mockRejectedValue( + new Error("network down"), + ); + + const result = await isPagopaOrgMember(token, client); + + expect(result).toBe(false); + }); +}); diff --git a/apps/cli/src/adapters/octokit/index.ts b/apps/cli/src/adapters/octokit/index.ts index 438f1fa326..0e07793ee4 100644 --- a/apps/cli/src/adapters/octokit/index.ts +++ b/apps/cli/src/adapters/octokit/index.ts @@ -214,6 +214,34 @@ export const getGitHubPAT = async (): Promise => { return undefined; }; +/** GitHub organization whose members are allowed to emit CLI telemetry. */ +const PAGOPA_ORG = "pagopa"; + +/** + * Returns true when the authenticated user is an active member of the PagoPA + * GitHub organization. + * + * Fails closed: any error (network failure, missing `read:org` scope, 403/404) + * resolves to `false` so telemetry stays disabled when membership cannot be + * confirmed. + * + * @param octokit injectable client, primarily for testing; defaults to a client + * authenticated with the supplied token. + */ +export const isPagopaOrgMember = async ( + token: string, + octokit: Octokit = new Octokit({ auth: token }), +): Promise => { + try { + const { data } = await octokit.rest.orgs.getMembershipForAuthenticatedUser({ + org: PAGOPA_ORG, + }); + return data.state === "active"; + } catch { + return false; + } +}; + export const fetchLatestTag = ({ client, owner, repo }: GitHubReleaseParam) => ResultAsync.fromPromise( // Get repository tags diff --git a/apps/cli/src/adapters/plop/actions/setup-pnpm.ts b/apps/cli/src/adapters/plop/actions/setup-pnpm.ts index ee5d47b203..2413bfa278 100644 --- a/apps/cli/src/adapters/plop/actions/setup-pnpm.ts +++ b/apps/cli/src/adapters/plop/actions/setup-pnpm.ts @@ -16,6 +16,10 @@ export default function (plop: NodePlopAPI) { const env = Object.fromEntries( Object.entries(process.env) .filter(([key]) => !key.startsWith("npm_config_")) + // Strip Node.js debugger env vars so child processes don't try to + // attach to the VS Code debugger and hang/fail. + .filter(([key]) => key !== "NODE_OPTIONS") + .filter(([key]) => !key.startsWith("VSCODE_INSPECTOR")) // Disable corepack download prompt .concat([["COREPACK_ENABLE_DOWNLOAD_PROMPT", "0"]]), ); diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 21cbb920e0..11b5d76729 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -1,8 +1,14 @@ import "core-js/actual/set/index.js"; -import { configure, getConsoleSink } from "@logtape/logtape"; +import { configure, getConsoleSink, getLogger } from "@logtape/logtape"; +import { getOpenTelemetrySink } from "@logtape/otel"; +import { context, SpanKind, SpanStatusCode, trace } from "@opentelemetry/api"; +import { logs } from "@opentelemetry/api-logs"; +import { execa } from "execa"; import { errAsync, okAsync, ResultAsync } from "neverthrow"; import { Octokit } from "octokit"; +import { enableAzureMonitor } from "./adapters/azure-monitor/instrumentation.js"; +import { flushTelemetry } from "./adapters/azure-monitor/telemetry.js"; import codemodRegistry from "./adapters/codemods/index.js"; import { cliEnvSchema } from "./adapters/commander/env.js"; import { makeCli } from "./adapters/commander/index.js"; @@ -10,6 +16,7 @@ import { makePackageJsonReader } from "./adapters/node/package-json.js"; import { makeRepositoryReader } from "./adapters/node/repository.js"; import { getGitHubPAT, + isPagopaOrgMember, OctokitGitHubService, } from "./adapters/octokit/index.js"; import { makeAzureAuthorizationService } from "./adapters/pagopa-technology/azure-authorization.js"; @@ -28,17 +35,49 @@ import { listCodemods } from "./use-cases/list-codemods.js"; const detectVerboseFromArgv = (argv: readonly string[]): boolean => argv.includes("-v") || argv.includes("--verbose"); +/** + * Returns `true` for invocations that should not require GitHub login or emit + * telemetry: `--version`/`-V`, `--help`/`-h`, the `help` subcommand, and the + * bare `dx` (which only prints usage). + * + * We inspect argv directly — instead of relying on Commander — because the + * login/telemetry gate must run before `parseAsync()`, and Commander's + * `preAction` hook fires too late (after the root span has already started). + * Note `-v` is the verbose flag, not version; version is `-V`. + */ +const isVersionOrHelp = (argv: readonly string[]): boolean => { + const args = argv.slice(2); + return ( + args.length === 0 || + args[0] === "help" || + args.includes("--help") || + args.includes("-h") || + args.includes("--version") || + args.includes("-V") + ); +}; + const configureLogging = async (verbose: boolean): Promise => { const level = verbose ? "debug" : "info"; + // Wire logtape logs to the same OTel LoggerProvider that useAzureMonitor() + // registered globally. When telemetry is disabled the provider is a no-op, + // so this is always safe to call unconditionally. + const otelSink = getOpenTelemetrySink({ + loggerProvider: logs.getLoggerProvider(), + }); await configure({ loggers: [ - { category: ["dx-cli"], lowestLevel: level, sinks: ["console"] }, + { category: ["dx-cli"], lowestLevel: level, sinks: ["console", "otel"] }, // The environment generator (`gen.env`) emits debug messages about // provisioned Azure resources; surfacing them is the main value of // `--verbose` when running `dx init` / `dx add environment`. - { category: ["gen"], lowestLevel: level, sinks: ["console"] }, + { category: ["gen"], lowestLevel: level, sinks: ["console", "otel"] }, // `savemoney` already emits structured debug output by default. - { category: ["savemoney"], lowestLevel: "debug", sinks: ["console"] }, + { + category: ["savemoney"], + lowestLevel: "debug", + sinks: ["console", "otel"], + }, { category: ["json"], lowestLevel: "info", sinks: ["rawJson"] }, { category: ["logtape", "meta"], @@ -48,6 +87,7 @@ const configureLogging = async (verbose: boolean): Promise => { ], sinks: { console: getConsoleSink(), + otel: otelSink, rawJson(record) { console.log(record.rawMessage); }, @@ -56,7 +96,30 @@ const configureLogging = async (verbose: boolean): Promise => { }; export const runCli = async (version: string) => { - await configureLogging(detectVerboseFromArgv(process.argv)); + const verbose = detectVerboseFromArgv(process.argv); + + // Enforce GitHub login (for every command except --version/--help) and decide + // whether telemetry is allowed. This runs before configureLogging() so the + // logtape OTel sink binds to the real LoggerProvider only when telemetry is + // enabled, and before the root span starts so enablement actually affects it. + if (!isVersionOrHelp(process.argv)) { + const token = await getGitHubPAT(); + if (!token) { + await configureLogging(verbose); + getLogger(["dx-cli"]).error( + "You need to be logged in to GitHub. Run `gh auth login`, or set the GH_TOKEN or GITHUB_TOKEN environment variable.", + ); + process.exitCode = 1; + return; + } + // Telemetry is restricted to PagoPA org members; everyone else uses the CLI + // normally with telemetry disabled. + if (await isPagopaOrgMember(token)) { + enableAzureMonitor(); + } + } + + await configureLogging(verbose); const repositoryReader = makeRepositoryReader(); const packageJsonReader = makePackageJsonReader(); @@ -100,5 +163,85 @@ export const runCli = async (version: string) => { const program = makeCli(deps, config, useCases, env, version); - program.parse(); + // Store the CLI version on the root program so hooks and exitWithError can + // retrieve it without needing it passed through every call site. + program.setOptionValue("_cliVersion", version); + + // Fetch tool versions concurrently before parseAsync() so they are ready + // when the preAction hook fires (which is synchronous). + const [azVersion, tfVersion] = await Promise.all([ + execa("az", ["version", "--output", "json"]) + .then( + ({ stdout }) => + (JSON.parse(stdout) as Record)["azure-cli"], + ) + .catch(() => undefined), + execa("terraform", ["version", "-json"]) + .then( + ({ stdout }) => + (JSON.parse(stdout) as Record)["terraform_version"], + ) + .catch(() => undefined), + ]); + + // Rename the root span to the actual command (e.g. "init", "codemod apply") + // and tag it with CLI metadata. This runs inside context.with(rootSpan, ...) + // below, so trace.getActiveSpan() returns rootSpan. + program.hook("preAction", (_thisCommand, actionCommand) => { + trace.getActiveSpan()?.updateName(getCommandPath(actionCommand) || "dx"); + const attrs: Record = { + "cli.version": version, + "node.version": process.versions.node, + }; + if (azVersion) attrs["az.version"] = azVersion; + if (tfVersion) attrs["terraform.version"] = tfVersion; + trace.getActiveSpan()?.setAttributes(attrs); + }); + + // exitOverride makes command.error() throw a CommanderError instead of + // calling process.exit(), so the finally block below always runs. + program.exitOverride(); + + // Create a single root span for the entire CLI invocation. Wrapping + // parseAsync() with context.with() makes this the active span for the + // duration of all command handlers, which causes every outbound HTTP + // dependency span (from UndiciInstrumentation) and every logtape log + // record to share the same operation ID and hang under this span. + const rootSpan = trace.getTracer("dx-cli", version).startSpan("dx", { + // SpanKind.SERVER causes Azure Monitor to classify this span as a + // "Request" rather than a dependency or internal span. This is what + // makes it appear as the root item at the top of the App Insights + // End-to-end transaction timeline. + kind: SpanKind.SERVER, + }); + + try { + await context.with(trace.setSpan(context.active(), rootSpan), () => + program.parseAsync(), + ); + } catch (error) { + rootSpan.setStatus({ code: SpanStatusCode.ERROR }); + // CommanderError is thrown by exitOverride when command.error() is called. + // Re-apply the exit code so the process exits with the correct status. + if (error instanceof Error && "exitCode" in error) { + process.exitCode = (error as { exitCode: number }).exitCode; + } + } finally { + rootSpan.end(); + await flushTelemetry(); + } +}; + +/** Build a dot-separated command path, e.g. "codemod apply", "add environment". */ +const getCommandPath = (command: import("commander").Command): string => { + const parts: string[] = []; + + let cmd: import("commander").Command | null = command; + while (cmd !== null && cmd.name() !== "") { + if (cmd.name() !== "dx") { + parts.unshift(cmd.name()); + } + cmd = cmd.parent; + } + return parts.join(" "); }; diff --git a/apps/website/docs/dx-cli/requirements.md b/apps/website/docs/dx-cli/requirements.md index d7be01972d..b910aff8e5 100644 --- a/apps/website/docs/dx-cli/requirements.md +++ b/apps/website/docs/dx-cli/requirements.md @@ -31,6 +31,19 @@ gh auth login az login ``` +:::info[GitHub authentication is mandatory] + +Every command **except** `--version` and `--help` requires GitHub +authentication. The CLI resolves credentials in this order: the `GH_TOKEN` +environment variable, the `GITHUB_TOKEN` environment variable, then the GitHub +CLI (`gh auth login`). If none is available, the command exits with an error +asking you to log in. + +Telemetry is collected only for members of the `pagopa` GitHub organization; +everyone else can use the CLI normally with telemetry disabled. + +::: + :::warning[Azure session expiry] Within PagoPA, `az login` sessions expire every **12 hours**. If a command fails diff --git a/package.json b/package.json index 8885bb253a..0e05ab6c06 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,13 @@ { "name": "@pagopa/dx", "packageManager": "pnpm@11.5.2+sha512.71c631e382066efc25625d5cf029075de07b61b37f6e27350fbd84b1bda5864c8c1967adc280776b45c30a715c0359a3be08fef42d5bb09e2b99029979692916", + "pnpm": { + "overrides": { + "copy-webpack-plugin>serialize-javascript": "7.0.5", + "css-minimizer-webpack-plugin>serialize-javascript": "7.0.5", + "lodash-es": "4.18.1" + } + }, "devDependencies": { "@devcontainers/cli": "^0.86.0", "@nx/docker": "22.7.5", @@ -22,4 +29,4 @@ "dx": "node ./apps/cli/bin/index.js", "validate": "nx affected --targets=build,test,lint,shellcheck,format:check,typecheck --configuration=ci" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cdc5f590c3..34ee64247f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,6 +97,9 @@ catalogs: '@azure/monitor-opentelemetry-exporter': specifier: ^1.0.0-beta.42 version: 1.0.0-beta.42 + '@logtape/otel': + specifier: 1.3.8 + version: 1.3.8 '@opentelemetry/api': specifier: ^1.9.1 version: 1.9.1 @@ -136,6 +139,12 @@ overrides: copy-webpack-plugin>serialize-javascript: 7.0.5 css-minimizer-webpack-plugin>serialize-javascript: 7.0.5 lodash-es: 4.18.1 + '@logtape/otel>@opentelemetry/api-logs': ^0.218.0 + '@logtape/otel>@opentelemetry/sdk-logs': ^0.218.0 + '@logtape/otel>@opentelemetry/otlp-exporter-base': ^0.218.0 + '@logtape/otel>@opentelemetry/exporter-logs-otlp-grpc': ^0.218.0 + '@logtape/otel>@opentelemetry/exporter-logs-otlp-http': ^0.218.0 + '@logtape/otel>@opentelemetry/exporter-logs-otlp-proto': ^0.218.0 importers: @@ -494,15 +503,36 @@ importers: '@azure/keyvault-secrets': specifier: ^4.11.1 version: 4.11.1 + '@azure/monitor-opentelemetry': + specifier: catalog:opentelemetry + version: 1.18.1 '@azure/storage-blob': specifier: catalog:azure version: 12.31.0 '@logtape/logtape': specifier: 'catalog:' version: 1.3.8 + '@logtape/otel': + specifier: catalog:opentelemetry + version: 1.3.8(@logtape/logtape@1.3.8) '@microsoft/microsoft-graph-client': specifier: ^3.0.7 version: 3.0.7(@azure/identity@4.13.1) + '@opentelemetry/api': + specifier: catalog:opentelemetry + version: 1.9.1 + '@opentelemetry/api-logs': + specifier: catalog:opentelemetry + version: 0.218.0 + '@opentelemetry/instrumentation': + specifier: catalog:opentelemetry + version: 0.218.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-undici': + specifier: catalog:opentelemetry + version: 0.28.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': + specifier: catalog:opentelemetry + version: 0.218.0(@opentelemetry/api@1.9.1) '@pagopa/dx-savemoney': specifier: workspace:^ version: link:../../packages/savemoney @@ -521,6 +551,9 @@ importers: glob: specifier: ^11.1.0 version: 11.1.0 + import-in-the-middle: + specifier: ^3.0.0 + version: 3.0.0 inquirer: specifier: ^9.3.8 version: 9.3.8(@types/node@22.19.17) @@ -846,7 +879,7 @@ importers: version: 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/plugin-content-docs': specifier: ^3.10.1 - version: 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + version: 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/preset-classic': specifier: ^3.10.1 version: 3.10.1(@algolia/client-search@5.52.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@5.9.3) @@ -867,7 +900,7 @@ importers: version: 3.4.1(tslib@2.8.1) '@microsoft/docusaurus-plugin-application-insights': specifier: ^4.0.1 - version: 4.0.1(@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@docusaurus/types@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@docusaurus/utils-validation@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 4.0.1(@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@docusaurus/types@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@docusaurus/utils-validation@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -895,7 +928,7 @@ importers: version: 3.10.1 '@docusaurus/types': specifier: ^3.10.1 - version: 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@pagopa/eslint-config': specifier: workspace:* version: link:../../packages/eslint-config @@ -1837,10 +1870,6 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} @@ -1873,11 +1902,6 @@ packages: resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.3': - resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.29.7': resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} @@ -2445,10 +2469,6 @@ packages: resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - '@babel/types@7.29.7': resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} @@ -4213,6 +4233,11 @@ packages: '@logtape/logtape@1.3.8': resolution: {integrity: sha512-iGk5CJFL0s/nTLmxCsVia/x1D/3oAFfw+40AaNMserTEwJf8m9eKV+R7RVWCXCcgYp41KLwk0/M0xiBvI0AFmA==} + '@logtape/otel@1.3.8': + resolution: {integrity: sha512-d07vSCZ3pu9Ul8NHU015mJr5vBpwlQVZgEIJ0M2YNyWCiW8O7HP95UgZq+hbP6+bhe5G/5ZreJD3le3QQ18Jhw==} + peerDependencies: + '@logtape/logtape': ^1.3.8 + '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} @@ -11752,10 +11777,6 @@ packages: resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} engines: {node: '>=16.0.0'} - qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} - engines: {node: '>=0.6'} - qs@6.15.2: resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} engines: {node: '>=0.6'} @@ -14487,10 +14508,10 @@ snapshots: '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.7 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -14582,7 +14603,7 @@ snapshots: '@babel/helper-module-imports@7.28.6': dependencies: '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -14644,8 +14665,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-string-parser@7.29.7': {} '@babel/helper-string-parser@8.0.0-rc.6': {} @@ -14671,10 +14690,6 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.7 - '@babel/parser@7.29.3': - dependencies: - '@babel/types': 7.29.0 - '@babel/parser@7.29.7': dependencies: '@babel/types': 7.29.7 @@ -15135,7 +15150,7 @@ snapshots: '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -15363,9 +15378,9 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.7 '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -15382,11 +15397,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@7.29.7': dependencies: '@babel/helper-string-parser': 7.29.7 @@ -15787,47 +15797,6 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': - dependencies: - '@babel/core': 7.29.0 - '@docusaurus/babel': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/cssnano-preset': 3.10.1 - '@docusaurus/logger': 3.10.1 - '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - clean-css: 5.3.3 - copy-webpack-plugin: 11.0.0(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - css-loader: 6.11.0(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(esbuild@0.27.7)(lightningcss@1.32.0)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - cssnano: 6.1.2(postcss@8.5.13) - file-loader: 6.2.0(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - html-minifier-terser: 7.2.0 - mini-css-extract-plugin: 2.10.2(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - null-loader: 4.0.1(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - postcss: 8.5.13 - postcss-loader: 7.3.4(postcss@8.5.13)(typescript@5.9.3)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - postcss-preset-env: 10.6.1(postcss@8.5.13) - terser-webpack-plugin: 5.5.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)))(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - webpack: 5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1) - webpackbar: 7.0.0(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - csso - - esbuild - - lightningcss - - react - - react-dom - - supports-color - - typescript - - uglify-js - - webpack-cli - '@docusaurus/bundler@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: '@babel/core': 7.29.0 @@ -15870,69 +15839,6 @@ snapshots: - webpack-cli '@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': - dependencies: - '@docusaurus/babel': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/bundler': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) - '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.5) - boxen: 6.2.1 - chalk: 4.1.2 - chokidar: 3.6.0 - cli-table3: 0.6.5 - combine-promises: 1.2.0 - commander: 5.1.0 - core-js: 3.49.0 - detect-port: 1.6.1 - escape-html: 1.0.3 - eta: 2.2.0 - eval: 0.1.8 - execa: 5.1.1 - fs-extra: 11.3.4 - html-tags: 3.3.1 - html-webpack-plugin: 5.6.4(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - leven: 3.1.0 - lodash: 4.18.1 - open: 8.4.2 - p-map: 4.0.0 - prompts: 2.4.2 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)' - react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.5)' - react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.5))(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - react-router: 5.3.4(react@19.2.5) - react-router-config: 5.1.1(react-router@5.3.4(react@19.2.5))(react@19.2.5) - react-router-dom: 5.3.4(react@19.2.5) - semver: 7.8.2 - serve-handler: 6.1.7 - tinypool: 1.1.1 - tslib: 2.8.1 - update-notifier: 6.0.2 - webpack: 5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1) - webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 5.2.4(debug@4.4.3)(tslib@2.8.1)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - webpack-merge: 6.0.1 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - webpack-cli - - '@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: '@docusaurus/babel': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/bundler': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) @@ -16062,7 +15968,7 @@ snapshots: '@docusaurus/plugin-client-redirects@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/logger': 3.10.1 '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16093,10 +15999,10 @@ snapshots: '@docusaurus/plugin-content-blog@3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/logger': 3.10.1 '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16173,49 +16079,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': - dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) - '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@types/react-router-config': 5.0.11 - combine-promises: 1.2.0 - fs-extra: 11.3.4 - js-yaml: 4.1.1 - lodash: 4.18.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - schema-dts: 1.1.5 - tslib: 2.8.1 - utility-types: 3.11.0 - webpack: 5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1) - transitivePeerDependencies: - - '@docusaurus/faster' - - '@mdx-js/react' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - webpack-cli - '@docusaurus/plugin-content-pages@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16245,7 +16111,7 @@ snapshots: '@docusaurus/plugin-css-cascade-layers@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16272,7 +16138,7 @@ snapshots: '@docusaurus/plugin-debug@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) fs-extra: 11.3.4 @@ -16300,7 +16166,7 @@ snapshots: '@docusaurus/plugin-google-analytics@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 @@ -16326,7 +16192,7 @@ snapshots: '@docusaurus/plugin-google-gtag@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@types/gtag.js': 0.0.20 @@ -16353,7 +16219,7 @@ snapshots: '@docusaurus/plugin-google-tag-manager@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 @@ -16379,7 +16245,7 @@ snapshots: '@docusaurus/plugin-sitemap@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/logger': 3.10.1 '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16410,7 +16276,7 @@ snapshots: '@docusaurus/plugin-svgr@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16440,9 +16306,9 @@ snapshots: '@docusaurus/preset-classic@3.10.1(@algolia/client-search@5.52.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/plugin-content-pages': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/plugin-css-cascade-layers': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/plugin-debug': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) @@ -16485,12 +16351,12 @@ snapshots: '@docusaurus/theme-classic@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(@types/react@19.2.14)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/logger': 3.10.1 '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/plugin-content-pages': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/theme-translations': 3.10.1 @@ -16535,7 +16401,7 @@ snapshots: dependencies: '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@types/history': 4.7.11 @@ -16557,7 +16423,7 @@ snapshots: '@docusaurus/theme-mermaid@3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16589,9 +16455,9 @@ snapshots: dependencies: '@algolia/autocomplete-core': 1.19.8(@algolia/client-search@5.52.0)(algoliasearch@5.52.0)(search-insights@2.17.3) '@docsearch/react': 4.6.3(@algolia/client-search@5.52.0)(@types/react@19.2.14)(algoliasearch@5.52.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(search-insights@2.17.3) - '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/theme-translations': 3.10.1 '@docusaurus/utils': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -16634,27 +16500,6 @@ snapshots: '@docusaurus/tsconfig@3.10.1': {} - '@docusaurus/types@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@mdx-js/mdx': 3.1.1 - '@types/history': 4.7.11 - '@types/mdast': 4.0.4 - '@types/react': 19.2.14 - commander: 5.1.0 - joi: 17.13.3 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)' - utility-types: 3.11.0 - webpack: 5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7) - webpack-merge: 5.10.0 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - '@docusaurus/types@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@mdx-js/mdx': 3.1.1 @@ -17214,13 +17059,13 @@ snapshots: '@gitbeaker/core@43.8.0': dependencies: '@gitbeaker/requester-utils': 43.8.0 - qs: 6.14.1 + qs: 6.15.2 xcase: 2.0.1 '@gitbeaker/requester-utils@43.8.0': dependencies: picomatch-browser: 2.2.6 - qs: 6.14.1 + qs: 6.15.2 rate-limiter-flexible: 8.3.0 xcase: 2.0.1 @@ -17734,6 +17579,19 @@ snapshots: '@logtape/logtape@1.3.8': {} + '@logtape/otel@1.3.8(@logtape/logtape@1.3.8)': + dependencies: + '@logtape/logtape': 1.3.8 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.218.0 + '@opentelemetry/exporter-logs-otlp-grpc': 0.218.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-http': 0.218.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-proto': 0.218.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.218.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.218.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@mdx-js/mdx@3.1.1': dependencies: '@types/estree': 1.0.9 @@ -17880,10 +17738,10 @@ snapshots: '@nevware21/ts-utils': 0.15.0 tslib: 2.8.1 - '@microsoft/docusaurus-plugin-application-insights@4.0.1(@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@docusaurus/types@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@docusaurus/utils-validation@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@microsoft/docusaurus-plugin-application-insights@4.0.1(@docusaurus/core@3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3))(@docusaurus/types@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@docusaurus/utils-validation@3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@docusaurus/core': 3.10.1(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5))(@swc/core@1.15.33(@swc/helpers@0.5.21))(debug@4.4.3)(esbuild@0.28.1)(lightningcss@1.32.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) - '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@docusaurus/types': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@microsoft/applicationinsights-clickanalytics-js': 3.3.10(tslib@2.8.1) '@microsoft/applicationinsights-web': 3.4.1(tslib@2.8.1) @@ -19501,7 +19359,7 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': @@ -20258,7 +20116,7 @@ snapshots: debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.2 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -21558,20 +21416,6 @@ snapshots: optionalDependencies: webpack: 5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1) - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.27.7)(lightningcss@1.32.0)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - cssnano: 6.1.2(postcss@8.5.13) - jest-worker: 29.7.0 - postcss: 8.5.13 - schema-utils: 4.3.3 - serialize-javascript: 7.0.5 - webpack: 5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1) - optionalDependencies: - clean-css: 5.3.3 - esbuild: 0.27.7 - lightningcss: 1.32.0 - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.28.1)(lightningcss@1.32.0)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -22492,7 +22336,7 @@ snapshots: get-tsconfig: 4.13.6 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 unrs-resolver: 1.11.1 optionalDependencies: eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.7.0)) @@ -22577,7 +22421,7 @@ snapshots: eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.7.0)): dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.7 eslint: 9.39.4(jiti@2.7.0) hermes-parser: 0.25.1 zod: 4.4.2 @@ -26652,10 +26496,6 @@ snapshots: pvutils@1.1.5: {} - qs@6.14.1: - dependencies: - side-channel: 1.1.0 - qs@6.15.2: dependencies: side-channel: 1.1.0 @@ -27837,17 +27677,6 @@ snapshots: dotenv: 17.3.1 safe-regex: 2.1.1 - terser-webpack-plugin@5.5.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.3 - terser: 5.46.2 - webpack: 5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1) - optionalDependencies: - '@swc/core': 1.15.33(@swc/helpers@0.5.21) - esbuild: 0.27.7 - terser-webpack-plugin@5.5.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -28549,37 +28378,6 @@ snapshots: webpack-sources@3.4.1: {} - webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.9 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.21.0 - es-module-lexer: 2.1.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - loader-runner: 4.3.2 - mime-db: 1.54.0 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.3 - terser-webpack-plugin: 5.5.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.27.7)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1)) - watchpack: 2.5.1 - webpack-sources: 3.4.1 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.1): dependencies: '@types/eslint-scope': 3.7.7 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5f78d7e5d9..7b406c01a7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,9 +10,15 @@ overrides: "copy-webpack-plugin>serialize-javascript": 7.0.5 "css-minimizer-webpack-plugin>serialize-javascript": 7.0.5 "lodash-es": 4.18.1 + "@logtape/otel>@opentelemetry/api-logs": ^0.218.0 + "@logtape/otel>@opentelemetry/sdk-logs": ^0.218.0 + "@logtape/otel>@opentelemetry/otlp-exporter-base": ^0.218.0 + "@logtape/otel>@opentelemetry/exporter-logs-otlp-grpc": ^0.218.0 + "@logtape/otel>@opentelemetry/exporter-logs-otlp-http": ^0.218.0 + "@logtape/otel>@opentelemetry/exporter-logs-otlp-proto": ^0.218.0 allowBuilds: - '@swc/core': true + "@swc/core": true core-js: false cpu-features: true esbuild: false @@ -23,14 +29,14 @@ allowBuilds: unrs-resolver: false catalog: - '@azure/identity': ^4.13.1 - '@logtape/logtape': ^1.3.8 - '@modelcontextprotocol/sdk': ^1.29.0 - '@tsconfig/node24': 24.0.4 - '@types/js-yaml': ^4.0.9 - '@types/node': ^22.19.17 - '@types/semver': ^7.7.1 - '@vitest/coverage-v8': ^4.1.8 + "@azure/identity": ^4.13.1 + "@logtape/logtape": ^1.3.8 + "@modelcontextprotocol/sdk": ^1.29.0 + "@tsconfig/node24": 24.0.4 + "@types/js-yaml": ^4.0.9 + "@types/node": ^22.19.17 + "@types/semver": ^7.7.1 + "@vitest/coverage-v8": ^4.1.8 commander: ^14.0.3 eslint: ^10.3.0 execa: ^9.6.1 @@ -48,30 +54,30 @@ catalog: zod: ^4.4.2 catalogs: - aws: - '@aws-sdk/client-s3': ^3.1057.0 + "@aws-sdk/client-s3": ^3.1057.0 azure: - '@azure/storage-blob': ^12.31.0 + "@azure/storage-blob": ^12.31.0 github-actions: - '@actions/core': ^3.0.1 - '@actions/github': ^9.1.1 + "@actions/core": ^3.0.1 + "@actions/github": ^9.1.1 opentelemetry: - '@azure/monitor-opentelemetry': 1.18.1 - '@azure/monitor-opentelemetry-exporter': ^1.0.0-beta.42 - '@opentelemetry/api': ^1.9.1 - '@opentelemetry/api-logs': ^0.218.0 - '@opentelemetry/instrumentation': ^0.218.0 - '@opentelemetry/instrumentation-undici': ^0.28.0 - '@opentelemetry/resources': ^2.7.1 - '@opentelemetry/sdk-logs': ^0.218.0 - '@opentelemetry/sdk-trace-base': ^2.7.1 + "@azure/monitor-opentelemetry": 1.18.1 + "@azure/monitor-opentelemetry-exporter": ^1.0.0-beta.42 + "@logtape/otel": 1.3.8 + "@opentelemetry/api": ^1.9.1 + "@opentelemetry/api-logs": ^0.218.0 + "@opentelemetry/instrumentation": ^0.218.0 + "@opentelemetry/instrumentation-undici": ^0.28.0 + "@opentelemetry/resources": ^2.7.1 + "@opentelemetry/sdk-trace-base": ^2.7.1 + "@opentelemetry/sdk-logs": ^0.218.0 react: - '@types/react': ^19.2.14 - '@types/react-dom': ^19.2.3 + "@types/react": ^19.2.14 + "@types/react-dom": ^19.2.3 react: ^19.2.5 react-dom: ^19.2.5 @@ -82,7 +88,7 @@ linkWorkspacePackages: true minimumReleaseAge: 4320 onlyBuiltDependencies: - - '@swc/core' + - "@swc/core" - core-js - core-js-pure - esbuild