diff --git a/.github/workflows/pre-commit-hooks.yml b/.github/workflows/pre-commit-hooks.yml index 4e27c20a9c237..39dfdc4710517 100644 --- a/.github/workflows/pre-commit-hooks.yml +++ b/.github/workflows/pre-commit-hooks.yml @@ -11,16 +11,16 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - + - name: set up Node.js uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '18' cache: 'yarn' - + - name: install dependencies run: yarn install --frozen-lockfile - + - name: run pre-commit hooks run: | yarn lint-staged diff --git a/package.json b/package.json index a5a023c1c02ed..233d57b145fd6 100644 --- a/package.json +++ b/package.json @@ -121,11 +121,19 @@ "turbo": "2.1.2", "typescript": "~4.9.5", "verdaccio": "5.25.0", + "vite": "4.5.5", + "vitest": "0.34.6", "webpack": "5.76.0", "webpack-cli": "4.10.0", "yargs": "17.5.1", "yarn": "1.22.13" }, + "overrides": { + "vite": "4.5.5" + }, + "resolutions": { + "vite": "4.5.5" + }, "workspaces": { "packages": [ "clients/*", diff --git a/packages/core/integ/request-handlers/request-handlers.integ.spec.ts b/packages/core/integ/request-handlers/request-handlers.integ.spec.ts index 3c5f4b24ec9c2..d4f603c506e5f 100644 --- a/packages/core/integ/request-handlers/request-handlers.integ.spec.ts +++ b/packages/core/integ/request-handlers/request-handlers.integ.spec.ts @@ -1,3 +1,5 @@ +import { test as it, describe, expect } from "vitest"; + import { Kinesis } from "@aws-sdk/client-kinesis"; import { S3 } from "@aws-sdk/client-s3"; import { TranscribeStreaming } from "@aws-sdk/client-transcribe-streaming"; diff --git a/packages/core/jest.config.integ.js b/packages/core/jest.config.integ.js deleted file mode 100644 index d09aba7398c72..0000000000000 --- a/packages/core/jest.config.integ.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - preset: "ts-jest", - testMatch: ["**/*.integ.spec.ts"], -}; diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js deleted file mode 100644 index f2c48a84f355c..0000000000000 --- a/packages/core/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const base = require("../../jest.config.base.js"); - -module.exports = { - ...base, - testPathIgnorePatterns: ["/node_modules/"], -}; diff --git a/packages/core/package.json b/packages/core/package.json index aac84f16cc1b6..412772913d8e0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -12,8 +12,8 @@ "lint": "node ./scripts/lint.js", "clean": "rimraf ./dist-* && rimraf *.tsbuildinfo", "extract:docs": "api-extractor run --local", - "test": "jest", - "test:integration": "jest -c jest.config.integ.js" + "test": "vitest run", + "test:integration": "vitest run -c vitest.config.integ.ts" }, "main": "./dist-cjs/index.js", "module": "./dist-es/index.js", diff --git a/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConstants.spec.ts b/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConstants.spec.ts index 68a0d826171e0..d01d36f0fbbb2 100644 --- a/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConstants.spec.ts +++ b/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConstants.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, test as it } from "vitest"; + import { validateAccountIdEndpointMode } from "./AccountIdEndpointModeConstants"; describe("validateAccountIdEndpointMode", () => { diff --git a/packages/core/src/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.spec.ts b/packages/core/src/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.spec.ts index 2e70fffc24162..23c5897db236e 100644 --- a/packages/core/src/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.spec.ts +++ b/packages/core/src/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.spec.ts @@ -1,3 +1,5 @@ +import { afterEach, beforeEach, describe, expect, test as it, vi } from "vitest"; + import { DEFAULT_ACCOUNT_ID_ENDPOINT_MODE } from "./AccountIdEndpointModeConstants"; import { CONFIG_ACCOUNT_ID_ENDPOINT_MODE, @@ -9,7 +11,7 @@ describe("NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS", () => { const originalEnv = process.env; beforeEach(() => { - jest.resetModules(); + vi.resetModules(); process.env = { ...originalEnv }; }); diff --git a/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.spec.ts b/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.spec.ts index 6a77db47bfe33..6ba4f23c6a714 100644 --- a/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.spec.ts +++ b/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.spec.ts @@ -1,17 +1,18 @@ +import { afterEach, beforeEach, describe, expect, test as it, vi } from "vitest"; + +import { emitWarningIfUnsupportedVersion, state } from "./emitWarningIfUnsupportedVersion"; + describe("emitWarningIfUnsupportedVersion", () => { - let emitWarningIfUnsupportedVersion: any; const emitWarning = process.emitWarning; const supportedVersion = "18.0.0"; - beforeEach(() => { - const module = require("./emitWarningIfUnsupportedVersion"); - emitWarningIfUnsupportedVersion = module.emitWarningIfUnsupportedVersion; - }); + beforeEach(() => {}); afterEach(() => { - jest.clearAllMocks(); - jest.resetModules(); + vi.clearAllMocks(); + vi.resetModules(); process.emitWarning = emitWarning; + state.warningEmitted = false; }); describe(`emits warning for Node.js <${supportedVersion}`, () => { @@ -31,7 +32,7 @@ describe("emitWarningIfUnsupportedVersion", () => { [getPreviousMajorVersion(major), 0, 0], ].map((arr) => `v${arr.join(".")}`) )(`%s`, async (unsupportedVersion) => { - process.emitWarning = jest.fn(); + process.emitWarning = vi.fn() as any; emitWarningIfUnsupportedVersion(unsupportedVersion); // Verify that the warning was emitted. @@ -62,7 +63,7 @@ More information can be found at: https://a.co/74kJMmI` [major + 1, 0, 0], ].map((arr) => `v${arr.join(".")}`) )(`%s`, async (unsupportedVersion) => { - process.emitWarning = jest.fn(); + process.emitWarning = vi.fn() as any; emitWarningIfUnsupportedVersion(unsupportedVersion); expect(process.emitWarning).not.toHaveBeenCalled(); }); diff --git a/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.ts b/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.ts index 72c71a538b35d..0c0406d8f3512 100644 --- a/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.ts +++ b/packages/core/src/submodules/client/emitWarningIfUnsupportedVersion.ts @@ -1,5 +1,7 @@ // Stores whether the warning was already emitted. -let warningEmitted = false; +export const state = { + warningEmitted: false, +}; /** * @internal @@ -10,8 +12,8 @@ let warningEmitted = false; * @param version - The Node.js version string. */ export const emitWarningIfUnsupportedVersion = (version: string) => { - if (version && !warningEmitted && parseInt(version.substring(1, version.indexOf("."))) < 18) { - warningEmitted = true; + if (version && !state.warningEmitted && parseInt(version.substring(1, version.indexOf("."))) < 18) { + state.warningEmitted = true; process.emitWarning( `NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will no longer support Node.js 16.x on January 6, 2025. diff --git a/packages/core/src/submodules/client/setCredentialFeature.spec.ts b/packages/core/src/submodules/client/setCredentialFeature.spec.ts index 02f52b998e8af..8015e3b0c2c3a 100644 --- a/packages/core/src/submodules/client/setCredentialFeature.spec.ts +++ b/packages/core/src/submodules/client/setCredentialFeature.spec.ts @@ -1,4 +1,5 @@ import { AttributedAwsCredentialIdentity } from "@aws-sdk/types"; +import { describe, expect, test as it } from "vitest"; import { setCredentialFeature } from "./setCredentialFeature"; diff --git a/packages/core/src/submodules/client/setFeature.spec.ts b/packages/core/src/submodules/client/setFeature.spec.ts index 729867ce7d97e..5daf6b0eb02a7 100644 --- a/packages/core/src/submodules/client/setFeature.spec.ts +++ b/packages/core/src/submodules/client/setFeature.spec.ts @@ -1,4 +1,5 @@ import { AwsHandlerExecutionContext } from "@aws-sdk/types"; +import { describe, test as it } from "vitest"; import { setFeature } from "./setFeature"; diff --git a/packages/core/src/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.spec.ts b/packages/core/src/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.spec.ts index 386c70665657a..bb0a87c13c333 100644 --- a/packages/core/src/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.spec.ts +++ b/packages/core/src/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, test as it } from "vitest"; + import { AwsSdkSigV4Signer } from "./AwsSdkSigV4Signer"; describe(AwsSdkSigV4Signer.name, () => { diff --git a/packages/core/src/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.spec.ts b/packages/core/src/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.spec.ts index b1de6c8634ffe..7a258e16bb684 100644 --- a/packages/core/src/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.spec.ts +++ b/packages/core/src/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, test as it } from "vitest"; + import { resolveAwsSdkSigV4AConfig } from "./resolveAwsSdkSigV4AConfig"; describe(resolveAwsSdkSigV4AConfig.name, () => { diff --git a/packages/core/src/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.spec.ts b/packages/core/src/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.spec.ts index 8661f876bf415..8fe34f8a2e4d4 100644 --- a/packages/core/src/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.spec.ts +++ b/packages/core/src/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.spec.ts @@ -1,14 +1,16 @@ +import { afterEach, beforeEach, describe, expect, test as it, vi } from "vitest"; + import { getSkewCorrectedDate } from "./getSkewCorrectedDate"; describe(getSkewCorrectedDate.name, () => { const mockDateNow = Date.now(); beforeEach(() => { - jest.spyOn(Date, "now").mockReturnValue(mockDateNow); + vi.spyOn(Date, "now").mockReturnValue(mockDateNow); }); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it.each([-100000, -100, 0, 100, 100000])("systemClockOffset: %d", (systemClockOffset) => { diff --git a/packages/core/src/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.spec.ts b/packages/core/src/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.spec.ts index a604f3c25e41a..8cd04ea6619ac 100644 --- a/packages/core/src/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.spec.ts +++ b/packages/core/src/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.spec.ts @@ -1,7 +1,9 @@ +import { afterEach, beforeEach, describe, expect, test as it, vi } from "vitest"; + import { getUpdatedSystemClockOffset } from "./getUpdatedSystemClockOffset"; import { isClockSkewed } from "./isClockSkewed"; -jest.mock("./isClockSkewed"); +vi.mock("./isClockSkewed"); describe(getUpdatedSystemClockOffset.name, () => { // Mock ServerTime is accurate to last second, to remove milliseconds information. @@ -9,11 +11,11 @@ describe(getUpdatedSystemClockOffset.name, () => { const mockSystemClockOffset = 100; afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it("returns passed systemClockOffset when clock is not skewed", () => { - (isClockSkewed as jest.Mock).mockReturnValue(false); + vi.mocked(isClockSkewed).mockReturnValue(false); expect(getUpdatedSystemClockOffset(mockClockTime.toString(), mockSystemClockOffset)).toEqual(mockSystemClockOffset); }); @@ -21,8 +23,8 @@ describe(getUpdatedSystemClockOffset.name, () => { const dateDotNowFn = Date.now; beforeEach(() => { - (isClockSkewed as jest.Mock).mockReturnValue(true); - jest.spyOn(Date, "now").mockReturnValueOnce(mockClockTime.getTime()); + vi.mocked(isClockSkewed).mockReturnValue(true); + vi.spyOn(Date, "now").mockReturnValueOnce(mockClockTime.getTime()); }); afterEach(() => { diff --git a/packages/core/src/submodules/httpAuthSchemes/utils/isClockSkewed.spec.ts b/packages/core/src/submodules/httpAuthSchemes/utils/isClockSkewed.spec.ts index a07d481c40dd0..6acd3785cf323 100644 --- a/packages/core/src/submodules/httpAuthSchemes/utils/isClockSkewed.spec.ts +++ b/packages/core/src/submodules/httpAuthSchemes/utils/isClockSkewed.spec.ts @@ -1,19 +1,21 @@ +import { afterEach, beforeEach, describe, expect, test as it, vi } from "vitest"; + import { getSkewCorrectedDate } from "./getSkewCorrectedDate"; import { isClockSkewed } from "./isClockSkewed"; -jest.mock("./getSkewCorrectedDate"); +vi.mock("./getSkewCorrectedDate"); describe(isClockSkewed.name, () => { const mockSystemClockOffset = 100; const mockSkewCorrectedDate = new Date(); beforeEach(() => { - (getSkewCorrectedDate as jest.Mock).mockReturnValue(mockSkewCorrectedDate); + vi.mocked(getSkewCorrectedDate).mockReturnValue(mockSkewCorrectedDate); }); afterEach(() => { expect(getSkewCorrectedDate).toHaveBeenCalledWith(mockSystemClockOffset); - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe("returns true for time difference >=300000", () => { diff --git a/packages/core/src/submodules/protocols/coercing-serializers.spec.ts b/packages/core/src/submodules/protocols/coercing-serializers.spec.ts index 05210d28c0194..96267469dadfd 100644 --- a/packages/core/src/submodules/protocols/coercing-serializers.spec.ts +++ b/packages/core/src/submodules/protocols/coercing-serializers.spec.ts @@ -1,3 +1,5 @@ +import { afterAll, beforeAll, describe, expect, test as it } from "vitest"; + import { _toBool, _toNum, _toStr } from "./coercing-serializers"; const consoleWarn = console.warn; diff --git a/packages/core/src/submodules/protocols/json/awsExpectUnion.spec.ts b/packages/core/src/submodules/protocols/json/awsExpectUnion.spec.ts index c267c6872de2f..e868ee04fd061 100644 --- a/packages/core/src/submodules/protocols/json/awsExpectUnion.spec.ts +++ b/packages/core/src/submodules/protocols/json/awsExpectUnion.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, test as it } from "vitest"; + import { awsExpectUnion } from "./awsExpectUnion"; describe(awsExpectUnion.name, () => { diff --git a/packages/core/src/submodules/protocols/xml/parseXmlBody.spec.ts b/packages/core/src/submodules/protocols/xml/parseXmlBody.spec.ts index f886086e4ef60..1a2c7d27461ab 100644 --- a/packages/core/src/submodules/protocols/xml/parseXmlBody.spec.ts +++ b/packages/core/src/submodules/protocols/xml/parseXmlBody.spec.ts @@ -1,5 +1,6 @@ import type { SerdeContext } from "@smithy/types"; import { toUtf8 } from "@smithy/util-utf8"; +import { describe, expect, test as it } from "vitest"; import { parseXmlBody } from "./parseXmlBody"; diff --git a/packages/core/vitest.config.integ.ts b/packages/core/vitest.config.integ.ts new file mode 100644 index 0000000000000..35e2b17c4f3d3 --- /dev/null +++ b/packages/core/vitest.config.integ.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["**/*.integ.spec.{ts,js}"], + environment: "node", + }, +}); diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts new file mode 100644 index 0000000000000..f360902f18aa2 --- /dev/null +++ b/packages/core/vitest.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + exclude: ["**/*.{integ,e2e,browser}.spec.{ts,js}"], + include: ["**/*.spec.{ts,js}"], + environment: "node", + }, +}); diff --git a/scripts/validation/vitest-validation.js b/scripts/validation/vitest-validation.js new file mode 100644 index 0000000000000..d7c7d0e6f55d6 --- /dev/null +++ b/scripts/validation/vitest-validation.js @@ -0,0 +1,102 @@ +const fs = require("fs"); +const path = require("path"); +const walk = require("../utils/walk"); + +const paths = [path.join(__dirname, "..", "..", "packages", "core")]; + +(async () => { + for (const folder of paths) { + const pkgJson = require(path.join(folder, "package.json")); + + if (pkgJson.scripts.test) { + if (pkgJson.scripts.test.includes("jest")) { + console.log("setting unit test to vitest"); + + pkgJson.scripts.test = "vitest run"; + fs.rmSync(path.join(folder, "jest.config.js")); + fs.writeFileSync( + path.join(folder, "vitest.config.ts"), + `import { defineConfig } from "vitest/config"; + + export default defineConfig({ + test: { + exclude: ["**/*.{integ,e2e,browser}.spec.{ts,js}"], + include: ["**/*.spec.{ts,js}"], + environment: "node", + }, + }); + ` + ); + } + } + + for (const testType of ["integ", "e2e"]) { + const script = testType === "integ" ? "integration" : testType; + if (pkgJson.scripts[`test:${script}`]) { + if (pkgJson.scripts[`test:${script}`].includes("jest")) { + console.log(`setting ${testType} test to vitest`); + + pkgJson.scripts[`test:${script}`] = `vitest run -c vitest.config.${testType}.ts`; + fs.rmSync(path.join(folder, `jest.config.${testType}.js`)); + fs.writeFileSync( + path.join(folder, `vitest.config.${testType}.ts`), + `import { defineConfig } from "vitest/config"; + + export default defineConfig({ + test: { + include: ["**/*.${testType}.spec.{ts,js}"], + environment: "node", + }, + }); + ` + ); + } + } + } + + fs.writeFileSync(path.join(folder, "package.json"), JSON.stringify(pkgJson, null, 2) + "\n"); + + for await (const file of walk(path.join(folder))) { + if (file.endsWith(".spec.ts")) { + let contents = fs.readFileSync(file, "utf-8"); + + const namespaces = { + jest: "vi", + }; + + const functionCalls = { + beforeEach: "beforeEach", + beforeAll: "beforeAll", + afterEach: "afterEach", + afterAll: "afterAll", + describe: "describe", + expect: "expect", + }; + + const imports = ["test as it"]; + + contents = contents.replace(/\((\w+) as (jest|vi).Mock\)/g, "vi.mocked($1)"); + + for (const [old, _new] of Object.entries(namespaces)) { + if (contents.includes(old + ".") || contents.includes(_new + ".")) { + imports.push(_new); + contents = contents.replace(new RegExp(old + "\\.", "g"), _new + "."); + } + } + + for (const [old, _new] of Object.entries(functionCalls)) { + if (contents.includes(old + "(") || contents.includes(_new + "(")) { + if (!_new.includes(".")) { + imports.push(_new); + } + } + } + + contents = contents.replace(/import {(.*?)} from "(vitest|vtestest)";/g, ""); + contents = `import { ${imports.join(", ")} } from "vitest";\n\n` + contents; + + fs.writeFileSync(file, contents); + } + } + } +})(); diff --git a/vite.workspace.ts b/vite.workspace.ts new file mode 100644 index 0000000000000..2765d526194a4 --- /dev/null +++ b/vite.workspace.ts @@ -0,0 +1 @@ +export default ["{packages,clients,lib,private}/*/vitest.config.{e2e,integ,browser}.ts"]; diff --git a/yarn.lock b/yarn.lock index 59939a8c30aab..377869c858699 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3866,6 +3866,15 @@ "@vitest/utils" "0.33.0" chai "^4.3.7" +"@vitest/expect@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.34.6.tgz#608a7b7a9aa3de0919db99b4cc087340a03ea77e" + integrity sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw== + dependencies: + "@vitest/spy" "0.34.6" + "@vitest/utils" "0.34.6" + chai "^4.3.10" + "@vitest/runner@0.33.0": version "0.33.0" resolved "https://registry.npmjs.org/@vitest/runner/-/runner-0.33.0.tgz" @@ -3875,6 +3884,15 @@ p-limit "^4.0.0" pathe "^1.1.1" +"@vitest/runner@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.34.6.tgz#6f43ca241fc96b2edf230db58bcde5b974b8dcaf" + integrity sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ== + dependencies: + "@vitest/utils" "0.34.6" + p-limit "^4.0.0" + pathe "^1.1.1" + "@vitest/snapshot@0.33.0": version "0.33.0" resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.33.0.tgz" @@ -3884,6 +3902,15 @@ pathe "^1.1.1" pretty-format "^29.5.0" +"@vitest/snapshot@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.34.6.tgz#b4528cf683b60a3e8071cacbcb97d18b9d5e1d8b" + integrity sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w== + dependencies: + magic-string "^0.30.1" + pathe "^1.1.1" + pretty-format "^29.5.0" + "@vitest/spy@0.33.0": version "0.33.0" resolved "https://registry.npmjs.org/@vitest/spy/-/spy-0.33.0.tgz" @@ -3891,6 +3918,13 @@ dependencies: tinyspy "^2.1.1" +"@vitest/spy@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.34.6.tgz#b5e8642a84aad12896c915bce9b3cc8cdaf821df" + integrity sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ== + dependencies: + tinyspy "^2.1.1" + "@vitest/utils@0.33.0": version "0.33.0" resolved "https://registry.npmjs.org/@vitest/utils/-/utils-0.33.0.tgz" @@ -3900,6 +3934,15 @@ loupe "^2.3.6" pretty-format "^29.5.0" +"@vitest/utils@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.34.6.tgz#38a0a7eedddb8e7291af09a2409cb8a189516968" + integrity sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^29.5.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" @@ -4993,6 +5036,19 @@ chai@^4.2.0: pathval "^1.1.1" type-detect "^4.0.5" +chai@^4.3.10: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + chai@^4.3.7: version "4.3.8" resolved "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz" @@ -5038,6 +5094,13 @@ check-error@^1.0.2: resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + chokidar@3.5.3, chokidar@^3.5.1: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" @@ -5816,6 +5879,13 @@ deep-eql@^4.1.2: dependencies: type-detect "^4.0.0" +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" @@ -7129,7 +7199,7 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: +get-func-name@^2.0.0, get-func-name@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== @@ -12635,6 +12705,11 @@ tinypool@^0.6.0: resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.6.0.tgz" integrity sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ== +tinypool@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021" + integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww== + tinyspy@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz" @@ -12922,6 +12997,11 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" @@ -13328,10 +13408,22 @@ vite-node@0.33.0: picocolors "^1.0.0" vite "^3.0.0 || ^4.0.0" -"vite@^3.0.0 || ^4.0.0": - version "4.5.3" - resolved "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz" - integrity sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg== +vite-node@0.34.6: + version "0.34.6" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.34.6.tgz#34d19795de1498562bf21541a58edcd106328a17" + integrity sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.4.0" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0 || ^5.0.0-0" + +vite@4.5.5, "vite@^3.0.0 || ^4.0.0", "vite@^3.0.0 || ^4.0.0 || ^5.0.0-0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0": + version "4.5.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.5.tgz#639b9feca5c0a3bfe3c60cb630ef28bf219d742e" + integrity sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ== dependencies: esbuild "^0.18.10" postcss "^8.4.27" @@ -13339,6 +13431,36 @@ vite-node@0.33.0: optionalDependencies: fsevents "~2.3.2" +vitest@0.34.6: + version "0.34.6" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.34.6.tgz#44880feeeef493c04b7f795ed268f24a543250d7" + integrity sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.34.6" + "@vitest/runner" "0.34.6" + "@vitest/snapshot" "0.34.6" + "@vitest/spy" "0.34.6" + "@vitest/utils" "0.34.6" + acorn "^8.9.0" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.10" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.1" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.3.3" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.7.0" + vite "^3.1.0 || ^4.0.0 || ^5.0.0-0" + vite-node "0.34.6" + why-is-node-running "^2.2.2" + vitest@^0.33.0: version "0.33.0" resolved "https://registry.npmjs.org/vitest/-/vitest-0.33.0.tgz"