But what I wanted to comment on actually was eslint and how it nudged me down the path of ESM support. I had to fight and fight to get it to work with my Typescript project. The resolution proposed by the tool was strongly biased towards re-structuring my project away from commonjs modules towards the newer ESM. But when I started down that rabbit hole I found it frustratingly hostile to TypeScript based projects. I was playing whack-a-mole between my package.json, tsconfig, my vite config, my eslint config. Most of it had to do with ts-node and the esm module loader (or something). Eventually it wanted me to rename all of my imports with .js extensions?
In the end I just gave up and went back to commonjs and added strategic "ignores". The modern JS ecosystem has mostly been turn-key, but this was a remembrance of the old days where it felt necessary to wave dead chickens over things to get them to work. I would seriously consider BiomeJS in the (near) future if it's Typescript story was better than what I've experienced with eslint.
And as for ESM, right now it is leaving a really bad taste in my mouth. I will have to dedicate some time soon to figure out how to setup a very basic TypeScript project using ESM and incorporating the basic tools that I require.