-
Notifications
You must be signed in to change notification settings - Fork 204
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Generate TypeScript definitions from source #189
base: main
Are you sure you want to change the base?
Conversation
1195d8a
to
cac159f
Compare
@mattt I've rebased this on main to remove the dependency on the singleton branch. The only files I'm not 100% sure about is the changes to |
Gonna close and reopen to try and trigger the tests... |
da24d4e
to
207f0b9
Compare
@mattt spent some time getting this up-to-date, would be good to get it in before we make any further API changes (like the deployments branch). |
bb9dc45
to
43678dd
Compare
We now have basic and `:integration` flavors of the common commands `lint` and `test` as well as an `:all` flavor that will run everything. We also now ensure that the types are built before running integration tests as well as part of the packaging workflow via `prepack`.
43678dd
to
6b6eb15
Compare
Currently our types are hand written. They differ from the jsdoc types in the source code in that a) they're missing documentation and b) the types are often inconsistent. Rather than manually sync the two it felt simpler to use
tsc
to generate the types for us from the JS source code and reduce the burden of manually keeping the types up-to-date with the source code.This PR now uses the type annotations found in the jsdoc for all of the files and generates a
./dist/types
directory. This has the benefits of:The drawbacks are mostly that it's very easy to mess up the type annotations which will then fail silently and default to
any
, which is about on par with handwriting them anyway.To mitigate this we do our best to unit test the types in the
./integrations/typescript/types.test.ts
file which creates typed instances of the main primitives and will cause tsc errors if the types become out of sync. TheAssertFalse
helper allows us to catch cases where we've accidentally messed up the@typedef
export in index.js.