Open artem1458 opened 1 year ago
@johnnyreilly Hey, just find out that everything works fine with getProgram function, but I think if it's expected behaviour - it should be documented
https://github.com/TypeStrong/ts-loader#getcustomtransformers
(program: Program, getProgram: () => Program) => { before?: TransformerFactory<SourceFile>[]; after?: TransformerFactory<SourceFile>[]; afterDeclarations?: TransformerFactory<SourceFile>[]; }
Would you like to document it?
@johnnyreilly Sure!
Detailed Description
I'm writing typescript compiler plugin that is using ts.Program and ts.TypeChecker, when project is runned in webpack watch (serve) mode and without ttypescript compiler - TransformerFactory function is called only once (on the start of webpack process), it's causing problems, because ts.Program.getSourceFiles() always returning initial version of source files, same as ts.TypeChecker always referring to the initial version of project
Expected Behaviour
I see few possible solutions here:
Actual Behaviour
TransformerFactory hold reference to the old (outdated) ts.Program instance, and since we're acquiring ts.TypeChecker from the ts.Program - we're also receiving outdated ts.TypeChecker
Steps to Reproduce the Problem
Location of a Minimal Repository that Demonstrates the Issue.
https://github.com/artem1458/ts-loader-old-tsprogram-instance
Also, here is the video with reproducing
https://github.com/TypeStrong/ts-loader/assets/33227963/7731ac4e-7eb0-4781-8130-f7c24bdd09bb