{"id":19028157,"url":"https://github.com/anilanar/gbd","last_synced_at":"2025-06-19T22:37:27.435Z","repository":{"id":43962404,"uuid":"254639293","full_name":"anilanar/gbd","owner":"anilanar","description":"Print and return the value of a given expression for quick and dirty debugging.","archived":false,"fork":false,"pushed_at":"2023-07-11T02:52:27.000Z","size":811,"stargazers_count":3,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-13T13:16:49.332Z","etag":null,"topics":["babel","babel-macro","debug","javascript","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anilanar.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-10T13:18:26.000Z","updated_at":"2022-01-24T10:07:51.000Z","dependencies_parsed_at":"2023-02-05T04:32:32.026Z","dependency_job_id":null,"html_url":"https://github.com/anilanar/gbd","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anilanar%2Fgbd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anilanar%2Fgbd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anilanar%2Fgbd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anilanar%2Fgbd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anilanar","download_url":"https://codeload.github.com/anilanar/gbd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250456864,"owners_count":21433722,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["babel","babel-macro","debug","javascript","typescript"],"created_at":"2024-11-08T21:10:06.294Z","updated_at":"2025-04-23T14:48:19.502Z","avatar_url":"https://github.com/anilanar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐸 `gbd.macro`\n\n`gbd.macro` is a [babel plugin macro](https://github.com/kentcdodds/babel-plugin-macros) that \"prints and returns the value of a given expression for quick and dirty debugging\". It is a shameless port of rust's `dbg!` macro.\n\n`gbd.macro` is Typescript ready!\n\n---\n\n## How to use\n\n```\nnpm install gbd.macro --save-dev\n```\n\n```\nyarn add gbd.macro -D\n```\n\n## Examples\n\n```typescript\nimport { gbd } from 'gbd.macro';\n\nfunction trimAll = (strings: string[]) =\u003e strings.map(str =\u003e gbd(str.trim()));\n\nconsole.log(\n    \"Result: \",\n    trimAll([\" hi \", \" everyone! \"]).join(' ')\n);\n```\n\n```\n# Prints\n\n\n\u003e str.trim()\n= \"hi\"\n\n\u003e str.trim()\n= \"everyone\"\n\n\"Result: hi everyone!\n```\n\n---\n\n```typescript\nimport { gbd } from \"gbd.macro\";\n\nconst a = 2;\nconst b = gbd(a * 2) + 1;\n\nb === 5; // true\n```\n\n```\n# Prints\n\n\u003e a * 2\n= 4\n```\n\n---\n\n```typescript\nimport { gbd } from \"gbd.macro\";\n\nfunction foo(n: number) {\n  if (gbd(n / 4) === 0) {\n    // Do something\n  }\n}\n\nfoo(3);\n```\n\n```\n# Prints\n\n\u003e n / 4\n= 0.75\n```\n\n---\n\n```typescript\nimport { gbd } from 'gbd.macro';\n\nfunction factorial(n: number): number {\n    if gbd(n \u003c= 1) {\n        return gbd(1);\n    } else {\n        return gbd(n * factorial(n - 1))\n    }\n}\n\ngbd(factorial(4));\n```\n\n```\n# Prints\n\n\u003e n \u003c= 1\n= false\n\n\u003e n \u003c= 1\n= false\n\nn \u003c= 1\n= false\n\nn \u003c= 1\n= true\n\n\u003e 1\n= 1\n\n\u003e n * factorial(n - 1)\n= 2\n\n\u003e n * factorial(n - 1)\n= 6\n\n\u003e n * factorial(n - 1)\n= 24\n\n\u003e factorial(4)\n= 24\n```\n\n---\n\n## How it works\n\nWhen you use `gbd.macro`, the following transformation happens:\n\n```\nimport { gbd } from 'gbd.macro';\n\ngbd(1 + 2);\n\n      ↓ ↓ ↓ ↓ ↓ ↓\n\nimport { gbd } from 'gbd';\n\ngbd(1 + 2, \"1 + 2\");\n```\n\n`gbd` is implemented roughly as follows:\n\n```javascript\nimport format from \"pretty-format\";\n\nexport function gbd(val, expr) {\n  console.debug(`\u003e ${expr}\\n= ${format(val)}`);\n  return val;\n}\n```\n\n---\n\n## Inspiration\n\n- A [tweet](https://twitter.com/frontsideair/status/124778767098343014) from [Fatih Altinok](https://twitter.com/frontsideair).\n\n- [rust's dbg!](https://doc.rust-lang.org/std/macro.dbg.html).\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanilanar%2Fgbd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanilanar%2Fgbd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanilanar%2Fgbd/lists"}