Pre-Compiler Plugin Proposal #38736
Pre-Compiler Plugin Proposal #38736
Comments
Related: #16607 |
(This was to a now deleted comment, so I've edited it up a bit ) WRT this issue I wouldn't expect anything quickly in the short term, what plugin support looks like in TS is still a pretty constant internal debate with strong opinions on many sides of what support looks like. This is why it's shown up a few times on roadmapping but tended to never get past experimental internal demos. That means we're also real cautious of talking about it because we still don't know what it'll look like, and how we can be sure it doesn't affect perf at the kind of scale that we'd expect to see people use plugins at. |
@orta If we assume that transformation to typescript format is a pure function, then we can easily cache it. In this situation, the overhead could be noticeable on the initial compilation, but not in the watch mode (as we rebuild one or a few files). Currently, users use some workarounds to make this work which probably is much slower than we could achieve with plugins. If TypeScript would provide plugins API, keeping the good performance of plugins would be a responsibility of plugin's maintainers - not the TypeScript team. In this context, I don't see performance blockers to move forward but I guess there are other factors that I didn't take into account |
@orta Do you have any update regarding this feature request? :) |
Nope, no updates, other than the move to a node factory API #35282 was long considered a blocker around this |
Thanks for the update. I suppose you want to use AST as a format that a plugin should produce. That makes sense - it will be faster. I was also thinking about that but I was afraid you will not want to make AST factories API public. Is there anything I could do to move this forward? I could implement it if you are busy with other features :) |
Afraid not, it is still undecided by the team if and what the extent of plugin support looks like in the TypeScript compiler - plugins systems are not normal for compilers. |
Ok, that's a bummer
That's an interesting claim |
your claim is not true as there is a lot of compilers that support plugins, most notable one is gcc
there is more, but this short list should be enough @orta do you have any updates about compile time plugins? this feature was requested few years ago |
No updates |
Search Terms
Extension, Plugin, Vue, Custom extensions
I found some issues but no proposal :/
Suggestion
Hi! I'm an author of the
fork-ts-checker-webpack-plugin
. Last few months I was busy with rewriting this plugin to pay off the technological debt.One of the features that this plugin provides is support for the Vue.js Single File Components. I was able to implement it but in order to work with the
Watch
program andSolutionBuilder
I had to do some workarounds. It's because there is an assertion in the TypeScript source code that files cannot have a custom extension.The main issue with this approach is that you have to implement these workarounds in every TypeScript's API client and they can behave differently (like
appendTsSuffixTo
in thets-loader
). I know that there are already Language Service Plugins, but they don't work if you use different API, likeWatch
.The proposal
A new type of TypeScript plugins that can pre-compile custom source code to the format that TypeScript understands. The simplified interface would be:
This architecture would allow adding new plugin types in the future (so we could add
ModuleResolutionPlugin
to support Yarn PnP in the future)The maintenance cost of this feature should be low because the exposed API is pretty simple.
There is a point in the TypeScript Design Goals
If you think that this feature is incompatible with this point, we could limit it to emitting only
.d.ts
files.I could try to implement it, but first I need to know if it's something that you would like to add to the TypeScript and if this API is a good direction :)
Use Cases
I imagine that community would create
PreCompilerPlugin
s for a lot of use cases. For example:vue-typescript-plugin
- support for the Single File Componentsmdx-typescript-plugin
- support for embedded TypeScript in the MDX filesgraphql-typescript-pluging
- support for generation of GraphQL types / clients in the runtime (so we don't have to use generators anymore)css-modules-typescript-plugin
- support for typed css modules (instead ofdeclare module '*.css';
)Examples
tsconfig.json
node_modules/vue-typescript-plugin/index.ts
It's a pseudo-code based on the
fork-ts-checker-webpack-plugin
implementation. It adds support for the.vue
files.Checklist
My suggestion meets these guidelines:
The text was updated successfully, but these errors were encountered: