cevek / ttypescript

Over TypeScript tool to use custom transformers in the tsconfig.json
1.53k stars 56 forks source link

Warning: Accessing non-existent property 'tracing' of module exports inside circular dependency" when using ttypescript as compiler for ts-jest #141

Open IsaacMcIntyre opened 1 year ago

IsaacMcIntyre commented 1 year ago

Apologies if this repo is not the right place to post, I wasn't quite sure to post this under ttypescript, or to have it under ts-jest.

I have an issue in where I am seeing many warnings upon running my jest unit tests for my Vue3 project only when ttypescript has been setup as the compiler for ts-jest. "^.+\\.ts$": ["ts-jest", { compiler: "ttypescript" }],

However, when ttypescript as compiler is removed from jest.config.js (which defaults to typescript instead), the tests mention no warnings. However, in my project I am having to use ts-auto-mock, which requires ttypescript to be used as the ts-jest compiler see here. I have also noticed this only seems to be happening on first run, unless jest cache is disabled.

I have created a barebones Vue3 project with ttypescript setup as ts-jest compiler here to demonstrate the warnings.

While looking into this, I also stumbled onto this discussion which seemed to point the same issue at ttypescript #https://github.com/Swatinem/rollup-plugin-dts/issues/206.

The warning with stacktrace is as follows:

(node:22331) Warning: Accessing non-existent property 'tracing' of module exports inside circular dependency at emitCircularRequireWarning (node:internal/modules/cjs/loader:719:11) at Object.get (node:internal/modules/cjs/loader:735:5) at Object.emit (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/typescript/lib/typescript.js:117510:39) at Object.transpileModule (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/typescript/lib/typescript.js:145681:17) at Object.process (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/@vue/vue3-jest/lib/transformers/typescript.js:17:28) at processScriptSetup (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/@vue/vue3-jest/lib/process.js:68:30) at Object.module.exports [as process] (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/@vue/vue3-jest/lib/process.js:168:29) at ScriptTransformer.transformSource (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/@jest/transform/build/ScriptTransformer.js:542:31) at ScriptTransformer._transformAndBuildScript (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/@jest/transform/build/ScriptTransformer.js:671:40) at ScriptTransformer.transform (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/@jest/transform/build/ScriptTransformer.js:723:19) at Runtime.transformFile (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:1565:53) at Runtime._execModule (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:1497:34) at Runtime._loadModule (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:1122:12) at Runtime.requireModule (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:982:12) at Runtime.requireModuleOrMock (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:1148:21) at Object. (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/src/components/HelloWorld.test.ts:3:1) at Runtime._execModule (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:1539:24) at Runtime._loadModule (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:1122:12) at Runtime.requireModule (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runtime/build/index.js:982:12) at jestAdapter (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13) at processTicksAndRejections (node:internal/process/task_queues:96:5) at runTestInternal (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runner/build/runTest.js:367:16) at runTest (/Users/isaac.mcintyre/Documents/ttypescript-error-proof/node_modules/jest-runner/build/runTest.js:444:34) PASS src/components/HelloWorld.test.ts HelloWorld component ✓ renders (13 ms)

Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 2.348 s

Notes:

malinkie commented 1 year ago

I get this on ttsc --watch with a generic custom transformer plugin

import * as ts from 'typescript';

export default function transformer() {
    return (_: ts.TransformationContext) => {
        return (source: ts.SourceFile) => {
            return source
        };
    };
}
malinkie commented 1 year ago

Also added a barebones repo that can reproduce the issue:

https://github.com/malinkie/circular-dep

If you change the transformer to javascript rather than typescript. it works with no errors

sergei-maertens commented 3 weeks ago

I'm seeing the same on Node 20.6 with a custom transformer too:

import * as ts from 'typescript';

function transform<T extends ts.Node>(): ts.TransformerFactory<T> {
  return context => {
    const visit: ts.Visitor = node => {
      // Check for import declarations and filter out .scss files
      if (ts.isImportDeclaration(node)) {
        const moduleSpecifier = node.moduleSpecifier;
        if (ts.isStringLiteral(moduleSpecifier) && moduleSpecifier.text.endsWith('.scss')) {
          return undefined; // Remove the import declaration
        }
      }
      return ts.visitEachChild(node, child => visit(child), context);
    };
    return node => ts.visitNode(node, visit);
  };
}

export default transform;