[oden] Explain myself.

This commit is contained in:
John Doty 2023-09-16 22:54:57 -07:00
parent c02eb25873
commit eb9fed759a

View file

@ -44,3 +44,25 @@ See above about being abandoned: we have small patches in place to e.g. expose i
#### My Own Bindings #### My Own Bindings
The other bindings are maddeningly incomplete, and don't expose features I want to expose out of QuickJS. The other bindings are maddeningly incomplete, and don't expose features I want to expose out of QuickJS.
### TypeScript
I'm using `deno_ast` to parse typescript at load time and "transpile" to javascript before loading.
`deno_ast` is built on swc, which I really really don't like very much, but my other options are:
1. Actually use the typescript compiler.
This is a neat idea but involves loading the compiler into QuickJS (which requires some patches to tsc since qjs is not node).
Also the typescript compiler is SLOW (especially when run in QJS) and finicky.
But this would be a full-fidelity option for sure.
2. Use tree-sitter to parse the typescript and strip the types out myself.
The tree-sitter parser is fast and gives me everything with full fidelity.
This *also* has the nice side-effect of letting me edit the source file in place, so source maps aren't a problem.
The downside is that finding every part of TS that has to be cut out to make JS is time consuming and error prone and I don't want to do it, particularly.
3. Parse Typescript myself.
I can write a parser, sure, doesn't bother me, but the syntax for typescript is not formally documented anywhere.
And it has the same problem as #2 when it comes time to emit JS.
So for now, I stick with `deno_ast`.
It does what I need it to do.