grammyjs / grammY

The Telegram Bot Framework.
https://grammy.dev
MIT License
2.28k stars 112 forks source link

TypeScript compiles too long when using omitted filter or shortcut for it #543

Closed SecondThundeR closed 7 months ago

SecondThundeR commented 7 months ago

Couldn't find a close example for this in other issues, so I think it would be fine to post this. If this has already been discussed, then this issue can be closed 🤔

For some reason, tsc taking too long to compile simple example where not full form of filter notation was used, e.g. .on(":text", ...)

Steps to reproduce:

  1. Head to https://grammy.dev/guide/getting-started#getting-started-on-node-js to create simple project for NodeJS with TypeScript
  2. Insert this snippet to bot.ts

    import { Bot } from "grammy";
    
    // Create an instance of the `Bot` class and pass your bot token to it.
    const bot = new Bot(""); // <-- put your bot token between the ""
    
    // You can now register listeners on your bot object `bot`.
    // grammY will call the listeners when users send messages to your bot.
    
    // Handle the /start command.
    bot.command("start", (ctx) => ctx.reply("Welcome! Up and running."));
    // Handle other messages.
    bot.on(":text", (ctx) => ctx.reply("Got another message!"));
    
    // Now that you specified how to handle messages, you can start your bot.
    // This will connect to the Telegram servers and wait for messages.
    
    // Start the bot.
    bot.start();
  3. Run tsc or tsc --extendedDiagnostics

Expected behavior: TypeScript compiles snippet not longer than regular example or at least not for so long

Actual behavior: TypeScript taking 30-35 seconds to compile simple example with omitted filters/shortcut (was getting the same time with :contact at my project)

Diagnostics for .on("message:text", ...)

Files:                         53
Lines of Library:           36442
Lines of Definitions:       11507
Lines of TypeScript:           19
Lines of JavaScript:            0
Lines of JSON:                  0
Lines of Other:                 0
Identifiers:                50799
Symbols:                    36919
Types:                       4892
Instantiations:             65701
Memory used:               77521K
Assignability cache size:    2630
Identity cache size:           11
Subtype cache size:             0
Strict subtype cache size:      8
I/O Read time:              0.01s
Parse time:                 0.11s
ResolveModule time:         0.01s
ResolveTypeReference time:  0.00s
ResolveLibrary time:        0.00s
Program time:               0.14s
Bind time:                  0.06s
Check time:                 0.12s
transformTime time:         0.00s
commentTime time:           0.00s
I/O Write time:             0.00s
printTime time:             0.01s
Emit time:                  0.01s
Total time:                 0.33s

Diagnostics for .on(":text", ...)

Files:                           53
Lines of Library:             36442
Lines of Definitions:         11507
Lines of TypeScript:             19
Lines of JavaScript:              0
Lines of JSON:                    0
Lines of Other:                   0
Identifiers:                  50799
Symbols:                      36425
Types:                       534075
Instantiations:              246745
Memory used:               2667081K
Assignability cache size:     36069
Identity cache size:            112
Subtype cache size:               0
Strict subtype cache size:       42
I/O Read time:                0.01s
Parse time:                   0.11s
ResolveModule time:           0.01s
ResolveTypeReference time:    0.00s
ResolveLibrary time:          0.00s
Program time:                 0.14s
Bind time:                    0.05s
Check time:                  31.17s
transformTime time:           0.00s
commentTime time:             0.01s
I/O Write time:               0.00s
printTime time:               0.01s
Emit time:                    0.01s
Total time:                  31.38s

Seems that due to regex-like filter, number of types/instantiations and used memory is growing rapidly

KnorpelSenf commented 7 months ago

Which version of TS do you use?

SecondThundeR commented 7 months ago

Which version of TS do you use?

5.4.2

Seems like Microsoft messed up with it, because on 5.3.3 it compiles fine

KnorpelSenf commented 7 months ago

Yes, this is a regression in tsc. Did you already open an issue?

SecondThundeR commented 7 months ago

Not yet, I'll open it unless similar issues have been opened. Then I'm sorry to bother you. Have a nice day!

KnorpelSenf commented 7 months ago

It also seems to work fine with grammY 1.19.x and below. That means that it is related to having too many update types in grammY, which is a known problem right now. I have already narrowed it down to a minimal reproduction example that I shared among a few interested people in a different chat (https://t.me/fromdeno/31491). It will be very useful if you include the playground link in your issue. That way, people can understand why this bug happens without having to understand all the complex inner workings of grammY first.

https://www.typescriptlang.org/play?#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgVTABNNU4BvAKDhrgFdjTgB9BIgLjiToFsAjNAG5K1Wj2ABnCZgDmwAPydyccVNnBOEmFGQy4AX2G04wIglRFmq6XMUUTZi1ck2NcLTqR7DomtgAWmEhIwAA2zJBadsoBQSHhkTCa2roGRrSm5qbMscFhERBRSg5ZlrnxBVrJnt7pNNbqzFDAODAIEEjRKi6Nza3tSNWpPsYNck0t2G0dORB0KF1jLH1TA7PzSe4pXmm+iEihyCwAjnRoAJ5dyIchzKcXQzsjtAGFwEisB0cTEnShMF1XhJ3p8bstJH9Nh5hnU4NhMKFQnwcABrO5nKCXYrwxHI7Bo+6Yx61PYSfwIMBgXToi5dMkUqleGlErY1XbGMDNHL+YD4uYwZlY+yclgBXko-mC4ns2iQRFdOWhaXPGiK5hBCQAdzQCogiPVSC1aGVsJ4525pGc-B1xTNFoF4mtUBNe1iDuATsBgXdTpdxjdzAAVhBkBN7kV7AHg6HmuGodsSf7vcw+BBCgDscnU+m-bRmjwIAA3bIB7MR5T5oslrNpqqsmGUfQiGDnMB4ABiCH+aHb81WHQAPPgTCBUEgiBICIxUAAaOAANRHY4nBAAfHAALxwAAUDE4+AAlJv1wxEJP58JKKBILA4Og+9MkCpSAFO92oEOl+8V4QSLO4AAil+46Tm+qBQABGLnKu257OgXbgZwQEAD6AQA2gAujOlAHpwYE9g+AxDnO+Efvgc4Aau65UP6HQSHqwAAHShBAMjbgARAAsi+5JeOxc7we+B6ws0MB0FAT67mA+64fQYBnnApHEYB64buuACE6kMMITaUAA9AAVAZcAAIKInAhYImwd4IWgcCEggkg7sAxaYnJf54CiwDnCOuBgPADAeawRBHgZelXuA0DwC2baKbZEFQZucBeecEDoHAADyPDmEO07AHO7GBUwwXsaul6GcZABymBQFAECanARD1U+QTuUwcAQHwga8vAyLAkQHUtTZ772YlYURTe0Wth28WfqAy6Tr+TAUcBK6kZBFyqXAAAKaDoNAPAbZiA57ORewAErzEd5wDpRlBlSIel6XAcghFA7WtZ13VTKydBTOJeAwN6cKtQI+zgcCUymHAmrmP4bWoJOMAQFwNV1Q1QMeo1zWUDFeCXUg123atk7Ql4W0AMIQPwRwDgAMgAjO270yOIKC3auFEPfpz08JgYCTpM8NgDV8BpXAmPDeBo0XBLKPnby0BEAO7EpfxHVdT1q649NcCM8zshszAxPzd+pMJltQGmyB9BICiSDNXA8hwAr2BK7dc5fVreycCErnCE9jXAPBIRwAioQdZjUA2WEK7oHVPAy25mCTilk6w0DFkImccAAAbzEQwdHEQuc67FVM0yEykANIk-W5NJcO1srvM9s48YzvDgAZDtosIAiA6u+7ACiIDYKEdCFwO1dzil4v4JztuFyHphUT7XAuUIj3PfzYChD5mBJz5zS-P8cB8D5yAQz1qTmDDcMI-lPNh+OEs8k+dASKkmPAlnE9OcjDqrkdCFzfngVodAESPzLngXaGADpEybqOM2U4PJznOnXL2UwtoYObpOVuDtNRID2M7Uiphh7FnZuRVB7Ue7nW1sYX2m8oDlWekgNG9VsZEJfo-c+l8UBoEhm0HYd8M7w0PmYdA6A0DvACnlGBcV3zkMocbYedclr-iQQtGhqBVJ7B7sPfRmVsrG2oYVPKJVuZ4zgJxNgRBQjAE1DVYAc1kE2w0cALa24pggBkseW2bduGoW2gnBAwIBwEOag9ceKdJwUNkQACToHwVx2iPHUT2J-YA25GK5OykQexjjnGcBMrVTAN1bEFIcU45oQ4qKyXiSgJJKSF4UD2LRQ0DFmKsQ4iZApuh1b5MKTUpiDivBAwKq9NACBsBwECOOBxUAJDsWEu0vMwAxISTfmE2ETZjCDitm4ta8VrowTWTQQSiFAJwFQgBTC2FjDGFyYxIZ1TimmTKRUuxbzalKWoZRNexgGkqOaQOP5XMMmPJeHRLpLE2LsT6WYPic5XlFOaMxd4MgJlwHYvMwpSy7zQHVpctAqyoU0FEuJJ8IQGqNJgKC8FKkYJktoE2XSbtDTwH8MkpKNK4B0uaduVZz9w5gN-pqaAKJ2CUG5XwRiHQOJLBWcIWV8qkCKp6HIdWUkjxqQoPoVZHKtDuB5VuVVCq0LsSVQVco+REjsQwqs34cqsnbh1f48gBqVXJLVduS11qcW2oSOmB1c4hUeq9dvbZk4Oh4Cak5B2SQZU+otVazVwB1bsSDZUGAoadwMF1dRSNQA

KnorpelSenf commented 7 months ago

One last thing: be sure to mention that people should try the same playground with 5.4.2 and 5.3.3 and compare the reported error. Also, removing two or more properties from the interface Update fixes the issue. Those two pieces of information are crucial.

Could you leave a link to the opened issue here? :)

SecondThundeR commented 7 months ago

Could you leave a link to the opened issue here? :)

Sure

SecondThundeR commented 7 months ago

Tried to lookup similar issues, but only https://github.com/microsoft/TypeScript/issues/53234 looked somewhat closer example of what we are facing right now. Here is my issue (hope I made it right): https://github.com/microsoft/TypeScript/issues/57863

Also I removed last .on(...) example, which is not working on both versions, so devs won't be confused

SecondThundeR commented 7 months ago

upd: TypeScript team fixed and closed this issue

Not only they fixed this issue, but it seems they fixed your example at the very end (see https://github.com/microsoft/TypeScript/pull/57871)

image

image


Also, now example at the top, compiles at the same time as regular filter (or even faster):

image

KnorpelSenf commented 7 months ago

Holy fucking shit, this is big news

KnorpelSenf commented 7 months ago

@all-contributors add @SecondThundeR for the bug report to Microsoft that uncorked further grammY updates ❤️

allcontributors[bot] commented 7 months ago

@KnorpelSenf

I've put up a pull request to add @SecondThundeR! :tada: