Description
Bug Report
🔎 Search Terms
RangeError: Maximum call stack size exceeded
recursiveTypeRelatedTo_DepthLimit
🕗 Version & Regression Information
- This is a crash/degraded performance
- This changed between versions 4,4.4 and 4.5.1
💻 Code
package.json
{
"name": "node-sandbox",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"knex": "^0.95.14",
"objection": "^3.0.0",
"typescript": "^4.5"
}
}
code
import { Model } from 'objection';
export class User extends Model {
static tableName = 'user';
name!: string;
}
async function getUser() {
const k = await User.query().orWhere('id', 5).
}
Default tsconfig.
🙁 Actual behavior
Open VS Code. Place cursor after the period on the query line. Invoke suggestions. "Loading.." takes about 5 seconds. At times hovering over "k" to look at the type also shows the same slow "Loading.." behavior. TS Server log shows this:
{"seq":5182,"type":"request","command":"completionEntryDetails","arguments":{"file":"c:/Users/JJH/Developer/node-sandbox/PersonModel.ts","line":38,"offset":49,"entryNames":["at"]}}
Info 16907[11:25:14.112] getCompletionData: Get current token: 0.01269996166229248
Info 16908[11:25:14.112] getCompletionData: Is inside comment: 0.02090001106262207
Info 16909[11:25:14.112] getCompletionData: Get previous token: 0.014299988746643066
Info 16910[11:25:14.112] getCompletionsAtPosition: isCompletionListBlocker: 0.003000020980834961
Info 16911[11:25:14.117] getCompletionData: Semantic work: 5.484899997711182
Info 16912[11:25:14.149] response:
{"seq":0,"type":"response","command":"completionEntryDetails","request_seq":5182,"success":true,"body":{"canceled":true}}
At other times it shows something like this
Perf 73 [16:28:04.912] 8::geterr: async elapsed time (in milliseconds) 0.6479
Info 74 [16:28:04.913] event:
{"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"c:/Users/JJH/Developer/node-sandbox/BaseModel.ts","diagnostics":[]}}
Err 75 [16:28:05.852] Exception on executing command delayed processing of request 8:
Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62465:42)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64200:34)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63720:28)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63243:31)
at typeRelatedToSomeType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63460:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63732:32)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at checkTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62809:26)
at isTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62760:24)
at isTypeAssignableTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61966:20)
at getConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:60775:77)
at getConditionalTypeInstantiation (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61748:25)
at getConstraintOfDistributiveConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:57146:40)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64121:54)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at eachTypeRelatedToType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63527:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63729:29)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at isRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63095:24)
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62578:25)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64200:34)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63095:24)
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62578:25)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64200:34)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at isPropertySymbolTypeRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64436:24)
at propertyRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64469:31)
at propertiesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64670:43)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63720:28)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63243:31)
at typeRelatedToSomeType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63460:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63732:32)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at checkTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62809:26)
at isTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62760:24)
at isTypeAssignableTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61966:20)
at getConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:60775:77)
at getConditionalTypeInstantiation (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:61748:25)
at getConstraintOfDistributiveConditionalType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:57146:40)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64121:54)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at recursiveTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63681:64)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63197:34)
at eachTypeRelatedToType (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63527:35)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63729:29)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
at isRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63191:30)
at isRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63095:24)
at compareSignaturesRelated (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:62578:25)
at signatureRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64812:24)
at signaturesRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64746:39)
at structuredTypeRelatedToWorker (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:64202:39)
at structuredTypeRelatedTo (c:\Users\JJH\Developer\node-sandbox\node_modules\typescript\lib\tsserver.js:63714:30)
Info 76 [16:28:05.852] event:
{"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":8}}
I've used --generateTrace and had a look at it. There is a "recursiveTypeRelatedTo_DepthLimit" event during structuredTypeRelatedTo which I'm guessing may be the underlying issue. Is this the likely culprit? What would be the best way to diagnose this? Also, why is TSC fast while tsserver inference is slow? The type-checking part of the compliation (checkSourceFile in the trace) only takes 1.5 seconds.