@digitraffic/common 2026.3.2-1 → 2026.3.4-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/__test__/asserter.js +1 -3
  2. package/dist/__test__/db-testutils.js +1 -0
  3. package/dist/__test__/dependencies.test.js +1 -1
  4. package/dist/__test__/imports.test.js +1 -1
  5. package/dist/__test__/infra/acl-builder.test.js +1 -1
  6. package/dist/__test__/infra/api/handler-factory.test.js +6 -6
  7. package/dist/__test__/infra/api/integration.test.js +1 -0
  8. package/dist/__test__/infra/api/response.test.js +1 -0
  9. package/dist/__test__/infra/api/static-integration.test.js +3 -2
  10. package/dist/__test__/infra/documentation.test.js +1 -0
  11. package/dist/__test__/infra/scheduler.test.js +1 -0
  12. package/dist/__test__/infra/security-rule.test.js +1 -0
  13. package/dist/__test__/infra/stack/rest-apis.test.js +1 -0
  14. package/dist/__test__/marine/id_utils.test.js +1 -0
  15. package/dist/__test__/promise/promise.test.js +17 -17
  16. package/dist/__test__/runtime/dt-logger.test.js +1 -0
  17. package/dist/__test__/secrets/secret-holder.test.js +3 -5
  18. package/dist/__test__/secrets/secret.test.js +7 -5
  19. package/dist/__test__/stack/dt-function.test.js +1 -0
  20. package/dist/__test__/stack/rest-apis.test.js +1 -0
  21. package/dist/__test__/test/mock-ky.test.js +13 -35
  22. package/dist/__test__/types/lambda-proxy-types.test.js +1 -0
  23. package/dist/__test__/types/lambda-response-builder.test.js +1 -0
  24. package/dist/__test__/types/lambda-response.test.js +1 -0
  25. package/dist/__test__/utils/base64.test.js +1 -0
  26. package/dist/__test__/utils/date-utils.test.js +1 -0
  27. package/dist/__test__/utils/geometry.test.js +1 -0
  28. package/dist/__test__/utils/lambda-proxy-event.test.js +1 -0
  29. package/dist/__test__/utils/logging.test.js +1 -0
  30. package/dist/__test__/utils/stop-watch.test.js +1 -1
  31. package/dist/__test__/utils/utils.test.js +1 -0
  32. package/package.json +26 -39
@@ -1,6 +1,4 @@
1
- /**
2
- * A simple asserter-class for writing canaries without dependency to testing-libraries.
3
- */
1
+ import { expect } from "vitest";
4
2
  export const Asserter = {
5
3
  assertEquals(value, expected) {
6
4
  if (value !== expected) {
@@ -1,3 +1,4 @@
1
+ import { afterAll, beforeAll, beforeEach, expect } from "vitest";
1
2
  import { DatabaseEnvironmentKeys, initDbConnection, } from "../database/database.js";
2
3
  import { getEnvVariableOrElse } from "../utils/utils.js";
3
4
  export async function assertCount(db, sql, count) {
@@ -1,4 +1,5 @@
1
1
  const madge = await import("madge");
2
+ import { expect, test } from "vitest";
2
3
  const WHITELISTED_DEPENDENCIES = [
3
4
  // aspect is using DigitrafficStack with instanceof, can't remove
4
5
  `["aws/infra/stack/stack.mjs","aws/infra/stack/stack-checking-aspect.mjs"]`,
@@ -17,5 +18,4 @@ test("circular dependencies", async () => {
17
18
  const errors = circulars.filter(whitelist);
18
19
  assertNoErrors(errors);
19
20
  });
20
- export {};
21
21
  //# sourceMappingURL=dependencies.test.js.map
@@ -1,4 +1,4 @@
1
- import { expect } from "@jest/globals";
1
+ import { expect, test } from "vitest";
2
2
  test("index import ok?", () => {
3
3
  const index = import("../index.js");
4
4
  return expect(index).resolves.toBeDefined();
@@ -1,5 +1,5 @@
1
- import { expect } from "@jest/globals";
2
1
  import { App, Stack } from "aws-cdk-lib";
2
+ import { describe, expect, test } from "vitest";
3
3
  import { AclBuilder } from "../../aws/infra/acl-builder.js";
4
4
  describe("acl-builder tests", () => {
5
5
  function createBuilder() {
@@ -1,11 +1,11 @@
1
- import { jest } from "@jest/globals";
1
+ import { describe, expect, test, vi } from "vitest";
2
2
  import { HandlerFactory } from "../../../aws/infra/api/handler-factory.js";
3
3
  import { DtLogger } from "../../../aws/runtime/dt-logger.js";
4
4
  const logger = new DtLogger();
5
5
  describe("handler-factory tests", () => {
6
6
  test("test defaults", async () => {
7
7
  const factory = new HandlerFactory();
8
- const method = jest.fn((method) => {
8
+ const method = vi.fn((method) => {
9
9
  return method;
10
10
  });
11
11
  const handler = factory.createEventHandler(method, logger);
@@ -13,11 +13,11 @@ describe("handler-factory tests", () => {
13
13
  expect(method).toHaveBeenCalledTimes(1);
14
14
  });
15
15
  test("test logging", async () => {
16
- const loggingHandler = jest.fn((method) => {
16
+ const loggingHandler = vi.fn((method) => {
17
17
  return method();
18
18
  });
19
19
  const factory = new HandlerFactory().withLoggingHandler(loggingHandler);
20
- const method = jest.fn((method) => {
20
+ const method = vi.fn((method) => {
21
21
  return method;
22
22
  });
23
23
  const handler = factory.createEventHandler(method, logger);
@@ -26,11 +26,11 @@ describe("handler-factory tests", () => {
26
26
  expect(loggingHandler).toHaveBeenCalledTimes(1);
27
27
  });
28
28
  test("test error handling", async () => {
29
- const eh = jest.fn((method) => {
29
+ const eh = vi.fn((method) => {
30
30
  return method;
31
31
  });
32
32
  const factory = new HandlerFactory().withErrorHandler(eh);
33
- const method = jest.fn(() => {
33
+ const method = vi.fn(() => {
34
34
  throw new Error("MAGIC");
35
35
  });
36
36
  const handler = factory.createEventHandler(method, logger);
@@ -1,6 +1,7 @@
1
1
  import { App, Stack } from "aws-cdk-lib";
2
2
  import { Code, Function as LambdaFunction, Runtime, } from "aws-cdk-lib/aws-lambda";
3
3
  import velocity from "velocityjs";
4
+ import { describe, expect, test } from "vitest";
4
5
  import { DigitrafficIntegration } from "../../../aws/infra/api/integration.js";
5
6
  import { MediaType } from "../../../aws/types/mediatypes.js";
6
7
  import { decodeBase64ToAscii } from "../../../utils/base64.js";
@@ -1,5 +1,6 @@
1
1
  import etag from "etag";
2
2
  import velocity from "velocityjs";
3
+ import { describe, expect, test } from "vitest";
3
4
  import { RESPONSE_DEFAULT_LAMBDA } from "../../../aws/infra/api/response.js";
4
5
  const TEST_BODY = "Hello world!";
5
6
  describe("response tests", () => {
@@ -1,8 +1,9 @@
1
1
  import { Model } from "aws-cdk-lib/aws-apigateway";
2
+ import { describe, expect, test } from "vitest";
2
3
  import { DigitrafficStaticIntegration } from "../../../aws/infra/api/static-integration.js";
3
4
  import { MediaType } from "../../../aws/types/mediatypes.js";
4
5
  describe("response tests", () => {
5
- it("createIntegrationResponse works", () => {
6
+ test("createIntegrationResponse works", () => {
6
7
  const integrationResponse = DigitrafficStaticIntegration.createIntegrationResponse("FakeResource", MediaType.APPLICATION_JSON, { "test-header": "test-value" });
7
8
  expect(integrationResponse).toEqual({
8
9
  responseParameters: {
@@ -14,7 +15,7 @@ describe("response tests", () => {
14
15
  statusCode: "200",
15
16
  });
16
17
  });
17
- it("createMethodResponse works", () => {
18
+ test("createMethodResponse works", () => {
18
19
  const methodResponse = DigitrafficStaticIntegration.createMethodResponse({
19
20
  "test-header": "test-value",
20
21
  }, MediaType.TEXT_PLAIN, Model.EMPTY_MODEL);
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import { DocumentationPart } from "../../aws/infra/documentation.js";
2
3
  const METHOD_NAME = "test";
3
4
  const SUMMARY = "summary";
@@ -1,5 +1,6 @@
1
1
  import { App, Stack } from "aws-cdk-lib";
2
2
  import { Template } from "aws-cdk-lib/assertions";
3
+ import { describe, test } from "vitest";
3
4
  import { Scheduler } from "../../aws/infra/scheduler.js";
4
5
  describe("scheduler tests", () => {
5
6
  function expectRate(createScheduler, expectedRate) {
@@ -1,6 +1,7 @@
1
1
  import { App, Stack } from "aws-cdk-lib";
2
2
  import { Template } from "aws-cdk-lib/assertions";
3
3
  import { Topic } from "aws-cdk-lib/aws-sns";
4
+ import { describe, test } from "vitest";
4
5
  import { DigitrafficSecurityRule } from "../../aws/infra/security-rule.js";
5
6
  describe("security-rule tests", () => {
6
7
  test("create", () => {
@@ -1,4 +1,5 @@
1
1
  import { App } from "aws-cdk-lib";
2
+ import { describe, expect, test } from "vitest";
2
3
  import { DigitrafficRestApi } from "../../../aws/infra/stack/rest-api.js";
3
4
  import { DigitrafficStack } from "../../../aws/infra/stack/stack.js";
4
5
  describe("DigitrafficRestApi tests", () => {
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import { getRandomNumber } from "../../__test__/testutils.js";
2
3
  import * as IdUtils from "../../marine/id_utils.js";
3
4
  describe("IdUtils tests", () => {
@@ -1,17 +1,17 @@
1
- import { jest } from "@jest/globals";
1
+ import { describe, expect, test, vi } from "vitest";
2
2
  import { getRandomInteger } from "../../__test__/testutils.js";
3
3
  import { logger } from "../../aws/runtime/dt-logger-default.js";
4
4
  import { RetryLogError, retry } from "../../utils/retry.js";
5
- jest.useFakeTimers();
5
+ vi.useFakeTimers();
6
6
  describe("Promise utils tests", () => {
7
7
  test("retry - no retries", async () => {
8
- const fn = jest.fn(() => Promise.resolve(1));
8
+ const fn = vi.fn(() => Promise.resolve(1));
9
9
  const ret = await retry(fn, 0, RetryLogError.NO_LOGGING);
10
10
  expect(ret).toBe(1);
11
11
  expect(fn.mock.calls.length).toBe(1);
12
12
  });
13
13
  test("retry - error with n+1 retries", async () => {
14
- const fn = jest.fn(() => Promise.reject("error"));
14
+ const fn = vi.fn(() => Promise.reject("error"));
15
15
  const retries = getRandomInteger(1, 10);
16
16
  try {
17
17
  await retry(fn, retries, RetryLogError.NO_LOGGING);
@@ -24,15 +24,15 @@ describe("Promise utils tests", () => {
24
24
  }
25
25
  });
26
26
  test("retry - no error with n+1 retries", async () => {
27
- const fn = jest.fn(() => Promise.resolve(1));
27
+ const fn = vi.fn(() => Promise.resolve(1));
28
28
  const retries = getRandomInteger(1, 10);
29
29
  const ret = await retry(fn, retries, RetryLogError.NO_LOGGING);
30
30
  expect(ret).toBe(1);
31
31
  expect(fn.mock.calls.length).toBe(1);
32
32
  });
33
33
  test("retry - errors with no error logging", async () => {
34
- const fn = jest.fn(() => Promise.reject("error"));
35
- const consoleErrorSpy = jest.spyOn(logger, "error");
34
+ const fn = vi.fn(() => Promise.reject("error"));
35
+ const consoleErrorSpy = vi.spyOn(logger, "error");
36
36
  try {
37
37
  await retry(fn, getRandomInteger(0, 10), RetryLogError.NO_LOGGING);
38
38
  }
@@ -45,8 +45,8 @@ describe("Promise utils tests", () => {
45
45
  }
46
46
  });
47
47
  test("retry - no retries with error logging", async () => {
48
- const fn = jest.fn(() => Promise.reject("error"));
49
- const consoleErrorSpy = jest.spyOn(logger, "error");
48
+ const fn = vi.fn(() => Promise.reject("error"));
49
+ const consoleErrorSpy = vi.spyOn(logger, "error");
50
50
  try {
51
51
  await retry(fn, 0, RetryLogError.LOG_ALL_AS_ERRORS);
52
52
  }
@@ -59,9 +59,9 @@ describe("Promise utils tests", () => {
59
59
  }
60
60
  });
61
61
  test("retry - retries with error logging", async () => {
62
- const fn = jest.fn(() => Promise.reject("error"));
62
+ const fn = vi.fn(() => Promise.reject("error"));
63
63
  const retries = getRandomInteger(1, 10);
64
- const consoleErrorSpy = jest.spyOn(logger, "error");
64
+ const consoleErrorSpy = vi.spyOn(logger, "error");
65
65
  try {
66
66
  await retry(fn, retries, RetryLogError.LOG_ALL_AS_ERRORS);
67
67
  }
@@ -74,12 +74,12 @@ describe("Promise utils tests", () => {
74
74
  }
75
75
  });
76
76
  test("retry - exceeded retry count throws error", async () => {
77
- const fn = jest.fn(() => Promise.reject("error"));
77
+ const fn = vi.fn(() => Promise.reject("error"));
78
78
  await expect(() => retry(fn, 3, RetryLogError.LOG_ALL_AS_ERRORS)).rejects.toThrow();
79
79
  });
80
80
  test("retry - defaults", async () => {
81
- const fn = jest.fn(() => Promise.reject("error"));
82
- const consoleErrorSpy = jest.spyOn(logger, "error");
81
+ const fn = vi.fn(() => Promise.reject("error"));
82
+ const consoleErrorSpy = vi.spyOn(logger, "error");
83
83
  try {
84
84
  await retry(fn);
85
85
  }
@@ -92,15 +92,15 @@ describe("Promise utils tests", () => {
92
92
  }
93
93
  });
94
94
  test("retry - NaN throws error", async () => {
95
- const fn = jest.fn(() => Promise.resolve(NaN));
95
+ const fn = vi.fn(() => Promise.resolve(NaN));
96
96
  await expect(() => retry(fn, NaN, RetryLogError.NO_LOGGING)).rejects.toThrow();
97
97
  });
98
98
  test("retry - Infinity throws error", async () => {
99
- const fn = jest.fn(() => Promise.resolve(NaN));
99
+ const fn = vi.fn(() => Promise.resolve(NaN));
100
100
  await expect(() => retry(fn, Infinity, RetryLogError.NO_LOGGING)).rejects.toThrow();
101
101
  });
102
102
  test("retry - exceeded maximum retry count throws error", async () => {
103
- const fn = jest.fn(() => Promise.resolve(NaN));
103
+ const fn = vi.fn(() => Promise.resolve(NaN));
104
104
  await expect(() => retry(fn, getRandomInteger(101, 1000000), RetryLogError.NO_LOGGING)).rejects.toThrow();
105
105
  });
106
106
  test("retry - use without mocks without retry", async () => {
@@ -1,4 +1,5 @@
1
1
  import { Writable } from "node:stream";
2
+ import { describe, expect, test } from "vitest";
2
3
  import { DtLogger } from "../../aws/runtime/dt-logger.js";
3
4
  const LOG_LINE = {
4
5
  method: "dt-logger.test",
@@ -1,5 +1,5 @@
1
1
  import { SecretsManager } from "@aws-sdk/client-secrets-manager";
2
- import { jest } from "@jest/globals";
2
+ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
3
3
  import { setEnvVariable, setEnvVariableAwsRegion } from "../../utils/utils.js";
4
4
  const SECRET_WITH_PREFIX = {
5
5
  "prefix.value": "value",
@@ -8,10 +8,8 @@ const SECRET_WITH_PREFIX = {
8
8
  username: "DB_USER",
9
9
  };
10
10
  const emptySecret = { $metadata: {} };
11
- const getSecretValueMock = jest.fn();
12
- jest
13
- .spyOn(SecretsManager.prototype, "getSecretValue")
14
- .mockImplementation(getSecretValueMock);
11
+ const getSecretValueMock = vi.fn();
12
+ vi.spyOn(SecretsManager.prototype, "getSecretValue").mockImplementation(getSecretValueMock);
15
13
  const { SecretHolder } = await import("../../aws/runtime/secrets/secret-holder.js");
16
14
  const { DatabaseEnvironmentKeys } = await import("../../database/database.js");
17
15
  function mockSecret(secret) {
@@ -1,5 +1,6 @@
1
+ import { afterEach } from "node:test";
1
2
  import { SecretsManager } from "@aws-sdk/client-secrets-manager";
2
- import { jest } from "@jest/globals";
3
+ import { describe, expect, test, vi } from "vitest";
3
4
  import { setEnvVariableAwsRegion } from "../../utils/utils.js";
4
5
  const SECRET_ID = "test_secret";
5
6
  const SECRET_WITH_PREFIX = {
@@ -8,10 +9,8 @@ const SECRET_WITH_PREFIX = {
8
9
  "wrong.value": "value",
9
10
  };
10
11
  const emptySecret = { $metadata: {} };
11
- const getSecretValueMock = jest.fn();
12
- jest
13
- .spyOn(SecretsManager.prototype, "getSecretValue")
14
- .mockImplementation(getSecretValueMock);
12
+ const getSecretValueMock = vi.fn();
13
+ vi.spyOn(SecretsManager.prototype, "getSecretValue").mockImplementation(getSecretValueMock);
15
14
  function mockSecret(secret) {
16
15
  if (!secret) {
17
16
  getSecretValueMock.mockImplementation(() => Promise.resolve(emptySecret));
@@ -27,6 +26,9 @@ setEnvVariableAwsRegion("eu-west-1");
27
26
  const secret = await import("../../aws/runtime/secrets/secret.js");
28
27
  const { getSecret } = secret;
29
28
  describe("secret - test", () => {
29
+ afterEach(() => {
30
+ vi.restoreAllMocks();
31
+ });
30
32
  test("getSecret - no secret", async () => {
31
33
  mockSecret(null);
32
34
  await expect(async () => {
@@ -2,6 +2,7 @@ import { App, Duration } from "aws-cdk-lib";
2
2
  import { Match, Template } from "aws-cdk-lib/assertions";
3
3
  import { PolicyStatement, Role, ServicePrincipal } from "aws-cdk-lib/aws-iam";
4
4
  import { Architecture, Code, Runtime } from "aws-cdk-lib/aws-lambda";
5
+ import { describe, expect, test } from "vitest";
5
6
  import { FunctionBuilder } from "../../aws/infra/stack/dt-function.js";
6
7
  import { DigitrafficStack } from "../../aws/infra/stack/stack.js";
7
8
  import { EnvKeys } from "../../aws/runtime/environment.js";
@@ -1,5 +1,6 @@
1
1
  import { App } from "aws-cdk-lib";
2
2
  import { Match, Template } from "aws-cdk-lib/assertions";
3
+ import { describe, test } from "vitest";
3
4
  import { DigitrafficRestApi } from "../../aws/infra/stack/rest-api.js";
4
5
  import { DigitrafficStack } from "../../aws/infra/stack/stack.js";
5
6
  import { TrafficType } from "../../types/traffictype.js";
@@ -1,4 +1,4 @@
1
- import { describe, jest, test } from "@jest/globals";
1
+ import { afterEach, describe, expect, test, vi } from "vitest";
2
2
  import { mockKyResponse } from "../../__test__/mock-ky.js";
3
3
  const ky = (await import("ky")).default;
4
4
  describe("mockKyResponse", () => {
@@ -6,61 +6,39 @@ describe("mockKyResponse", () => {
6
6
  const testJson = JSON.stringify(testObj);
7
7
  const url = "https://example.com";
8
8
  afterEach(() => {
9
- jest.restoreAllMocks();
9
+ vi.restoreAllMocks();
10
10
  });
11
11
  test("works with all methods", async () => {
12
- jest
13
- .spyOn(ky, "get")
14
- .mockImplementation(() => mockKyResponse(200, testJson));
15
- jest
16
- .spyOn(ky, "post")
17
- .mockImplementation(() => mockKyResponse(200, testJson));
18
- jest
19
- .spyOn(ky, "put")
20
- .mockImplementation(() => mockKyResponse(200, testJson));
21
- jest
22
- .spyOn(ky, "delete")
23
- .mockImplementation(() => mockKyResponse(200, testJson));
12
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(200, testJson));
13
+ vi.spyOn(ky, "post").mockImplementation(() => mockKyResponse(200, testJson));
14
+ vi.spyOn(ky, "put").mockImplementation(() => mockKyResponse(200, testJson));
15
+ vi.spyOn(ky, "delete").mockImplementation(() => mockKyResponse(200, testJson));
24
16
  expect(await ky.get(url).text()).toEqual(testJson);
25
17
  expect(await ky.put(url).text()).toEqual(testJson);
26
18
  expect(await ky.post(url).text()).toEqual(testJson);
27
19
  expect(await ky.delete(url).text()).toEqual(testJson);
28
20
  });
29
21
  test("returns correct status", async () => {
30
- jest
31
- .spyOn(ky, "get")
32
- .mockImplementation(() => mockKyResponse(200, testJson));
22
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(200, testJson));
33
23
  expect((await ky.get(url)).status).toEqual(200);
34
- jest
35
- .spyOn(ky, "get")
36
- .mockImplementation(() => mockKyResponse(400, testJson));
24
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(400, testJson));
37
25
  expect((await ky.get(url)).status).toEqual(400);
38
26
  });
39
27
  test("returns correct ok", async () => {
40
- jest
41
- .spyOn(ky, "get")
42
- .mockImplementation(() => mockKyResponse(200, testJson));
28
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(200, testJson));
43
29
  expect((await ky.get(url)).ok).toEqual(true);
44
- jest
45
- .spyOn(ky, "get")
46
- .mockImplementation(() => mockKyResponse(299, testJson));
30
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(299, testJson));
47
31
  expect((await ky.get(url)).ok).toEqual(true);
48
- jest
49
- .spyOn(ky, "get")
50
- .mockImplementation(() => mockKyResponse(300, testJson));
32
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(300, testJson));
51
33
  expect((await ky.get(url)).ok).toEqual(false);
52
34
  });
53
35
  test("convenience methods work: text", async () => {
54
- jest
55
- .spyOn(ky, "get")
56
- .mockImplementation(() => mockKyResponse(200, testJson));
36
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(200, testJson));
57
37
  expect(await ky.get(url).text()).toEqual(testJson);
58
38
  expect(await (await ky.get(url)).text()).toEqual(testJson);
59
39
  });
60
40
  test("convenience methods work: json", async () => {
61
- jest
62
- .spyOn(ky, "get")
63
- .mockImplementation(() => mockKyResponse(200, testJson));
41
+ vi.spyOn(ky, "get").mockImplementation(() => mockKyResponse(200, testJson));
64
42
  expect(await ky.get(url).json()).toEqual(testObj);
65
43
  expect(await (await ky.get(url)).json()).toEqual(testObj);
66
44
  });
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import { LambdaProxyResponseBuilder } from "../../aws/types/lambda-proxy-types.js";
2
3
  import { MediaType } from "../../aws/types/mediatypes.js";
3
4
  import { decodeBase64ToUtf8 } from "../../utils/base64.js";
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import { LambdaResponseBuilder } from "../../aws/types/lambda-response.js";
2
3
  import { decodeBase64ToUtf8 } from "../../utils/base64.js";
3
4
  import { TEST_FILENAME, TEST_JSON, TEST_MESSAGE, TEST_TIMESTAMP, TEST_TIMESTAMP_STR, } from "./lambda-response.test.js";
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import { LambdaResponse, LambdaResponseBuilder, } from "../../aws/types/lambda-response.js";
2
3
  import { decodeBase64ToUtf8 } from "../../utils/base64.js";
3
4
  export const TEST_MESSAGE = "HELLO";
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import { compressBuffer, decodeBase64ToAscii, decodeBase64ToUtf8, encodeAsciiToBase64, encodeUtf8ToBase64, } from "../../utils/base64.js";
2
3
  describe("Base64UtilTest", () => {
3
4
  const EXPECTED_ASCII = "0a9f4967-faaa-445a-ba11-078f7f9556b4";
@@ -1,4 +1,5 @@
1
1
  import { parseISO } from "date-fns";
2
+ import { describe, expect, test } from "vitest";
2
3
  import * as CommonDateUtils from "../../utils/date-utils.js";
3
4
  const ISO = "2022-01-02T01:02:03.004Z";
4
5
  describe("CommonDateUtilsTest", () => {
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import * as Geometry from "../../utils/geometry.js";
2
3
  import { Asserter } from "../asserter.js";
3
4
  const TAMPERE_WGS84_X = 23.761290078;
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import { parseQueryParams } from "../../utils/lambda-proxy-event.js";
2
3
  describe("lambda-proxy-event.test", () => {
3
4
  test("StopWatch start-stop", async () => {
@@ -1,4 +1,5 @@
1
1
  import { Writable } from "node:stream";
2
+ import { describe, expect, test } from "vitest";
2
3
  import { DtLogger } from "../../aws/runtime/dt-logger.js";
3
4
  import { logException, truncateEnd, truncateMiddle, } from "../../utils/logging.js";
4
5
  const TEST_METHODNAME = "test.logException";
@@ -1,4 +1,4 @@
1
- import { expect } from "@jest/globals";
1
+ import { describe, expect, test } from "vitest";
2
2
  import { StopWatch } from "../../utils/stop-watch.js";
3
3
  describe("stop-watch.test.ts", () => {
4
4
  test("StopWatch start-stop", async () => {
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from "vitest";
1
2
  import * as ArrayUtils from "../../utils/utils.js";
2
3
  describe("ArrayUtils", () => {
3
4
  test("bothArraysHasSameValues", () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitraffic/common",
3
- "version": "2026.3.2-1",
3
+ "version": "2026.3.4-1",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "repository": {
@@ -107,53 +107,33 @@
107
107
  "dist/**/*.js",
108
108
  "dist/**/*.d.ts"
109
109
  ],
110
- "scripts": {
111
- "build": "heft build --clean",
112
- "build:watch": "heft build-watch",
113
- "format:check": "biome check ",
114
- "format:check-staged": "biome check --staged",
115
- "format:fix": "biome check --write",
116
- "format:fix-staged": "biome check --staged --write",
117
- "format:package-json": "sort-package-json",
118
- "prepublishOnly": "pnpm build && pnpm test",
119
- "setup": "pnpm install; node --experimental-strip-types scripts/setup-digitraffic-common.ts",
120
- "test": "NODE_OPTIONS='--experimental-vm-modules' heft test --clean --max-workers=1",
121
- "test:inspect": "node --inspect-brk --expose-gc ./node_modules/jest/bin/jest.js --detectOpenHandles --forceExit --coverage --coverageDirectory=output/coverage/jest --logHeapUsage --runInBand",
122
- "test:jest": "node --trace-warnings --experimental-vm-modules --max-old-space-size=1536 --expose-gc ./node_modules/jest/bin/jest.js --detectOpenHandles --forceExit --coverage --coverageDirectory=output/coverage/jest --logHeapUsage --runInBand --verbose",
123
- "test:watch": "NODE_OPTIONS='--experimental-vm-modules' heft test-watch --max-workers=1",
124
- "test:watch:no-coverage": "NODE_OPTIONS='--experimental-vm-modules' heft test-watch --disable-code-coverage --max-workers=1"
125
- },
126
110
  "devDependencies": {
127
- "@aws-sdk/client-api-gateway": "3.995.0",
128
- "@aws-sdk/client-s3": "3.995.0",
129
- "@aws-sdk/client-secrets-manager": "3.995.0",
130
- "@aws-sdk/client-sns": "3.995.0",
131
- "@aws-sdk/lib-storage": "3.995.0",
111
+ "@aws-sdk/client-api-gateway": "3.997.0",
112
+ "@aws-sdk/client-s3": "3.997.0",
113
+ "@aws-sdk/client-secrets-manager": "3.997.0",
114
+ "@aws-sdk/client-sns": "3.997.0",
115
+ "@aws-sdk/lib-storage": "3.997.0",
132
116
  "@biomejs/biome": "2.4.4",
133
117
  "@date-fns/tz": "1.4.1",
134
- "@jest/globals": "30.2.0",
135
- "@rushstack/heft": "1.2.3",
136
- "@rushstack/heft-jest-plugin": "1.2.3",
137
- "@rushstack/heft-typescript-plugin": "1.2.3",
138
- "@smithy/fetch-http-handler": "5.3.9",
139
- "@smithy/types": "4.12.0",
118
+ "@rushstack/heft": "1.2.5",
119
+ "@rushstack/heft-typescript-plugin": "1.3.0",
120
+ "@smithy/fetch-http-handler": "5.3.11",
121
+ "@smithy/types": "4.13.0",
140
122
  "@types/aws-lambda": "8.10.160",
141
123
  "@types/etag": "1.8.4",
142
124
  "@types/geojson": "7946.0.16",
143
125
  "@types/geojson-validation": "1.0.3",
144
- "@types/jest": "30.0.0",
145
126
  "@types/lodash-es": "4.17.12",
146
127
  "@types/madge": "5.0.3",
147
128
  "@types/node": "25.3.0",
148
- "aws-cdk-lib": "2.239.0",
129
+ "@vitest/coverage-v8": "4.0.18",
130
+ "aws-cdk-lib": "2.240.0",
149
131
  "change-case": "5.4.4",
150
132
  "constructs": "10.5.1",
151
133
  "date-fns": "4.1.0",
152
134
  "es-toolkit": "1.44.0",
153
135
  "etag": "1.8.1",
154
136
  "geojson-validation": "1.0.2",
155
- "jest": "30.2.0",
156
- "jest-junit": "16.0.0",
157
137
  "ky": "1.14.3",
158
138
  "lefthook": "2.1.1",
159
139
  "lodash-es": "4.17.23",
@@ -163,9 +143,9 @@
163
143
  "pg-query-stream": "4.12.0",
164
144
  "rimraf": "6.1.3",
165
145
  "sort-package-json": "3.6.1",
166
- "ts-jest": "29.4.6",
167
146
  "typescript": "5.9.3",
168
147
  "velocityjs": "2.1.5",
148
+ "vitest": "4.0.18",
169
149
  "zod": "4.3.6"
170
150
  },
171
151
  "peerDependencies": {
@@ -192,10 +172,17 @@
192
172
  "engines": {
193
173
  "node": ">=24 <25"
194
174
  },
195
- "pnpm": {
196
- "overrides": {
197
- "fast-xml-parser": "5.3.8",
198
- "ajv": "8.18.0"
199
- }
175
+ "scripts": {
176
+ "build": "heft build --clean",
177
+ "build:watch": "heft build-watch",
178
+ "ci:test": "vitest run --coverage --reporter=junit --outputFile=junit.xml",
179
+ "format:check": "biome check ",
180
+ "format:check-staged": "biome check --staged",
181
+ "format:fix": "biome check --write",
182
+ "format:fix-staged": "biome check --staged --write",
183
+ "format:package-json": "sort-package-json",
184
+ "setup": "pnpm install; node --experimental-strip-types scripts/setup-digitraffic-common.ts",
185
+ "test": "vitest run --coverage",
186
+ "test:watch": "vitest"
200
187
  }
201
- }
188
+ }