{"id":15117111,"url":"https://github.com/coderaiser/escover","last_synced_at":"2026-05-16T21:09:54.257Z","repository":{"id":57227452,"uuid":"445767541","full_name":"coderaiser/escover","owner":"coderaiser","description":"🎩 Coverage for EcmaScript Modules","archived":false,"fork":false,"pushed_at":"2026-05-15T12:55:23.000Z","size":276,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-15T14:17:27.038Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coderaiser.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-08T08:41:49.000Z","updated_at":"2026-05-15T12:55:27.000Z","dependencies_parsed_at":"2022-09-12T17:00:23.487Z","dependency_job_id":"707ea967-ba5f-49b0-a6e0-f4a277beeaa5","html_url":"https://github.com/coderaiser/escover","commit_stats":{"total_commits":311,"total_committers":3,"mean_commits":"103.66666666666667","dds":"0.12218649517684887","last_synced_commit":"8598a16db9aa2c67dd1a7b4baadd1b545e008607"},"previous_names":[],"tags_count":109,"template":false,"template_full_name":null,"purl":"pkg:github/coderaiser/escover","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderaiser%2Fescover","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderaiser%2Fescover/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderaiser%2Fescover/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderaiser%2Fescover/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coderaiser","download_url":"https://codeload.github.com/coderaiser/escover/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderaiser%2Fescover/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33115732,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"ssl_error","status_checked_at":"2026-05-16T18:38:29.903Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-09-26T01:45:50.511Z","updated_at":"2026-05-16T21:09:54.252Z","avatar_url":"https://github.com/coderaiser.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# 🎩ESCover [![License][LicenseIMGURL]][LicenseURL] [![NPM version][NPMIMGURL]][NPMURL] [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Coverage Status][CoverageIMGURL]][CoverageURL]\n\n[NPMIMGURL]: https://img.shields.io/npm/v/escover.svg?style=flat\n[BuildStatusURL]: https://github.com/coderaiser/escover/actions?query=workflow%3A%22Node+CI%22 \"Build Status\"\n[BuildStatusIMGURL]: https://github.com/coderaiser/escover/workflows/Node%20CI/badge.svg\n[LicenseIMGURL]: https://img.shields.io/badge/license-MIT-317BF9.svg?style=flat\n[NPMURL]: https://npmjs.org/package/escover \"npm\"\n[LicenseURL]: https://tldrlegal.com/license/mit-license \"MIT License\"\n[CoverageURL]: https://coveralls.io/github/coderaiser/escover?branch=master\n[CoverageIMGURL]: https://coveralls.io/repos/coderaiser/escover/badge.svg?branch=master\u0026service=github\n\nCoverage for EcmaScript Modules based on 🐊[**Putout**](https://github.com/coderaiser/putout) and [loaders](https://nodejs.org/dist/latest-v20.x/docs/api/esm.html#loaders).\n\n## Why another coverage tool?\n\nWhen you want to use `ESM` in `Node.js` without transpiling to `CommonJS` (that's what `jest`, `ava`, `tap` does),\nyou have a couple problems to solve.\n\n### 🤷‍ What test runner does no transpiling to `CommonJS`?\n\n☝️ that's easy! 📼 [**Supertape**](https://github.com/coderaiser/supertape) supports `ESM` from the box;\n\n### 🤷‍ How to get coverage when `nyc` doesn't supported?\n\n☝️ `c8` could help, but [no](https://github.com/coderaiser/c8-reproduce) it supports no `query parameters`\nwhich are needed to load module again, and apply mocks.\n\n### 🤷‍  How to get coverage when mocks are used?\n\n☝️ Use 🎩**ESCover**! It supports loaders, `ESM` and collects coverage as a loader!\n\n### 🤷‍  What with [`coveralls`](https://coveralls.io/)? Does [`lcov`](https://github.com/StevenLooman/mocha-lcov-reporter) supported?\n\n☝️ Sure! `coverage/lcov.info` is main coverage file for 🎩**ESCover**.\n\n## Install\n\n```\nnpm i escover -D\n```\n\nRun to collect and show coverage:\n\n```sh\nescover npm test\n```\n\n## Comparison with `c8`\n\nCheck out the real example from [wisdom](https://github.com/coderaiser/wisdom). There is next uncovered code:\n\n```js\nimport {jessy} from 'jessy';\n\nexport default (info) =\u003e typeof jessy('publishConfig.access', info) === 'undefined';\n```\n\n`c8` shows three columns with 100% and one with 0%.\n\n\u003cimg width=\"584\" alt=\"image\" src=\"https://user-images.githubusercontent.com/1573141/169064257-579d6770-095e-475b-a7bc-8275849c8dc2.png\"\u003e\n\nAnd here is what you will see with 🎩**ESCover**:\n\n\u003cimg width=\"403\" alt=\"image\" src=\"https://user-images.githubusercontent.com/1573141/169064550-62aa2398-b370-496f-8c8b-418d0d2d6004.png\"\u003e\n\nSo if you need more accurate code with no bullshit green 100%, use 🎩**ESCover** 😉.\n\n## Config\n\n`exclude` section of configuration file `.nyrc.json` supported.\n\n## How it looks like?\n\nWhen everything is covered:\n\n![image](https://user-images.githubusercontent.com/1573141/149822261-ff9bc3b4-6ee4-452c-9ada-3cc922b630ec.png)\n\n## What formatters exists?\n\nThere is two types of formatters:\n\n- `lines` adds links to each line;\n- `files` shows information in table;\n\nYou can choose formatter with `ESCOVER_FORMAT` env variable.\n\n## Env\n\nIf you want to disable coverage on status code without erroring, use `ESCOVER_SUCCESS_EXIT_CODE`:\n\n```js\nimport {SKIPPED} from 'supertape/exit-codes';\n\nconst env = {\n    ESCOVER_SUCCESS_EXIT_CODE: SKIPPED,\n};\n\nexport default {\n    test: () =\u003e [env, `escover tape 'test/**/*.js' 'lib/**/*.spec.js'`],\n};\n```\n\n## What should I know about `lcov`?\n\nFormat used by 🎩**ESCover** located in `coverage/lcov.info`.\n\n- ☝️ *[`lcov`](https://github.com/linux-test-project/lcov) was created in `2002`, twenty years ago.*\n- ☝️ *Linux kernel developers created it to know what is going on with the coverage.*\n- ☝️ *It's written in `PERL` and has text based format.*\n- ☝️ *This is most popular coverage format of all times supported by a lot of tools (like [coveralls](https://coveralls.io)).*\n\nWhen you run your `ESM` application with:\n\n```sh\nescover npm test\n```\n\nYou will receive something similar to:\n\n```sh\nSF:/Users/coderaiser/escover/lib/transform.js\nDA:1,1\nDA:3,1\nDA:7,1\nDA:9,1\nDA:10,1\nDA:12,1\nDA:24,1\nDA:25,1\nDA:27,1\nDA:28,1\nDA:29,1\nDA:32,1\nend_of_record\n```\n\nWhere:\n\n- `SF` - is path to source;\n- `DA` - is line number, and count of running;\n- `end_of_record` latest recorded for current file entry;\n\nThe only thing that is differ from `lcov`: counters are `0` or `1`, if you have a reason to use \"real\" counters [create an issue](https://github.com/coderaiser/escover/issues/new).\n\nIt can be added in one line of code, but I see no reason why it can be useful 🤷‍♂️.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoderaiser%2Fescover","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoderaiser%2Fescover","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoderaiser%2Fescover/lists"}