You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First, I want to say that your work on libpg-query-wasm is awe-inspiring! I maintain an open source plugin called SafeQL which heavily relies on pg-parser. Currently, it uses libpg-query but due to incompatibility with Windows, I was looking at your implementation.
While trying to migrate the code, I've stumbled across some issues that are related to TypeScript types:
1. Node's properties should be T | undefined instead of T | null | undefined
While I assume it's auto-generated from protobuf, All of the properties of pg_query.INode are both nullable and undefined-able, which is incorrect in runtime. They are never nullable, but only undefined-able:
2. Node properties are typed as their interfaces rather than their classes
For instance, when trying to access node.aConst, it will be typed as (property) pg_query.INode.aConst?: pg_query.IA_Const while it should be typed as pg_query.A_Const. Due to this incorrect type, TypeScript will throw an error:
while in runtime it should be fine:
The text was updated successfully, but these errors were encountered:
Thanks for the feedback! I agree the current types need improvement and it's a priority for this library.
I've tested several protobuf TypeScript libraries including protobufjs-cli (the current library), protoc-gen-ts (has an issue) and ts-proto (spike here). None are really ideal. I'm open to suggestions or contributions for better alternatives.
First, I want to say that your work on
libpg-query-wasm
is awe-inspiring! I maintain an open source plugin called SafeQL which heavily relies on pg-parser. Currently, it uses libpg-query but due to incompatibility with Windows, I was looking at your implementation.While trying to migrate the code, I've stumbled across some issues that are related to TypeScript types:
1. Node's properties should be
T | undefined
instead ofT | null | undefined
While I assume it's auto-generated from protobuf, All of the properties of
pg_query.INode
are both nullable and undefined-able, which is incorrect in runtime. They are nevernullable
, but onlyundefined
-able:2. Node properties are typed as their interfaces rather than their classes
For instance, when trying to access
node.aConst
, it will be typed as(property) pg_query.INode.aConst?: pg_query.IA_Const
while it should be typed aspg_query.A_Const
. Due to this incorrect type, TypeScript will throw an error:while in runtime it should be fine:
The text was updated successfully, but these errors were encountered: