diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 00000000..7ca24b83 --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,98 @@ +name: e2e + +# End-to-end AWS Lambda instrumentation suite. Path-filtered so it only runs when +# the construct or the suite changes, and restricted to the canonical repo so forks +# (which lack OIDC) no-op. When it runs, the AWS OIDC / dd-sts steps must succeed -- +# an auth/federation failure fails the job loudly. See e2e/README.md for the contract. +on: + push: + branches: [main] + paths: + - "src/**" + - "e2e/**" + - "package.json" + - "yarn.lock" + - ".github/workflows/e2e.yml" + pull_request: + paths: + - "src/**" + - "e2e/**" + - "package.json" + - "yarn.lock" + - ".github/workflows/e2e.yml" + +# One run per ref; cancel superseded runs so we never have two suites racing for +# the same shared account budget. +concurrency: + group: e2e-${{ github.ref }} + cancel-in-progress: true + +jobs: + lambda-e2e: + # Skip on forks: OIDC federation only exists on the canonical repo. + if: github.repository == 'DataDog/datadog-cdk-constructs' + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + env: + AWS_REGION: ${{ vars.AWS_REGION_E2E || 'ap-northeast-3' }} + DD_SITE: ${{ vars.DD_SITE_E2E || 'datadoghq.com' }} + SKIP_LAMBDA_TESTS: ${{ vars.SKIP_LAMBDA_TESTS || 'false' }} + steps: + - name: Checkout + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + + # Enable Corepack before setup-node so its package-manager cache step detects + # the yarn berry version from package.json instead of falling back to yarn 1. + - name: Enable Corepack + run: corepack enable + + - name: Set up Node 24 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 + with: + node-version: 24 + + - name: Cache Node modules + id: cache-node-modules + uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 + with: + path: "**/node_modules" + key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} + + - name: Install dependencies + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --immutable + + # Dedicated GitHub-OIDC role in the serverless sandbox account, scoped to deploy + # one-e2e-cdk-lambda-* via the CDK bootstrap roles. See serverless-ci/e2e/iam-infra.md. + - name: Configure AWS credentials via OIDC + if: env.SKIP_LAMBDA_TESTS != 'true' + uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1 + with: + role-to-assume: ${{ vars.AWS_ROLE_ARN_E2E }} + aws-region: ${{ env.AWS_REGION }} + + # Short-lived Datadog API + App keys via OIDC federation (dd-sts), governed by the + # policy in dd-source. No static Datadog keys are stored in this repo. + - name: Get Datadog credentials (dd-sts) + id: dd-sts + if: env.SKIP_LAMBDA_TESTS != 'true' + uses: DataDog/dd-sts-action@2e8187910199bd93129520183c093e19aa585c75 # v1.0.0 + with: + policy: datadog-cdk-constructs-e2e + + # The account is already CDK-bootstrapped; deploy reads the bootstrap version + # from SSM, so no bootstrap step is needed. + - name: Resolve account id + if: env.SKIP_LAMBDA_TESTS != 'true' + run: echo "CDK_DEFAULT_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)" >> "$GITHUB_ENV" + + - name: Run Lambda e2e suite + run: yarn test:e2e + env: + # Baked into the function at synth + used by the construct/extension. + DD_API_KEY: ${{ steps.dd-sts.outputs.api_key }} + # Used by the telemetry checker to query spans/logs. + DATADOG_API_KEY: ${{ steps.dd-sts.outputs.api_key }} + DATADOG_APP_KEY: ${{ steps.dd-sts.outputs.app_key }} diff --git a/.gitignore b/.gitignore index 88351007..ce9b805f 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,9 @@ test/__snapshots__ .DS_Store integration_tests/cdk.out integration_tests/testlib +e2e/cdk.out +e2e/.build +e2e/.env.local bin obj __pycache__ diff --git a/.npmignore b/.npmignore index 6564d2f2..7c70b056 100644 --- a/.npmignore +++ b/.npmignore @@ -4,6 +4,7 @@ !NOTICE /scripts /integration_tests +/e2e .prettierrc /.ncurc.cjs cdk.out/* diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..05e6d1c2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +# Synced from serverless-ci/e2e/shared by the e2e-shared sync. Generated code is not +# hand-formatted here -- the source-of-truth style can't satisfy every consumer's +# prettier config, so the formatter skips these files. +e2e/helpers/exec.ts +e2e/helpers/naming.ts +e2e/helpers/lambda-telemetry-checker.ts +e2e/helpers/lambda-verifier.ts diff --git a/.projen/deps.json b/.projen/deps.json index 31cea3b0..61d986a8 100644 --- a/.projen/deps.json +++ b/.projen/deps.json @@ -5,6 +5,11 @@ "version": "^2.134.0-alpha.0", "type": "build" }, + { + "name": "@datadog/datadog-api-client", + "version": "^1.34.1", + "type": "build" + }, { "name": "@stylistic/eslint-plugin", "version": "^2", @@ -105,6 +110,11 @@ "name": "typescript", "type": "build" }, + { + "name": "vitest", + "version": "^3.2.4", + "type": "build" + }, { "name": "loglevel", "type": "bundled" diff --git a/.projen/tasks.json b/.projen/tasks.json index eb7dc9c4..6d44f2cb 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -25,7 +25,7 @@ "name": "check-formatting", "steps": [ { - "exec": "prettier --check src/**/*.ts integration_tests/**/*.ts examples/**/*.ts" + "exec": "prettier --check src/**/*.ts integration_tests/**/*.ts examples/**/*.ts e2e/**/*.ts" } ] }, @@ -200,6 +200,14 @@ } ] }, + "test:e2e": { + "name": "test:e2e", + "steps": [ + { + "exec": "vitest run --config e2e/vitest.config.ts e2e" + } + ] + }, "test:watch": { "name": "test:watch", "description": "Run jest in watch mode", @@ -224,7 +232,7 @@ "exec": "yarn install --no-immutable" }, { - "exec": "yarn up -R @aws-cdk/aws-lambda-python-alpha @stylistic/eslint-plugin @types/jest @types/node @typescript-eslint/eslint-plugin @typescript-eslint/parser esbuild eslint-config-prettier eslint-import-resolver-typescript eslint-plugin-import eslint-plugin-prettier eslint jest jest-junit jsii-diff jsii-pacmak jsii-rosetta jsii prettier projen standard-version ts-jest ts-node typescript loglevel aws-cdk-lib constructs" + "exec": "yarn up -R @aws-cdk/aws-lambda-python-alpha @datadog/datadog-api-client @stylistic/eslint-plugin @types/jest @types/node @typescript-eslint/eslint-plugin @typescript-eslint/parser esbuild eslint-config-prettier eslint-import-resolver-typescript eslint-plugin-import eslint-plugin-prettier eslint jest jest-junit jsii-diff jsii-pacmak jsii-rosetta jsii prettier projen standard-version ts-jest ts-node typescript vitest loglevel aws-cdk-lib constructs" }, { "exec": "yarn projen" diff --git a/.projenrc.js b/.projenrc.js index 43cef895..aaddecb2 100644 --- a/.projenrc.js +++ b/.projenrc.js @@ -48,6 +48,9 @@ const project = new awscdk.AwsCdkConstructLibrary({ "esbuild", "standard-version", "@aws-cdk/aws-lambda-python-alpha@^2.134.0-alpha.0", + // e2e suite (runs out of e2e/, separate from the jsii-packaged library) + "vitest@^3.2.4", + "@datadog/datadog-api-client@^1.34.1", ], gitignore: [ "*.js", @@ -64,6 +67,9 @@ const project = new awscdk.AwsCdkConstructLibrary({ ".DS_Store", "integration_tests/cdk.out", "integration_tests/testlib", + "e2e/cdk.out", + "e2e/.build", + "e2e/.env.local", "bin", "obj", "__pycache__", @@ -76,6 +82,7 @@ const project = new awscdk.AwsCdkConstructLibrary({ "!NOTICE", "/scripts", "/integration_tests", + "/e2e", ".prettierrc", "/.ncurc.cjs", "cdk.out/*", @@ -85,7 +92,9 @@ const project = new awscdk.AwsCdkConstructLibrary({ "/examples", ], scripts: { - "check-formatting": "prettier --check src/**/*.ts integration_tests/**/*.ts examples/**/*.ts", + "check-formatting": "prettier --check src/**/*.ts integration_tests/**/*.ts examples/**/*.ts e2e/**/*.ts", + // Runs the AWS Lambda e2e lifecycle suite. Requires cloud auth + DD keys; see e2e/README.md. + "test:e2e": "vitest run --config e2e/vitest.config.ts e2e", }, pullRequestTemplate: false, dependabot: false, diff --git a/e2e/README.md b/e2e/README.md new file mode 100644 index 00000000..83fdb82d --- /dev/null +++ b/e2e/README.md @@ -0,0 +1,81 @@ +# Lambda e2e suite + +End-to-end test for the `DatadogLambda` construct against real AWS, conforming to the +serverless instrumentation e2e contract (`serverless-ci/e2e/spec.md`). It deploys an +uninstrumented Node.js Lambda, applies the construct, proves telemetry flows to +Datadog, asserts re-apply is idempotent, removes instrumentation, and verifies a clean +end-state -- tearing the function down regardless of outcome. + +## What it does + +The construct is the instrumentation mechanism, so APPLY is `cdk deploy` of the +stack (`app/app.ts`) with `E2E_INSTRUMENT=true`; REMOVE is `cdk destroy` of that +same stack, leaving a clean (no-function) end-state: + +1. **Provision** -- deploy the workload uninstrumented (`E2E_INSTRUMENT=false`), + uniquely named `one-e2e-cdk-lambda-` and freshness-tagged at creation. +2. **APPLY** -- deploy with `E2E_INSTRUMENT=true`; verify config: pinned Datadog Node + + Extension layers, handler redirected to the Datadog wrapper, and the required + `DD_*` env vars asserted by identity (`DD_SERVICE`, `DD_ENV`, `DD_VERSION`, + `DD_SITE`, `DD_API_KEY`, `DD_TRACE_ENABLED`, `DD_LOGS_INJECTION`, run id in + `DD_TAGS`). +3. **Trigger** -- `aws lambda invoke`, then poll Datadog spans + logs filtered by the + run id and assert each carries the expected `service`/`env`/`version`/run id. +4. **Re-APPLY** -- `cdk diff --fail`; assert no diff (idempotent). +5. **REMOVE** -- `cdk destroy` the stack; assert the function is gone + (`get-function-configuration` returns `ResourceNotFoundException`), proving a clean + end-state. + +Pinned artifact versions live in `helpers/versions.ts`; bump them deliberately so a +failure blames this construct's wiring, not an upstream layer/tracer change. + +## Prerequisites + +- **AWS auth** with permission to deploy Lambda + CloudFormation in a + CDK-bootstrapped account/region. Locally: + `aws-vault exec sso-serverless-sandbox-account-admin -- yarn test:e2e`. + Bootstrap once per account/region if needed: `npx cdk bootstrap`. +- **Datadog keys** for the org telemetry lands in: + - `DD_API_KEY` -- baked into the function (used by the construct + extension). + - `DATADOG_API_KEY` / `DATADOG_APP_KEY` -- used by the telemetry checker to query + spans and logs. (`DD_API_KEY` / `DD_APP_KEY` are accepted as fallbacks.) +- **`DD_SITE`** -- defaults to `datadoghq.com`; set to match the key's org. +- Node 22+ and `yarn install`. + +## Run + +```bash +# full lifecycle (real deploys + telemetry; ~10-15 min) +# Datadog auth: dd-auth mints short-lived keys for the org -- no pasted keys. +# It injects $DD_API_KEY and $DD_APP_KEY into the wrapped command only; DD_API_KEY +# is baked into the function, and DATADOG_API_KEY/DATADOG_APP_KEY feed the checker. +aws-vault exec sso-serverless-sandbox-account-admin -- \ + dd-auth --domain app.datadoghq.com -- bash -c ' + export DATADOG_API_KEY="$DD_API_KEY" DATADOG_APP_KEY="$DD_APP_KEY" + yarn test:e2e + ' + +# skip (no-op) -- what forks/CI without secrets do +SKIP_LAMBDA_TESTS=true yarn test:e2e +``` + +## CI + +`.github/workflows/e2e.yml` runs this behind path filters (construct or suite +changes) with `SKIP_LAMBDA_TESTS` as a kill switch. AWS access is via GitHub OIDC +into the dedicated `gha-datadog-cdk-e2e` role in the serverless sandbox account +(`arn:aws:iam::425362996713:role/gha-datadog-cdk-e2e`), scoped to deploy +`one-e2e-cdk-lambda-*` through the CDK bootstrap roles. Config comes from repo +variables (`AWS_ROLE_ARN_E2E`, `AWS_REGION_E2E`, `DD_SITE_E2E`); telemetry keys are minted +at runtime via [`DataDog/dd-sts-action`](https://github.com/DataDog/dd-sts-action) under the +`datadog-cdk-constructs-e2e` policy (GitHub OIDC → short-lived Datadog API + App keys), so no +static Datadog keys live in this repo. When the construct or suite changes the suite runs for +real and the AWS OIDC / dd-sts steps must succeed -- an auth failure fails the job loudly. The +IAM resources are cataloged in `serverless-ci/e2e/iam-infra.md`. + +## Hygiene + +Every resource is named `one-e2e-cdk-lambda-` and tagged +`one_e2e_created:` at creation. The in-test teardown is best-effort; the +cross-repo sweeper is the real guarantee, reaping any `one-e2e-` resource older than +the grace window. diff --git a/e2e/helpers/e2e.config.ts b/e2e/helpers/e2e.config.ts new file mode 100644 index 00000000..370c70f2 --- /dev/null +++ b/e2e/helpers/e2e.config.ts @@ -0,0 +1,76 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed + * under the Apache License Version 2.0. + * + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2026 Datadog, Inc. + */ + +import { type E2ENaming } from "./naming"; +import { type ExpectedLayers, type LambdaVerifierConfig } from "./lambda-verifier"; +import { E2E_EXTENSION_LAYER_VERSION, E2E_NODE_LAYER_VERSION } from "./versions"; + +// Repo-local config feeding the shared e2e helpers. This file is NOT synced -- it holds +// everything specific to datadog-cdk-constructs that the shared, parameterized helpers +// read through their config arguments. + +export const NAMING: E2ENaming = { tool: "cdk", platform: "lambda" }; + +export const ENV_NAME = process.env.E2E_ENV ?? "e2e"; +export const ENV_VERSION = process.env.E2E_VERSION ?? "1.0.0"; + +// Datadog's public layer account (commercial, non-GovCloud). The e2e defaults to ap-northeast-3. +const DD_ACCOUNT_ID = "464622532012"; + +// Transient cloud-provider errors safe to retry, passed as ExecOptions.retryPatterns. +export const RETRY_PATTERNS = [ + "RequestTimeout", + "Throttling", + "TooManyRequests", + "Rate exceeded", + "ServiceUnavailable", + "InternalFailure", + "ResourceConflictException", + "OperationAbortedException", + "ETIMEDOUT", + "ECONNRESET", + "EAI_AGAIN", + "Connection reset", + "timed out", + "UPDATE_IN_PROGRESS", +]; + +// The CDK app names the function after the run-unique service name, so the deployed +// function name is the service name itself. +export const functionName = (serviceName: string): string => serviceName; + +// Pinned artifact versions come from this repo's e2e/helpers/versions.ts, so a version +// mismatch blames the construct's wiring, not upstream layer drift. +const expectedLayerArns = (region: string): ExpectedLayers => ({ + node: `arn:aws:lambda:${region}:${DD_ACCOUNT_ID}:layer:Datadog-Node22-x:${E2E_NODE_LAYER_VERSION}`, + extension: `arn:aws:lambda:${region}:${DD_ACCOUNT_ID}:layer:Datadog-Extension:${E2E_EXTENSION_LAYER_VERSION}`, +}); + +export const VERIFIER: LambdaVerifierConfig = { + functionName, + expectedLayerArns, + redirectHandler: "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler", + originalHandler: "index.handler", + // The construct tags every instrumented function with its own marker tag. + toolTag: { key: "dd_cdk_construct", pattern: /.+/ }, + env: { + apiKeyVars: ["DD_API_KEY", "DD_API_KEY_SECRET_ARN", "DD_KMS_API_KEY", "DD_API_KEY_SSM_ARN"], + present: ["DD_SITE"], + values: (serviceName) => ({ + DD_SERVICE: serviceName, + DD_ENV: ENV_NAME, + DD_VERSION: ENV_VERSION, + DD_TRACE_ENABLED: "true", + // With the extension, log collection is enabled via DD_SERVERLESS_LOGS_ENABLED; + // the construct intentionally forces DD_LOGS_INJECTION=false in this path. + DD_SERVERLESS_LOGS_ENABLED: "true", + DD_LOGS_INJECTION: "false", + DD_LAMBDA_HANDLER: "index.handler", + }), + }, +}; diff --git a/e2e/helpers/versions.ts b/e2e/helpers/versions.ts new file mode 100644 index 00000000..87e00c13 --- /dev/null +++ b/e2e/helpers/versions.ts @@ -0,0 +1,19 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed + * under the Apache License Version 2.0. + * + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2021 Datadog, Inc. + */ + +import * as lambda from "aws-cdk-lib/aws-lambda"; + +// Pinned artifact versions. Pinning the layer/extension versions (and the single +// canonical runtime) means an e2e failure blames this construct's wiring, not an +// upstream layer/tracer change. Bump deliberately. See spec.md ("Rules"). +export const E2E_RUNTIME = lambda.Runtime.NODEJS_22_X; + +// `Datadog-Node22-x` layer version. +export const E2E_NODE_LAYER_VERSION = 130; +// `Datadog-Extension` layer version. +export const E2E_EXTENSION_LAYER_VERSION = 83; diff --git a/e2e/lambda.test.ts b/e2e/lambda.test.ts new file mode 100644 index 00000000..8725d2bd --- /dev/null +++ b/e2e/lambda.test.ts @@ -0,0 +1,129 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed + * under the Apache License Version 2.0. + * + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2021 Datadog, Inc. + */ + +import { afterAll, beforeAll, describe, expect, it } from "vitest"; +import { ENV_NAME, ENV_VERSION, NAMING, RETRY_PATTERNS, VERIFIER } from "./helpers/e2e.config"; +import { execPromise, execPromiseWithRetries } from "./helpers/exec"; +import { verifyInstrumented, verifyUninstrumented } from "./helpers/lambda-verifier"; +import { checkTelemetryFlowing } from "./helpers/lambda-telemetry-checker"; +import { freshnessTimestamp, namePrefix, newRunId } from "./helpers/naming"; + +const DEPLOY_TIMEOUT_MS = 900_000; +const TELEMETRY_TIMEOUT_MS = 600_000; + +const describeOrSkip = process.env.SKIP_LAMBDA_TESTS === "true" ? describe.skip : describe; + +describeOrSkip("cdk lambda e2e", () => { + const region = process.env.AWS_REGION ?? "ap-northeast-3"; + const runId = newRunId(); + const serviceName = namePrefix(NAMING, runId); + const createdTs = freshnessTimestamp(); + const env = ENV_NAME; + const version = ENV_VERSION; + const site = process.env.DD_SITE ?? "datadoghq.com"; + + // The repo's TS 6 toolchain is incompatible with ts-node, so the CDK app is + // bundled to a single CJS file with esbuild (node_modules left external) and run + // with plain node. The DatadogLambda construct is bundled from src -- the e2e + // exercises the construct code in this repo, not a published package. + const appBundle = "e2e/.build/app.cjs"; + const cdkBase = `npx cdk --app "node ${appBundle}" --output e2e/cdk.out`; + + // Both APPLY and REMOVE deploy this same stack; only E2E_INSTRUMENT differs. + const baseEnv = (instrument: boolean): Record => ({ + E2E_SERVICE_NAME: serviceName, + E2E_RUN_ID: runId, + E2E_CREATED_TS: createdTs, + E2E_INSTRUMENT: instrument ? "true" : "false", + E2E_ENV: env, + E2E_VERSION: version, + DD_SITE: site, + CDK_DEFAULT_REGION: region, + AWS_REGION: region, + TS_NODE_PROJECT: "e2e/tsconfig.json", + }); + + const deploy = (instrument: boolean) => + execPromiseWithRetries(`${cdkBase} deploy "${serviceName}" --require-approval never`, { + env: baseEnv(instrument), + retryPatterns: RETRY_PATTERNS, + }); + + beforeAll(async () => { + // Bundle the CDK app (construct included from src) to a single CJS entrypoint. + const bundle = await execPromise( + `npx esbuild e2e/app/app.ts --bundle --platform=node --target=node22 --packages=external --outfile=${appBundle}`, + ); + if (bundle.exitCode !== 0) { + throw new Error(`Failed to bundle CDK app: ${bundle.stderr || bundle.stdout}`); + } + + // Provision the uninstrumented workload (unique name, freshness-tagged at creation). + const result = await deploy(false); + if (result.exitCode !== 0) { + throw new Error(`Failed to provision workload: ${result.stderr || result.stdout}`); + } + }, DEPLOY_TIMEOUT_MS); + + afterAll(async () => { + // Always tear down, even on failure. + try { + await execPromise(`${cdkBase} destroy "${serviceName}" --force`, { env: baseEnv(false) }); + } catch (error) { + console.error("Failed to destroy workload stack:", error); + } + }, DEPLOY_TIMEOUT_MS); + + it( + "APPLY instruments the function and config is correct", + async () => { + const result = await deploy(true); + expect(result.exitCode, result.stderr || result.stdout).toBe(0); + + await verifyInstrumented(VERIFIER, serviceName, region); + }, + DEPLOY_TIMEOUT_MS, + ); + + it( + "telemetry flows to Datadog with the expected identity", + async () => { + const invoke = await execPromiseWithRetries( + `aws lambda invoke --function-name "${serviceName}" --region "${region}" --payload '{}' --cli-binary-format raw-in-base64-out /dev/null`, + { retryPatterns: RETRY_PATTERNS }, + ); + expect(invoke.exitCode, invoke.stderr).toBe(0); + + await checkTelemetryFlowing({ serviceName, env, version, runId }); + }, + TELEMETRY_TIMEOUT_MS, + ); + + it( + "re-APPLY is idempotent (no diff)", + async () => { + const diff = await execPromise(`${cdkBase} diff "${serviceName}" --fail`, { env: baseEnv(true) }); + expect(diff.exitCode, `expected no diff on re-apply:\n${diff.stdout}\n${diff.stderr}`).toBe(0); + }, + DEPLOY_TIMEOUT_MS, + ); + + it( + "REMOVE deletes the function and the end-state is clean", + async () => { + const result = await execPromiseWithRetries(`${cdkBase} destroy "${serviceName}" --force`, { + env: baseEnv(false), + retryPatterns: RETRY_PATTERNS, + }); + expect(result.exitCode, result.stderr || result.stdout).toBe(0); + + await verifyUninstrumented(VERIFIER, serviceName, region); + }, + DEPLOY_TIMEOUT_MS, + ); +}); diff --git a/e2e/vitest.config.ts b/e2e/vitest.config.ts new file mode 100644 index 00000000..3d680974 --- /dev/null +++ b/e2e/vitest.config.ts @@ -0,0 +1,23 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed + * under the Apache License Version 2.0. + * + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2021 Datadog, Inc. + */ + +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["**/*.test.ts"], + // The lifecycle is one ordered chain (apply -> trigger -> re-apply -> remove) + // sharing a single deployed function, so it must run serially. + fileParallelism: false, + sequence: { concurrent: false }, + hookTimeout: 900_000, + testTimeout: 900_000, + // Real cloud deploys are slow; never let a hung step wedge CI past its budget. + teardownTimeout: 900_000, + }, +}); diff --git a/package.json b/package.json index ab5db4e9..57f60236 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "post-upgrade": "projen post-upgrade", "pre-compile": "projen pre-compile", "test": "projen test", + "test:e2e": "projen test:e2e", "test:watch": "projen test:watch", "upgrade": "projen upgrade", "watch": "projen watch", @@ -34,6 +35,7 @@ }, "devDependencies": { "@aws-cdk/aws-lambda-python-alpha": "^2.134.0-alpha.0", + "@datadog/datadog-api-client": "^1.34.1", "@stylistic/eslint-plugin": "^2", "@types/jest": "^30.0.0", "@types/node": "^22", @@ -58,7 +60,8 @@ "standard-version": "^9.5.0", "ts-jest": "^29.4.11", "ts-node": "^10.9.2", - "typescript": "^6.0.3" + "typescript": "^6.0.3", + "vitest": "^3.2.4" }, "peerDependencies": { "aws-cdk-lib": "^2.253.1", diff --git a/yarn.lock b/yarn.lock index a873f865..03572af5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -454,6 +454,22 @@ __metadata: languageName: node linkType: hard +"@datadog/datadog-api-client@npm:^1.34.1": + version: 1.58.0 + resolution: "@datadog/datadog-api-client@npm:1.58.0" + dependencies: + "@types/buffer-from": "npm:^1.1.0" + "@types/node": "npm:*" + "@types/pako": "npm:^1.0.3" + buffer-from: "npm:^1.1.2" + cross-fetch: "npm:^3.1.5" + form-data: "npm:^4.0.4" + loglevel: "npm:^1.8.1" + pako: "npm:^2.0.4" + checksum: 10c0/4cb9a8227b2eba15b2b31ec256509d276031451ac7e887489e0eea8ac4b4e7dcbdf99e73e7053e3300723b75e217373074ea0cd856531529735cdd6ad5e284d3 + languageName: node + linkType: hard + "@emnapi/core@npm:^1.4.3": version: 1.10.0 resolution: "@emnapi/core@npm:1.10.0" @@ -482,6 +498,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/aix-ppc64@npm:0.27.7" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/aix-ppc64@npm:0.28.0" @@ -489,6 +512,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm64@npm:0.27.7" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/android-arm64@npm:0.28.0" @@ -496,6 +526,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm@npm:0.27.7" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/android-arm@npm:0.28.0" @@ -503,6 +540,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-x64@npm:0.27.7" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/android-x64@npm:0.28.0" @@ -510,6 +554,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-arm64@npm:0.27.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/darwin-arm64@npm:0.28.0" @@ -517,6 +568,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-x64@npm:0.27.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/darwin-x64@npm:0.28.0" @@ -524,6 +582,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-arm64@npm:0.27.7" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/freebsd-arm64@npm:0.28.0" @@ -531,6 +596,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-x64@npm:0.27.7" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/freebsd-x64@npm:0.28.0" @@ -538,6 +610,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm64@npm:0.27.7" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-arm64@npm:0.28.0" @@ -545,6 +624,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm@npm:0.27.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-arm@npm:0.28.0" @@ -552,6 +638,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ia32@npm:0.27.7" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-ia32@npm:0.28.0" @@ -559,6 +652,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-loong64@npm:0.27.7" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-loong64@npm:0.28.0" @@ -566,6 +666,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-mips64el@npm:0.27.7" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-mips64el@npm:0.28.0" @@ -573,6 +680,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ppc64@npm:0.27.7" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-ppc64@npm:0.28.0" @@ -580,6 +694,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-riscv64@npm:0.27.7" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-riscv64@npm:0.28.0" @@ -587,6 +708,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-s390x@npm:0.27.7" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-s390x@npm:0.28.0" @@ -594,6 +722,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-x64@npm:0.27.7" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/linux-x64@npm:0.28.0" @@ -601,6 +736,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-arm64@npm:0.27.7" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/netbsd-arm64@npm:0.28.0" @@ -608,6 +750,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-x64@npm:0.27.7" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/netbsd-x64@npm:0.28.0" @@ -615,6 +764,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-arm64@npm:0.27.7" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/openbsd-arm64@npm:0.28.0" @@ -622,6 +778,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-x64@npm:0.27.7" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/openbsd-x64@npm:0.28.0" @@ -629,6 +792,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openharmony-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openharmony-arm64@npm:0.27.7" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openharmony-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/openharmony-arm64@npm:0.28.0" @@ -636,6 +806,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/sunos-x64@npm:0.27.7" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/sunos-x64@npm:0.28.0" @@ -643,6 +820,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-arm64@npm:0.27.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/win32-arm64@npm:0.28.0" @@ -650,6 +834,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-ia32@npm:0.27.7" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/win32-ia32@npm:0.28.0" @@ -657,6 +848,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-x64@npm:0.27.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.28.0": version: 0.28.0 resolution: "@esbuild/win32-x64@npm:0.28.0" @@ -1196,7 +1394,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": version: 1.5.5 resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 @@ -1382,6 +1580,181 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.62.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-android-arm64@npm:4.62.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.62.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.62.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.62.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.62.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.62.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.62.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.62.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.62.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.62.0" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.62.0" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.62.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.62.0" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.62.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.62.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.62.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.62.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.62.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-openbsd-x64@npm:4.62.0" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.62.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.62.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.62.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.62.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.62.0": + version: 4.62.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.62.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rtsao/scc@npm:^1.1.0": version: 1.1.0 resolution: "@rtsao/scc@npm:1.1.0" @@ -1507,6 +1880,39 @@ __metadata: languageName: node linkType: hard +"@types/buffer-from@npm:^1.1.0": + version: 1.1.3 + resolution: "@types/buffer-from@npm:1.1.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/c8e0e3a9e24085a3af83b8c10ce1630aa3e21d6800263d4bdcb0b734afa75addc02a2ccb1d404f83ccff4619e5100219d3aaae8d558df6709c97e6c458c99e05 + languageName: node + linkType: hard + +"@types/chai@npm:^5.2.2": + version: 5.2.3 + resolution: "@types/chai@npm:5.2.3" + dependencies: + "@types/deep-eql": "npm:*" + assertion-error: "npm:^2.0.1" + checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f + languageName: node + linkType: hard + +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.9, @types/estree@npm:^1.0.0": + version: 1.0.9 + resolution: "@types/estree@npm:1.0.9" + checksum: 10c0/3ad3286ca2988cd550dafb8f2ad599c8474868e954fa601a36655bdfefd8039f7c714b8c1c7f2ae219ffbd58bd4660e66fa7479a0120fc02d4777057d4865387 + languageName: node + linkType: hard + "@types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -1595,6 +2001,13 @@ __metadata: languageName: node linkType: hard +"@types/pako@npm:^1.0.3": + version: 1.0.7 + resolution: "@types/pako@npm:1.0.7" + checksum: 10c0/1ba133db0b30a974c3d651c85651fd30135f629727b4b4d7ef2649c8f8b01014d5ef41f75399d939e320a50bfa87c32beccbb513badfeaf85d74ea6d5370fdcc + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.3": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -1978,6 +2391,89 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:3.2.6": + version: 3.2.6 + resolution: "@vitest/expect@npm:3.2.6" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:3.2.6" + "@vitest/utils": "npm:3.2.6" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/bb51fa6a1f0740b3ee994347bc5067c8a17c2f3dea56b76a8c2c328885cdbfbafbb99b0b94b8166dc605eedbb9f467d37a6a0e0c81855eb18e232417cca4ccbd + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.6": + version: 3.2.6 + resolution: "@vitest/mocker@npm:3.2.6" + dependencies: + "@vitest/spy": "npm:3.2.6" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/0429d72e52ca1cc25d7ac44fbc251d0486974d8e0e59860c605d72456c0a17fa1d464b2a5e34690c17afcc7be562d7c22595f53503244a858f1f5903998da100 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.2.6, @vitest/pretty-format@npm:^3.2.6": + version: 3.2.6 + resolution: "@vitest/pretty-format@npm:3.2.6" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/9fc2887ef4206c90392de4e205d0109add35382446914d0124c53d1da327f49b9e9535fb336cb260394c176e4bb14b1b3aba0a42ab12b0f8b95034ccd4fed4eb + languageName: node + linkType: hard + +"@vitest/runner@npm:3.2.6": + version: 3.2.6 + resolution: "@vitest/runner@npm:3.2.6" + dependencies: + "@vitest/utils": "npm:3.2.6" + pathe: "npm:^2.0.3" + strip-literal: "npm:^3.0.0" + checksum: 10c0/bfc552ee2424ec62e4d6c075d000348a8187eb1be7ce9ae4673139c2f4a71e271ac15bef4d6af27cb5a29f4776dd437bea9d5819f62f0b5ece3c6dd857fa300d + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.2.6": + version: 3.2.6 + resolution: "@vitest/snapshot@npm:3.2.6" + dependencies: + "@vitest/pretty-format": "npm:3.2.6" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10c0/b8f73cc2bc50ca6cd013e2dae1f531aa2132d053e52d2055da8544290e6e8a92dd06f8cf07e8fce15137f27e8156f2936eb6bd9fa63c76e6f6a9813cf0820022 + languageName: node + linkType: hard + +"@vitest/spy@npm:3.2.6": + version: 3.2.6 + resolution: "@vitest/spy@npm:3.2.6" + dependencies: + tinyspy: "npm:^4.0.3" + checksum: 10c0/b4b022546523168f361cd640dff68feb9709b259aacc05e12055a4f278d07e58fbb280ae70454425199f91e62729b03f0a16bdfe880c5a0b1b10c02bc334fc30 + languageName: node + linkType: hard + +"@vitest/utils@npm:3.2.6": + version: 3.2.6 + resolution: "@vitest/utils@npm:3.2.6" + dependencies: + "@vitest/pretty-format": "npm:3.2.6" + loupe: "npm:^3.1.4" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/452da757082ebcadf43ce697bf4077d546ea06e094763969440c3cb0d7bb950be0f69d6dbdab297cd0307bdf956294e20b0184d0218a4ef942d3d253995d44ed + languageName: node + linkType: hard + "@xmldom/xmldom@npm:^0.9.10": version: 0.9.10 resolution: "@xmldom/xmldom@npm:0.9.10" @@ -2258,6 +2754,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -2272,6 +2775,13 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -2475,13 +2985,20 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:^1.0.0": +"buffer-from@npm:^1.0.0, buffer-from@npm:^1.1.2": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + "cacache@npm:^20.0.1": version: 20.0.4 resolution: "cacache@npm:20.0.4" @@ -2578,6 +3095,19 @@ __metadata: languageName: node linkType: hard +"chai@npm:^5.2.0": + version: 5.3.3 + resolution: "chai@npm:5.3.3" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/b360fd4d38861622e5010c2f709736988b05c7f31042305fa3f4e9911f6adb80ccfb4e302068bf8ed10e835c2e2520cba0f5edc13d878b886987e5aa62483f53 + languageName: node + linkType: hard + "chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -2606,6 +3136,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.3 + resolution: "check-error@npm:2.1.3" + checksum: 10c0/878e99038fb6476316b74668cd6a498c7e66df3efe48158fa40db80a06ba4258742ac3ee2229c4a2a98c5e73f5dff84eb3e50ceb6b65bbd8f831eafc8338607d + languageName: node + linkType: hard + "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -2713,6 +3250,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "comment-json@npm:4.2.2": version: 4.2.2 resolution: "comment-json@npm:4.2.2" @@ -3006,6 +3552,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" + dependencies: + node-fetch: "npm:^2.7.0" + checksum: 10c0/d8596adf0269130098a676f6739a0922f3cc7b71cc89729925411ebe851a87026171c82ea89154c4811c9867c01c44793205a52e618ce2684650218c7fbeeb9f + languageName: node + linkType: hard + "cross-spawn@npm:^6.0.0": version: 6.0.6 resolution: "cross-spawn@npm:6.0.6" @@ -3075,6 +3630,7 @@ __metadata: resolution: "datadog-cdk-constructs-v2@workspace:." dependencies: "@aws-cdk/aws-lambda-python-alpha": "npm:^2.134.0-alpha.0" + "@datadog/datadog-api-client": "npm:^1.34.1" "@stylistic/eslint-plugin": "npm:^2" "@types/jest": "npm:^30.0.0" "@types/node": "npm:^22" @@ -3101,6 +3657,7 @@ __metadata: ts-jest: "npm:^29.4.11" ts-node: "npm:^10.9.2" typescript: "npm:^6.0.3" + vitest: "npm:^3.2.4" peerDependencies: aws-cdk-lib: ^2.253.1 constructs: ^10.5.1 @@ -3178,6 +3735,13 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -3214,6 +3778,13 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + "detect-indent@npm:^5.0.0": version: 5.0.0 resolution: "detect-indent@npm:5.0.0" @@ -3431,6 +4002,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -3472,6 +4050,95 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.27.0": + version: 0.27.7 + resolution: "esbuild@npm:0.27.7" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.7" + "@esbuild/android-arm": "npm:0.27.7" + "@esbuild/android-arm64": "npm:0.27.7" + "@esbuild/android-x64": "npm:0.27.7" + "@esbuild/darwin-arm64": "npm:0.27.7" + "@esbuild/darwin-x64": "npm:0.27.7" + "@esbuild/freebsd-arm64": "npm:0.27.7" + "@esbuild/freebsd-x64": "npm:0.27.7" + "@esbuild/linux-arm": "npm:0.27.7" + "@esbuild/linux-arm64": "npm:0.27.7" + "@esbuild/linux-ia32": "npm:0.27.7" + "@esbuild/linux-loong64": "npm:0.27.7" + "@esbuild/linux-mips64el": "npm:0.27.7" + "@esbuild/linux-ppc64": "npm:0.27.7" + "@esbuild/linux-riscv64": "npm:0.27.7" + "@esbuild/linux-s390x": "npm:0.27.7" + "@esbuild/linux-x64": "npm:0.27.7" + "@esbuild/netbsd-arm64": "npm:0.27.7" + "@esbuild/netbsd-x64": "npm:0.27.7" + "@esbuild/openbsd-arm64": "npm:0.27.7" + "@esbuild/openbsd-x64": "npm:0.27.7" + "@esbuild/openharmony-arm64": "npm:0.27.7" + "@esbuild/sunos-x64": "npm:0.27.7" + "@esbuild/win32-arm64": "npm:0.27.7" + "@esbuild/win32-ia32": "npm:0.27.7" + "@esbuild/win32-x64": "npm:0.27.7" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 + languageName: node + linkType: hard + "esbuild@npm:^0.28.0": version: 0.28.0 resolution: "esbuild@npm:0.28.0" @@ -3837,6 +4504,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -3883,6 +4559,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.1": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd + languageName: node + linkType: hard + "expect@npm:30.4.1": version: 30.4.1 resolution: "expect@npm:30.4.1" @@ -4104,6 +4787,19 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.4": + version: 4.0.6 + resolution: "form-data@npm:4.0.6" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.4" + mime-types: "npm:^2.1.35" + checksum: 10c0/43947a77bf0ff45c6ceed789778982d47a3f3e720a74b71721174ebf3310a5f1a8be1d6b38a3ee3688e8a18a2c4273073ec0844cd37efda3eaf46d41c9c318ff + languageName: node + linkType: hard + "fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -4153,7 +4849,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.3": +"fsevents@npm:^2.3.3, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -4163,7 +4859,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -4556,6 +5252,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.4": + version: 2.0.4 + resolution: "hasown@npm:2.0.4" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/2d8de939e270b70618f8cebb69746620db10617dbb495bc66ddad326955ea24d3ca4af133aff3eb7c1853e0218f867bc2b050ec26fe02e3aea58f880ffc5e506 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -5651,6 +6356,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e + languageName: node + linkType: hard + "js-yaml@npm:^3.13.1": version: 3.14.2 resolution: "js-yaml@npm:3.14.2" @@ -6059,13 +6771,20 @@ __metadata: languageName: node linkType: hard -"loglevel@npm:^1.9.2": +"loglevel@npm:^1.8.1, loglevel@npm:^1.9.2": version: 1.9.2 resolution: "loglevel@npm:1.9.2" checksum: 10c0/1e317fa4648fe0b4a4cffef6de037340592cee8547b07d4ce97a487abe9153e704b98451100c799b032c72bb89c9366d71c9fb8192ada8703269263ae77acdc7 languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.4": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 10c0/910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 + languageName: node + linkType: hard + "lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -6098,6 +6817,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.17": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a + languageName: node + linkType: hard + "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -6397,6 +7125,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.12": + version: 3.3.12 + resolution: "nanoid@npm:3.3.12" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/ba142b7b39e11e80c16dd74b0365d407880c87c1cf7e1480956981ae940ee36060fa5b6f092cd1e315184dd19244c657bd017d03327bd3c62247d691c5e8edfb + languageName: node + linkType: hard + "napi-postinstall@npm:^0.3.0": version: 0.3.4 resolution: "napi-postinstall@npm:0.3.4" @@ -6434,6 +7171,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 12.2.0 resolution: "node-gyp@npm:12.2.0" @@ -6739,6 +7490,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:^2.0.4": + version: 2.1.0 + resolution: "pako@npm:2.1.0" + checksum: 10c0/8e8646581410654b50eb22a5dfd71159cae98145bd5086c9a7a816ec0370b5f72b4648d08674624b3870a521e6a3daffd6c2f7bc00fdefc7063c9d8232ff5116 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -6852,6 +7610,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581 + languageName: node + linkType: hard + "picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -6917,6 +7689,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.5.6": + version: 8.5.15 + resolution: "postcss@npm:8.5.15" + dependencies: + nanoid: "npm:^3.3.12" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/7f2e63ae22fbe43aace1bf652bd99da4e90737c64194d49e51ddc9cd0f9e51ff2861a7d734379b494deffa03a880a5c65eec70bc29ee9ebaa7136dde3eee8f31 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -7275,6 +8058,96 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.43.0": + version: 4.62.0 + resolution: "rollup@npm:4.62.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.62.0" + "@rollup/rollup-android-arm64": "npm:4.62.0" + "@rollup/rollup-darwin-arm64": "npm:4.62.0" + "@rollup/rollup-darwin-x64": "npm:4.62.0" + "@rollup/rollup-freebsd-arm64": "npm:4.62.0" + "@rollup/rollup-freebsd-x64": "npm:4.62.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.62.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.62.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.62.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.62.0" + "@rollup/rollup-linux-loong64-gnu": "npm:4.62.0" + "@rollup/rollup-linux-loong64-musl": "npm:4.62.0" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.62.0" + "@rollup/rollup-linux-ppc64-musl": "npm:4.62.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.62.0" + "@rollup/rollup-linux-riscv64-musl": "npm:4.62.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.62.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.62.0" + "@rollup/rollup-linux-x64-musl": "npm:4.62.0" + "@rollup/rollup-openbsd-x64": "npm:4.62.0" + "@rollup/rollup-openharmony-arm64": "npm:4.62.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.62.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.62.0" + "@rollup/rollup-win32-x64-gnu": "npm:4.62.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.62.0" + "@types/estree": "npm:1.0.9" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/0baa149f615152c0f86c44b237674cbac31d945ab721c257f73a844cc43d04a0f8613edbda4eaa2a376285286eac12e4f27060fc88a8f504f4ed235f6fc9b10f + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -7527,6 +8400,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -7600,6 +8480,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -7708,6 +8595,13 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + "standard-version@npm:^9.5.0": version: 9.5.0 resolution: "standard-version@npm:9.5.0" @@ -7732,6 +8626,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.9.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.1.0": version: 1.1.0 resolution: "stop-iteration-iterator@npm:1.1.0" @@ -7926,6 +8827,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^3.0.0": + version: 3.1.0 + resolution: "strip-literal@npm:3.1.0" + dependencies: + js-tokens: "npm:^9.0.1" + checksum: 10c0/50918f669915d9ad0fe4b7599902b735f853f2201c97791ead00104a654259c0c61bc2bc8fa3db05109339b61f4cf09e47b94ecc874ffbd0e013965223893af8 + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -8048,6 +8958,20 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" @@ -8068,6 +8992,27 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:^1.1.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + +"tinyspy@npm:^4.0.3": + version: 4.0.4 + resolution: "tinyspy@npm:4.0.4" + checksum: 10c0/a8020fc17799251e06a8398dcc352601d2770aa91c556b9531ecd7a12581161fd1c14e81cbdaff0c1306c93bfdde8ff6d1c1a3f9bbe6d91604f0fd4e01e2f1eb + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -8084,6 +9029,13 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -8531,6 +9483,132 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:3.2.4": + version: 3.2.4 + resolution: "vite-node@npm:3.2.4" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.1" + es-module-lexer: "npm:^1.7.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0": + version: 7.3.5 + resolution: "vite@npm:7.3.5" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/4ad700649ed2ebd1e726d32f3f6e41eecbec4e29bcb5977805f3d43a5659280518aa431b0fc61adc1879df4fe1978d7cfc7dbbe54cdf014022385052967721e8 + languageName: node + linkType: hard + +"vitest@npm:^3.2.4": + version: 3.2.6 + resolution: "vitest@npm:3.2.6" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/expect": "npm:3.2.6" + "@vitest/mocker": "npm:3.2.6" + "@vitest/pretty-format": "npm:^3.2.6" + "@vitest/runner": "npm:3.2.6" + "@vitest/snapshot": "npm:3.2.6" + "@vitest/spy": "npm:3.2.6" + "@vitest/utils": "npm:3.2.6" + chai: "npm:^5.2.0" + debug: "npm:^4.4.1" + expect-type: "npm:^1.2.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.2" + std-env: "npm:^3.9.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.14" + tinypool: "npm:^1.1.1" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node: "npm:3.2.4" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.2.6 + "@vitest/ui": 3.2.6 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/ea222dcd7310188479e37dbea4fbcbdcdb8db97f952b4813e7e7b370b329485c2de4622551e61076ffd75d4d811a6800a0da1e31520067614c51528f26704758 + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -8540,6 +9618,23 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -8634,6 +9729,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5"