Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/privatenumber/dbgr
Lightweight debugger for Node.js
https://github.com/privatenumber/dbgr
alternative debugger lightweight nodejs
Last synced: 7 days ago
JSON representation
Lightweight debugger for Node.js
- Host: GitHub
- URL: https://github.com/privatenumber/dbgr
- Owner: privatenumber
- License: mit
- Created: 2021-04-18T02:58:50.000Z (over 3 years ago)
- Default Branch: develop
- Last Pushed: 2021-04-21T01:24:09.000Z (over 3 years ago)
- Last Synced: 2024-10-19T01:11:13.952Z (16 days ago)
- Topics: alternative, debugger, lightweight, nodejs
- Language: TypeScript
- Homepage:
- Size: 43.9 KB
- Stars: 44
- Watchers: 4
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
**dbgr** is a lightweight debugger function that pauses your script, watches the current file for any changes and only re-runs the specific code that's passed in to it. It's just like `debugger` but requires no IDE or browser dev-tools integrations.
If you like this project, please star it & [follow me](https://github.com/privatenumber) to see what other cool projects I'm working on! ❤️
## 🙋♂️ Why?
You can set breakpoints in Node.js with breakpoints or `debugger` statements, but it could be a hassle to set up and can slow down your script.When you're debugging something heavy with slow startup (eg. server, headless Chrome, etc), you want to use something simple & light to debug.
## 🚀 Install
```sh
npm i -D dbgr
```## 🚦 Quick Setup
```js
import dbgr from 'dbgr'// Some async process
(async () => {// ...
await dbgr((resume) => {
console.log('The debugger has started');// Write code here and hit save to
// automatically re-run this function// Call resume() and save to resume the debugger
// ↓ The eval below is necessary for this to work
}, _ => eval(_))
})();
```## 🙋♀️ FAQ
### How does it work?
Upon invoking dbgr, it detects the file path of the caller by using [V8 stack trace API](https://v8.dev/docs/stack-trace-api) via [callsites](https://github.com/sindresorhus/callsites). It then watches the file for changes using [`fs.watch`](https://nodejs.org/docs/latest/api/fs.html#fs_fs_watch_filename_options_listener). When a change is detected, it parses the source code using [acorn](https://github.com/acornjs/acorn) to extract the specific function passed into dbgr. It then passes it into the `_ => eval(_)` to run in the original context.### Does it work in TypeScript files?
Yes. While the AST parser acorn is designed for ES parsing, TS files can be loosely parsed via [acorn-loose](https://github.com/acornjs/acorn/tree/master/acorn-loose), and the content inside the dbgr hook has the types stripped via [esbuild](https://esbuild.github.io/) for it to be "safely" `eval()`'d by the JavaScript runtime.