Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/david-kunz/derive-type
Derive types dynamically by running tests to capture value combinations
https://github.com/david-kunz/derive-type
javascript type-generation typescript
Last synced: about 2 months ago
JSON representation
Derive types dynamically by running tests to capture value combinations
- Host: GitHub
- URL: https://github.com/david-kunz/derive-type
- Owner: David-Kunz
- License: mit
- Created: 2022-08-20T07:43:42.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-09-04T11:06:55.000Z (over 2 years ago)
- Last Synced: 2024-04-24T04:11:59.126Z (8 months ago)
- Topics: javascript, type-generation, typescript
- Language: JavaScript
- Homepage:
- Size: 85 KB
- Stars: 46
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Derive Type
Generate [TypeScript](https://www.typescriptlang.org/) type definitions based on function invocations and embed them as [JSDoc](https://jsdoc.app/) comments in your JavaScript code.
## Demo
https://user-images.githubusercontent.com/1009936/188266007-269ee08a-392c-4dfe-af80-444059ebba39.mov
## Installation
```bash
npm i -D derive-type
```## Simple Example
Original source code:
```js
// main.jsfunction myFunction(x, y) {
console.log(x, y)
}myFunction(1, 2)
```Add this function call at the top of your function body:
```js
// main.jsfunction myFunction(x, y) {
require('derive-type')(x, y) // <- ADD THIS
console.log(x, y)
}myFunction(1, 2)
```Then invoke the binary with the code to trigger the function invocations:
```bash
npx derive-type node main.js
```This will generate the [TypeScript](https://www.typescriptlang.org/) definition, insert the [JSDoc](https://jsdoc.app/) snippet
and remove the call to `derive-type`:```js
// main.js/** @type { import("/var/folders/ls/xxxx/T/derive-type-gen/KC9Vc2Vycy9kMDY1MDIzL3Byb2plY3RzL0Rldk9uRHV0eS9kZXJpdmUtdHlwZS10ZXN0L3Rlc3QuanM6NDoyNSk=").GEN } Generated */
function myFunction(x, y) {
// now you know that `x` and `y` are of type `number`
console.log(x, y)
}myFunction(1, 2)
```## Notes
- The function invocations don't need to be in the same file, usually they are based on tests:
```bash
npx derive-type npm test
```
- The generated types are based on the merged input of all function invocations.
- The function definition must begin in a new line.
- You can also install `derive-type` globally, then you must use the path of your global package, e.g. `require("/usr/local/lib/node_modules/derive-type/")`.
- The generated types are located in `os.tmpdir()` (changeable via `DERIVE_TYPE_FOLDER`).
- The generated types are deleted after 5 days (changeable via `DERIVE_TYPE_MAX_AGE_DAYS`).
- Debugging output can be enabled by setting `DERIVE_TYPE_DEBUG` to true.
- You can find some example type generations [in the test file](https://github.com/David-Kunz/derive-type/blob/main/tests/derive.test.js).## Introduction Video
[![](https://img.youtube.com/vi/gdz_X0b5SnM/0.jpg)](https://youtu.be/gdz_X0b5SnM")