markdown-to-jsx icon indicating copy to clipboard operation
markdown-to-jsx copied to clipboard

Cannot access ambient const enums when 'isolatedModules' is enabled.

Open stevemckenzie opened this issue 1 year ago • 4 comments

You currently cannot use RuleType in any conditions if you have isolatedModules enabled.

stevemckenzie avatar Jan 18 '24 16:01 stevemckenzie

Hmm, what's the fix? I don't use isolatedModules in the tsconfig.json for this library

quantizor avatar Mar 13 '24 18:03 quantizor

Hi there,

I'm also encountering this issue, both in my source code when e.g. checking the RuleType of a given node:

Cannot access ambient const enums when 'isolatedModules' is enabled. ts(2748)

But more importantly when running tests with Jest, tests of code involving RuleType fail with the following error:

TypeError: Cannot read properties of undefined (reading 'htmlBlock') Jest

FYI, I'm using rsbuild & SWC.

From what I could gather, the official recommendation from TypeScript is to completely avoid the use of const enums, including publishing ambient const enums: https://blog.beraliv.dev/2022-09-10-with-or-without-enums#ambient-const-enum-pitfalls.

Perhaps it would be worth considering converting RuleType to a simple object instead of an enum?

Thanks for this library, it's really great that it's so small!

roger-schaer avatar May 29 '24 07:05 roger-schaer

Perhaps it would be worth considering converting RuleType to a simple object instead of an enum?

Yeah, I think that's the way to go. Would you be interested in submitting a PR? Have a bunch of life stuff going on atm so not sure when I will be able to work on this.

quantizor avatar May 29 '24 12:05 quantizor

Hello @quantizor, sure I can take a look, also quite busy but I think it could be worth it! I'll try to tackle it in the coming weeks and keep you updated on my progress.

roger-schaer avatar Jun 12 '24 14:06 roger-schaer

Hi there @quantizor, sorry for the long wait, but I finally had some time to look into refactoring the const enum for the RuleType into an object. I created a PR here : https://github.com/quantizor/markdown-to-jsx/pull/594

It would be great if you could have a look, the changes are fairly minor and should not impact the usage of the library at all.

Let me know what you think, I hope this approach makes sense and can make the library easier to integrate with different bundling setups.

roger-schaer avatar Jul 04 '24 14:07 roger-schaer