guybedford / es-module-lexer

Low-overhead lexer dedicated to ES module parsing for fast analysis
MIT License
912 stars 47 forks source link

`parse` returns a promise although the type does not indicate so #155

Open altinokdarici opened 1 year ago

altinokdarici commented 1 year ago

In parse.ts file, the blow code snippet returns a promise.

 if (!wasm)
    // actually returns a promise if init hasn't resolved (not type safe).
    // casting to avoid a breaking type change.
    return init.then(() => parse(source)) as unknown as ReturnType<typeof parse>;

This type hack causes issues on the consumption side. We call the parse function without awaiting as it's indicated by type system. However, we figured that parse may return Promise in the run time.

guybedford commented 12 months ago

The function is supposed to be synchronous if you've awaited init, but if you haven't awaited init it should be async.

I think this was changed in the TypeScript migration. I personally like having the sync version, so would suggest we change the code to match the types like:

if (!initialized)
  return init.then(() => ...);
// ... parse