vitest icon indicating copy to clipboard operation
vitest copied to clipboard

vitest doesn't support TypeScript 5.2's using feature

Open knpwrs opened this issue 2 years ago • 7 comments

Describe the bug

TypeScript 5.2 supports an upcoming ES feature, using: https://devblogs.microsoft.com/typescript/announcing-typescript-5-2/

The syntax doesn't get transpiled by vitest, and then tests fail with the following error:

Error: Parse failure: Unexpected token (6:10)
At file: /home/projects/vitest-dev-vitest-uk35mv/test/basic.test.ts
Contents of line 6:     using disposable = {

When I run the files that use the using syntax with https://github.com/esbuild-kit/tsx, it works just fine.

Reproduction

https://stackblitz.com/edit/vitest-dev-vitest-uk35mv?file=tsconfig.json,test%2Fbasic.test.ts&initialPath=vitest/

System Info

System:
    OS: macOS 13.4
    CPU: (12) arm64 Apple M2 Max
    Memory: 2.24 GB / 64.00 GB
    Shell: 5.9 - /opt/homebrew/bin/zsh
  Binaries:
    Node: 20.7.0 - ~/Workspace/letschurch/lets.church/bin/node
    Yarn: 1.22.19 - /opt/homebrew/bin/yarn
    npm: 10.1.0 - ~/Workspace/letschurch/lets.church/bin/npm
    pnpm: 8.7.4 - /opt/homebrew/bin/pnpm
  Browsers:
    Chrome: 116.0.5845.187
    Chrome Canary: 117.0.5863.0
    Safari: 16.5
  npmPackages:
    vitest: ^0.34.5 => 0.34.5

Used Package Manager

npm

Validations

knpwrs avatar Sep 26 '23 10:09 knpwrs

Vitest just uses Vite which uses esbuild. Until esbuild is updated in their dependencies (maybe it already is, and you just need to update versions?) you can use the resolutions/overrides field:

For pnpm:

{
  "overrides": {
    "esbuild": "^0.19.3"
  }
}

For yarn:

{
  "resolutions": {
    "esbuild": "^0.19.3",
  }
}

sheremet-va avatar Sep 27 '23 08:09 sheremet-va

I thought esbuild was only used for dependencies, not for application code? In any case, that override doesn't appear to fix the issue. Also, tsx uses an older version of esbuild than that override and the using syntax works just fine in tsx.

knpwrs avatar Sep 29 '23 19:09 knpwrs

Vitest uses rollup for application code, and rollup uses acorn.

https://github.com/rollup/rollup/issues/5113

juanrgm avatar Oct 25 '23 14:10 juanrgm

I fixed this issue by setting esbuild's target to es2022:

import { defineConfig } from 'vitest/config';

export default defineConfig({
  esbuild: { target: 'es2022' },
});

nedsalk avatar Oct 26 '23 11:10 nedsalk

The current workaround is to use @nedsalk's config. The issue should be fixed when Vitest 1.0 is released.

sheremet-va avatar Oct 31 '23 12:10 sheremet-va

Has there been any progress on this issue?

miyaji255 avatar Jun 03 '24 08:06 miyaji255