Skip to content

Monorepo shared tools package TypeScript config file #785

Description

@soconnor-seeq

Describe the bug

I found a bug in my monorepo where the extension failed discover tests when a vitest.config.ts imports a shared config helper through a workspace package export like:

import { createStandardVitestConfig } from '@org/common-tools-package/vitest/setup';

It turns out the extension was throwing an error:

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for .../packages/common-tools-package/src/vitest/setup.ts

In a terminal I can run vitest and it resolves and loads the shared package's import to the setup.ts file.

Expected behavior

Extension shows tests (w/o logged errors) for a monorepo package that imports a shared config from a common package.

Reproduction

Example Repo:

repo-root/
├─ package.json
└─ packages/
   ├─ package-a/
   │  ├─ package.json
   │  ├─ vitest.config.ts
   │  └─ src/
   │     └─ example.test.ts
   └─ common-tools-package/
      ├─ package.json
      └─ src/
         └─ vitest/
            ├─ setup.ts
            └─ vitest-config.ts

packages/common-tools-package/package.json:

{
  "name": "@org/common-tools-package",
  "type": "module",
  "exports": {
    "./vitest/setup": {
      "types": "./src/vitest/setup.ts",
      "import": "./src/vitest/setup.ts",
      "require": "./src/vitest/setup.ts",
      "default": "./src/vitest/setup.ts"
    }
  }
}

Note that if I don't use the @org/common-tools prefix and use a direct-on-disk path import like: import { createStandardVitestConfig } from '../common-tools-package/src/vitest/setup.ts' the extension can load that shared setup.ts and I can execute tests in my IDE.

Output

[INFO 2:23:41 PM] [API] Running Vitest v4.1.2 (example/vite.config.ts) with "/home/soconnor/.nvm/versions/node/v22.14.0/bin/node /home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/worker.js"
[2:23:41 PM] [VSCODE] Flushing 1 changed items
[Error 2:23:41 PM] There were errors during config load.
[Error 2:23:41 PM] [Error Error] Vitest failed to start: 
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/soconnor/dev/package-a/client/packages/tools/src/vitest/setup.ts
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:219:9)
    at defaultGetFormat (node:internal/modules/esm/get_format:245:36)
    at defaultLoad (node:internal/modules/esm/load:120:22)
    at async ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:514:32)
Error: Vitest failed to start: 
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/soconnor/dev/package-a/client/packages/tools/src/vitest/setup.ts
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:219:9)
    at defaultGetFormat (node:internal/modules/esm/get_format:245:36)
    at defaultLoad (node:internal/modules/esm/load:120:22)
    at async ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:514:32)
	at e.u (/home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/extension.js:1:59239)
	at e.emit (node:events:519:28)
	at e.o.t.exports.ae (/home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/wrapper-Br94zcvg.js:1:38577)
	at e.o.t.exports.emit (node:events:519:28)
	at e.o.t.exports.dataMessage (/home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/wrapper-Br94zcvg.js:1:16501)
	at e.o.t.exports.getData (/home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/wrapper-Br94zcvg.js:1:15398)
	at e.o.t.exports.startLoop (/home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/wrapper-Br94zcvg.js:1:12110)
	at e.o.t.exports._write (/home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/wrapper-Br94zcvg.js:1:11402)
	at writeOrBuffer (node:internal/streams/writable:572:12)
	at _write (node:internal/streams/writable:501:10)
	at Writable.write (node:internal/streams/writable:510:10)
	at Socket.Z (/home/soconnor/.vscode/extensions/vitest.explorer-1.50.4/dist/wrapper-Br94zcvg.js:1:39601)
	at Socket.emit (node:events:519:28)
	at addChunk (node:internal/streams/readable:561:12)
	at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
	at Readable.push (node:internal/streams/readable:392:5)
	at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
	at TCP.callbackTrampoline (node:internal/async_hooks:130:17)

Extension Version

1.50.4

Vitest Version

4.1.2

Validations

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions