diff --git a/packages/client-engine-runtime/.prettierignore b/packages/client-engine-runtime/.prettierignore deleted file mode 100644 index 53c37a16608c..000000000000 --- a/packages/client-engine-runtime/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -dist \ No newline at end of file diff --git a/packages/client-engine-runtime/.prettierrc.yml b/packages/client-engine-runtime/.prettierrc.yml deleted file mode 100644 index f0beb50a2167..000000000000 --- a/packages/client-engine-runtime/.prettierrc.yml +++ /dev/null @@ -1,5 +0,0 @@ -tabWidth: 2 -trailingComma: all -singleQuote: true -semi: false -printWidth: 120 diff --git a/packages/client-engine-runtime/jest.config.js b/packages/client-engine-runtime/jest.config.js deleted file mode 100644 index a1a5fa911c5b..000000000000 --- a/packages/client-engine-runtime/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - preset: '../../helpers/test/presets/default.js', - prettierPath: '../../node_modules/prettier2', -} diff --git a/packages/client-engine-runtime/package.json b/packages/client-engine-runtime/package.json index f22fbe77f40d..eb64d78cd1cc 100644 --- a/packages/client-engine-runtime/package.json +++ b/packages/client-engine-runtime/package.json @@ -39,17 +39,14 @@ "devDependencies": { "@codspeed/benchmark.js-plugin": "4.0.0", "@types/benchmark": "2.1.5", - "@types/jest": "29.5.14", "@types/node": "~20.19.24", - "benchmark": "2.1.4", - "jest": "29.7.0", - "jest-junit": "16.0.0" + "benchmark": "2.1.4" }, "scripts": { "dev": "DEV=true tsx helpers/build.ts", "build": "tsx helpers/build.ts", "prepublishOnly": "pnpm run build", - "test": "jest" + "test": "vitest run" }, "files": [ "dist" diff --git a/packages/client-engine-runtime/src/interpreter/generators.test.ts b/packages/client-engine-runtime/src/interpreter/generators.test.ts index 3fed161476f7..d0c5c33b41f0 100644 --- a/packages/client-engine-runtime/src/interpreter/generators.test.ts +++ b/packages/client-engine-runtime/src/interpreter/generators.test.ts @@ -1,3 +1,5 @@ +import { expect, test } from 'vitest' + import { GeneratorRegistry } from './generators' test('should always return the same time for a single snapshot', async () => { diff --git a/packages/client-engine-runtime/src/interpreter/render-query.test.ts b/packages/client-engine-runtime/src/interpreter/render-query.test.ts index d72226af45e7..22c6e7a939a4 100644 --- a/packages/client-engine-runtime/src/interpreter/render-query.test.ts +++ b/packages/client-engine-runtime/src/interpreter/render-query.test.ts @@ -1,3 +1,5 @@ +import { expect, test } from 'vitest' + import type { PlaceholderFormat, QueryPlanDbQuery } from '../query-plan' import { GeneratorRegistry } from './generators' import { renderQuery } from './render-query' diff --git a/packages/client-engine-runtime/src/interpreter/serialize-sql.test.ts b/packages/client-engine-runtime/src/interpreter/serialize-sql.test.ts index 49a8acb053c2..40862117d2f2 100644 --- a/packages/client-engine-runtime/src/interpreter/serialize-sql.test.ts +++ b/packages/client-engine-runtime/src/interpreter/serialize-sql.test.ts @@ -1,4 +1,5 @@ import { ColumnTypeEnum } from '@prisma/driver-adapter-utils' +import { expect, test } from 'vitest' import { serializeSql } from './serialize-sql' diff --git a/packages/client-engine-runtime/src/json-protocol.test.ts b/packages/client-engine-runtime/src/json-protocol.test.ts index abd505e592db..9674097470c4 100644 --- a/packages/client-engine-runtime/src/json-protocol.test.ts +++ b/packages/client-engine-runtime/src/json-protocol.test.ts @@ -1,4 +1,5 @@ import { Decimal } from '@prisma/client-runtime-utils' +import { describe, expect, test } from 'vitest' import { deserializeJsonObject } from './json-protocol' diff --git a/packages/client-engine-runtime/src/sql-commenter.test.ts b/packages/client-engine-runtime/src/sql-commenter.test.ts index cf2abff010c7..b1533ff318ac 100644 --- a/packages/client-engine-runtime/src/sql-commenter.test.ts +++ b/packages/client-engine-runtime/src/sql-commenter.test.ts @@ -1,4 +1,5 @@ import type { SqlCommenterContext, SqlCommenterPlugin } from '@prisma/sqlcommenter' +import { describe, expect, test, vi } from 'vitest' import { appendSqlComment, applySqlCommenters, buildSqlComment, formatSqlComment } from './sql-commenter' @@ -90,7 +91,7 @@ describe('applySqlCommenters', () => { }) test('calls plugin with context', () => { - const plugin = jest.fn(() => ({ key: 'value' })) + const plugin = vi.fn(() => ({ key: 'value' })) applySqlCommenters([plugin], mockSingleContext) expect(plugin).toHaveBeenCalledWith(mockSingleContext) }) diff --git a/packages/client-engine-runtime/src/transaction-manager/transaction-manager.test.ts b/packages/client-engine-runtime/src/transaction-manager/transaction-manager.test.ts index e38862330c33..300cd1d62157 100644 --- a/packages/client-engine-runtime/src/transaction-manager/transaction-manager.test.ts +++ b/packages/client-engine-runtime/src/transaction-manager/transaction-manager.test.ts @@ -1,6 +1,7 @@ import timers from 'node:timers/promises' import type { SqlDriverAdapter, SqlQuery, SqlResultSet, Transaction } from '@prisma/driver-adapter-utils' +import { expect, test, vi } from 'vitest' import { noopTracingHelper } from '../tracing' import { Options } from './transaction' @@ -15,7 +16,7 @@ import { TransactionStartTimeoutError, } from './transaction-manager-error' -jest.useFakeTimers() +vi.useFakeTimers() const START_TRANSACTION_TIME = 200 const TRANSACTION_EXECUTION_TIMEOUT = 500 @@ -34,9 +35,9 @@ class MockDriverAdapter implements SqlDriverAdapter { private readonly rollbackToSavepoint: Transaction['rollbackToSavepoint'] private readonly releaseSavepoint: Transaction['releaseSavepoint'] - executeRawMock: jest.MockedFn<(params: SqlQuery) => Promise> = jest.fn().mockResolvedValue(1) - commitMock: jest.MockedFn<() => Promise> = jest.fn().mockResolvedValue(undefined) - rollbackMock: jest.MockedFn<() => Promise> = jest.fn().mockResolvedValue(undefined) + executeRawMock = vi.fn().mockResolvedValue(1) + commitMock = vi.fn().mockResolvedValue(undefined) + rollbackMock = vi.fn().mockResolvedValue(undefined) constructor( options: { @@ -104,7 +105,7 @@ class MockDriverAdapter implements SqlDriverAdapter { adapterName: 'mock-adapter', provider, options: { usePhantomQuery }, - queryRaw: jest.fn().mockRejectedValue('Not implemented for test'), + queryRaw: vi.fn().mockRejectedValue('Not implemented for test'), executeRaw: executeRawMock, commit: commitMock, rollback: rollbackMock, @@ -128,7 +129,7 @@ async function startTransaction(transactionManager: TransactionManager, options: maxWait: START_TRANSACTION_TIME * 2, ...options, }), - jest.advanceTimersByTimeAsync(START_TRANSACTION_TIME + 100), + vi.advanceTimersByTimeAsync(START_TRANSACTION_TIME + 100), ]) return id } @@ -343,11 +344,9 @@ test('nested savepoints use sqlite syntax', async () => { }) test('nested savepoints use adapter-provided methods when available', async () => { - const createSavepoint = jest.fn>, [string]>(async () => {}) - const rollbackToSavepoint = jest.fn>, [string]>( - async () => {}, - ) - const releaseSavepoint = jest.fn>, [string]>(async () => {}) + const createSavepoint = vi.fn(async (_name: string) => {}) + const rollbackToSavepoint = vi.fn(async (_name: string) => {}) + const releaseSavepoint = vi.fn(async (_name: string) => {}) const driverAdapter = new MockDriverAdapter({ provider: 'postgres', @@ -377,7 +376,7 @@ test('nested savepoints use adapter-provided methods when available', async () = }) test('nested savepoint release can be omitted by adapter', async () => { - const createSavepoint = jest.fn>, [string]>(async () => {}) + const createSavepoint = vi.fn(async () => {}) const driverAdapter = new MockDriverAdapter({ provider: 'postgres', @@ -474,7 +473,7 @@ test('commitTransaction during a rollback caused by a time out raises a Transact const timeout = 200 const rollbackDelay = 200 - driverAdapter.rollbackMock = jest.fn().mockImplementation(() => timers.setTimeout(rollbackDelay)) + driverAdapter.rollbackMock = vi.fn().mockImplementation(() => timers.setTimeout(rollbackDelay)) const transactionManager = new TransactionManager({ driverAdapter, @@ -483,11 +482,11 @@ test('commitTransaction during a rollback caused by a time out raises a Transact }) const txPromise = transactionManager.startTransaction() - await jest.advanceTimersByTimeAsync(START_TRANSACTION_TIME + timeout) + await vi.advanceTimersByTimeAsync(START_TRANSACTION_TIME + timeout) const tx = await txPromise const commitPromise = transactionManager.commitTransaction(tx.id) - await expect(Promise.all([jest.advanceTimersByTimeAsync(rollbackDelay), commitPromise])).rejects.toEqual( + await expect(Promise.all([vi.advanceTimersByTimeAsync(rollbackDelay), commitPromise])).rejects.toEqual( new TransactionExecutionTimeoutError('commit', { timeout, timeTaken: START_TRANSACTION_TIME + timeout + rollbackDelay, @@ -594,7 +593,7 @@ test('transaction times out during starting', async () => { expect(driverAdapter.rollbackMock).not.toHaveBeenCalled() // Now let the startTransaction promise resolve - await jest.advanceTimersByTimeAsync(START_TRANSACTION_TIME) + await vi.advanceTimersByTimeAsync(START_TRANSACTION_TIME) // The transaction that was started in the background should now be rolled back // to release the connection back to the pool. @@ -610,16 +609,16 @@ test('transaction start timeout cleans up connection if transaction eventually s const TIME_PAST_MAX_WAIT = MAX_WAIT + 50 const REMAINING_TIME_FOR_START = SLOW_START_TRANSACTION_TIME - TIME_PAST_MAX_WAIT - const rollbackMock = jest.fn().mockResolvedValue(undefined) + const rollbackMock = vi.fn().mockResolvedValue(undefined) const driverAdapter = { adapterName: 'slow-adapter', provider: 'postgres' as const, - executeRaw: jest.fn().mockResolvedValue(1), - queryRaw: jest.fn(), - executeScript: jest.fn(), - dispose: jest.fn(), - startTransaction: jest.fn().mockImplementation( + executeRaw: vi.fn().mockResolvedValue(1), + queryRaw: vi.fn(), + executeScript: vi.fn(), + dispose: vi.fn(), + startTransaction: vi.fn().mockImplementation( () => new Promise((resolve) => setTimeout( @@ -628,9 +627,9 @@ test('transaction start timeout cleans up connection if transaction eventually s adapterName: 'slow-adapter', provider: 'postgres', options: { usePhantomQuery: false }, - queryRaw: jest.fn(), - executeRaw: jest.fn(), - commit: jest.fn(), + queryRaw: vi.fn(), + executeRaw: vi.fn(), + commit: vi.fn(), rollback: rollbackMock, }), SLOW_START_TRANSACTION_TIME, @@ -648,7 +647,7 @@ test('transaction start timeout cleans up connection if transaction eventually s // Start a transaction with a maxWait shorter than the actual connection time // Use Promise.all to advance timers and wait for the rejection simultaneously const [, txResult] = await Promise.all([ - jest.advanceTimersByTimeAsync(TIME_PAST_MAX_WAIT), + vi.advanceTimersByTimeAsync(TIME_PAST_MAX_WAIT), transactionManager.startTransaction().catch((e) => e), ]) @@ -659,7 +658,7 @@ test('transaction start timeout cleans up connection if transaction eventually s expect(rollbackMock).not.toHaveBeenCalled() // Now advance time to let the startTransaction promise resolve - await jest.advanceTimersByTimeAsync(REMAINING_TIME_FOR_START) + await vi.advanceTimersByTimeAsync(REMAINING_TIME_FOR_START) // After the background startTransaction completes, rollback should be called // to release the connection and avoid pool exhaustion @@ -676,7 +675,7 @@ test('transaction times out during execution', async () => { const id = await startTransaction(transactionManager) - await jest.advanceTimersByTimeAsync(TRANSACTION_EXECUTION_TIMEOUT + 100) + await vi.advanceTimersByTimeAsync(TRANSACTION_EXECUTION_TIMEOUT + 100) await expect(transactionManager.commitTransaction(id)).rejects.toBeInstanceOf(TransactionExecutionTimeoutError) await expect(transactionManager.rollbackTransaction(id)).rejects.toBeInstanceOf(TransactionExecutionTimeoutError) @@ -692,7 +691,7 @@ test('internal transaction does not apply the default start timeout', async () = const [tx] = await Promise.all([ transactionManager.startInternalTransaction(), - jest.advanceTimersByTimeAsync(START_TRANSACTION_TIME), + vi.advanceTimersByTimeAsync(START_TRANSACTION_TIME), ]) await transactionManager.commitTransaction(tx.id) @@ -710,9 +709,9 @@ test('internal transaction does not apply the default execution timeout', async const [tx] = await Promise.all([ transactionManager.startInternalTransaction(), - jest.advanceTimersByTimeAsync(START_TRANSACTION_TIME), + vi.advanceTimersByTimeAsync(START_TRANSACTION_TIME), ]) - await jest.advanceTimersByTimeAsync(TRANSACTION_EXECUTION_TIMEOUT) + await vi.advanceTimersByTimeAsync(TRANSACTION_EXECUTION_TIMEOUT) await transactionManager.commitTransaction(tx.id) expect(driverAdapter.commitMock).toHaveBeenCalled() @@ -745,7 +744,7 @@ test('TransactionManagerErrors have common structure', () => { test('startTransaction works when setTimeout returns a timer without unref (workerd environment)', async () => { const originalSetTimeout = global.setTimeout - const setTimeoutSpy = jest + const setTimeoutSpy = vi .spyOn(global, 'setTimeout') .mockImplementation((callback: (...args: any[]) => void, ms?: number, ...args: any[]) => { const timer = originalSetTimeout(callback, ms, ...args) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9fd5185bc3e8..9c7bbc464a00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -988,21 +988,12 @@ importers: '@types/benchmark': specifier: 2.1.5 version: 2.1.5 - '@types/jest': - specifier: 29.5.14 - version: 29.5.14 '@types/node': specifier: ~20.19.24 version: 20.19.25 benchmark: specifier: 2.1.4 version: 2.1.4 - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - jest-junit: - specifier: 16.0.0 - version: 16.0.0 packages/client-generator-js: dependencies: @@ -9704,41 +9695,6 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.25 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/create-cache-key-function@29.7.0': dependencies: '@jest/types': 29.6.3 @@ -11790,21 +11746,6 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-require@1.1.1: {} cross-fetch@4.1.0(encoding@0.1.13): @@ -13054,25 +12995,6 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.6.0 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.4.5)): dependencies: '@babel/core': 7.21.8 @@ -13104,37 +13026,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)): - dependencies: - '@babel/core': 7.21.8 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.21.8) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.2.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.25 - ts-node: 10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -13386,18 +13277,6 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jiti@2.4.2: {} jju@1.4.0: {} @@ -15330,27 +15209,6 @@ snapshots: optionalDependencies: '@swc/core': 1.11.5 - ts-node@10.9.2(@swc/core@1.11.5)(@types/node@20.19.25)(typescript@5.8.2): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 20.19.25 - acorn: 8.14.1 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.8.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.11.5 - optional: true - ts-pattern@5.6.2: {} ts-toolbelt@9.6.0: {}