Skip to content
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

feat: switch to using Node's built in coverage #22

Merged
merged 5 commits into from Sep 10, 2018
Merged

feat: switch to using Node's built in coverage #22

merged 5 commits into from Sep 10, 2018

Conversation

bcoe
Copy link
Owner

@bcoe bcoe commented Sep 8, 2018

switches to using Node's built in coverage, which we can enable by setting NODE_V8_COVERAGE rather than kicking off an inspector session.

screen shot 2018-09-08 at 3 51 40 pm

I'm beyond thrilled by how much better this implementation is working.

BREAKING CHANGE: switches to using NODE_V8_COVERAGE

CC: @demurgos, @schuay

@bcoe bcoe requested a review from TimothyGu September 8, 2018 22:48
@bcoe
Copy link
Owner Author

bcoe commented Sep 8, 2018

@@ -28,6 +28,10 @@ yargs
default: './coverage',
describe: 'directory to output coverage JSON and reports'
})
.option('resolve', {
default: '',
describe: 'resolve paths to alternate base directory'
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this will be required for the Node.js codebase itself.

@bcoe
Copy link
Owner Author

bcoe commented Sep 8, 2018

see also https://github.com/bcoe/v8-coverage-merge, which handles merging coverage from multiple inspector sessions (this will be necessary for Node.js' test suite).

This was referenced Sep 8, 2018
lib/report.js Outdated
map.merge(script.toIstanbul())
} catch (err) {
// most likely this was an internal Node.js library.
if (err.code !== 'ENOENT' && err.code !== 'EISDIR') throw err
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TimothyGu any thoughts about how to easily tell whether the coverage outputted was for one of Node.js' built in libraries, e.g., internal/inspector.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about checking whether the URL was an absolute path or not?

@demurgos
Copy link
Contributor

demurgos commented Sep 9, 2018

This sounds great but I'll have to take a deep look at it.
It's nice to have a solution natively supported by Node, but using the inspector session also has advantages.
spawn-wrap is awful but it enables the cleanest c8 implementation IMO: no temporary files, no concurrence issues (can run multiple coverage at once), enables a Node API (lib usage), no messing with exit handlers, etc. (demurgos/c8#next)
Using the env variable (NODE_V8_COVERAGE) is more reliable than spawn wrap, but it brings back a few issues (mainly the fact that the c8 cli and covered process cannot communicate directly but through files stored in a temporary directory).

(This is just a quick comment after reading the first message and checking the Node PR to add NODE_V8_COVERAGE, I did not look at the details yet.)

@bcoe
Copy link
Owner Author

bcoe commented Sep 9, 2018

@demurgos spawn-wrap and signal-exit are essentially end of life and will not have much support any longer.

Behind the scenes Node.js is kicking off the same inspector session that c8 was spawning, but in a much more reliable manner because it happens before the isolate executes and there is no need to pause the inspector; the inspector dance was bug prone, didn’t work for a variety of edge-cases (non-zero application exit codes being a major issue, which c8 handled even worse than nyc).

With regards to concurrency, coverage files are written by Node.js with a unique-identifier and c8 merges output from multiple subprocesses, so this will not be an issue.

With regards to temporary files, this isn’t an issue in my opinion: nyc, c8, jest, etc., already use temporary files during the process of aggregating test coverage. One lovely side-effect of retiring spawn-wrap is that we actually eliminate the need for temporary binary files; spawn wrap facilitates its behavior by writing temporary binaries to disk that are executed rather than process.execPath.

I recommend forking c8, if you’d like to continue interacting with the inspector directly in some cases — maybe with a more explicit name like “inspector-coverage”; I’d happily link to this in the README.

@bcoe
Copy link
Owner Author

bcoe commented Sep 9, 2018

@demurgos I'm going to take my thoughts to email with you, let's work together to make sure your hard work on the next branch of c8 isn't taken for granted. Even though on c8 itself, I'd like to migrate away from using this approach for test coverage.

Copy link

@addaleax addaleax left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks very nice! :)

lib/report.js Outdated
map.merge(script.toIstanbul())
} catch (err) {
// most likely this was an internal Node.js library.
if (err.code !== 'ENOENT' && err.code !== 'EISDIR') throw err
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about checking whether the URL was an absolute path or not?

@bcoe bcoe merged commit 3c1b92b into master Sep 10, 2018
@bcoe bcoe deleted the node-only branch September 10, 2018 18:36
@bcoe
Copy link
Owner Author

bcoe commented Sep 10, 2018

I need this for some Node.js mentorship work I'm doing tonight, so I've gone ahead and landed. I'm still open to more conversation about whether we maintain the old approach in another library.

github-actions bot pushed a commit to prantlf/c8 that referenced this pull request Apr 2, 2023
# 1.0.0 (2023-04-02)

### Bug Fixes

* `--all` now respects `--extension` flag. ([bcoe#357](https://github.com/prantlf/c8/issues/357)) ([a5deb27](a5deb27))
* add missing space in text ([bcoe#245](https://github.com/prantlf/c8/issues/245)) ([efe6d04](efe6d04))
* address bugs with source remapping on Windows ([bcoe#301](https://github.com/prantlf/c8/issues/301)) ([c817902](c817902))
* address file:// issue with CJS ([bcoe#39](https://github.com/prantlf/c8/issues/39)) ([d4f9cab](d4f9cab))
* all flag not propagated to check-coverage command ([bcoe#188](https://github.com/prantlf/c8/issues/188)) ([86eaf72](86eaf72))
* **config:** support configuration inheritance ([bcoe#343](https://github.com/prantlf/c8/issues/343)) ([e81ed5d](e81ed5d))
* **deps:** merging failed when the same script occurred multiple times in the same report ([bcoe#147](https://github.com/prantlf/c8/issues/147)) ([1ebcaf9](1ebcaf9))
* **deps:** update dependency find-up to v4 ([bcoe#119](https://github.com/prantlf/c8/issues/119)) ([c568d96](c568d96))
* **deps:** update dependency find-up to v5 ([bcoe#242](https://github.com/prantlf/c8/issues/242)) ([8a0cfd7](8a0cfd7))
* **deps:** update dependency furi to v2 ([bcoe#193](https://github.com/prantlf/c8/issues/193)) ([6b9af6e](6b9af6e))
* **deps:** update dependency rimraf to v3 ([bcoe#132](https://github.com/prantlf/c8/issues/132)) ([7601748](7601748))
* **deps:** update dependency v8-to-istanbul to v4 ([bcoe#167](https://github.com/prantlf/c8/issues/167)) ([97b9769](97b9769))
* **deps:** update dependency yargs to v14 ([bcoe#134](https://github.com/prantlf/c8/issues/134)) ([e49737f](e49737f))
* **deps:** update dependency yargs to v15 ([bcoe#164](https://github.com/prantlf/c8/issues/164)) ([e41a483](e41a483))
* **deps:** update dependency yargs to v16 ([bcoe#251](https://github.com/prantlf/c8/issues/251)) ([0436816](0436816))
* **deps:** update dependency yargs-parser to v13 ([bcoe#124](https://github.com/prantlf/c8/issues/124)) ([1eb3394](1eb3394))
* **deps:** update dependency yargs-parser to v14 ([bcoe#144](https://github.com/prantlf/c8/issues/144)) ([9b3d089](9b3d089))
* **deps:** update dependency yargs-parser to v15 ([bcoe#153](https://github.com/prantlf/c8/issues/153)) ([80153de](80153de))
* **deps:** update dependency yargs-parser to v16 ([bcoe#157](https://github.com/prantlf/c8/issues/157)) ([15746e5](15746e5))
* **deps:** update dependency yargs-parser to v17 ([bcoe#201](https://github.com/prantlf/c8/issues/201)) ([d730c63](d730c63))
* **deps:** update dependency yargs-parser to v18 ([bcoe#202](https://github.com/prantlf/c8/issues/202)) ([983de44](983de44))
* **deps:** update dependency yargs-parser to v19 ([bcoe#241](https://github.com/prantlf/c8/issues/241)) ([baa01df](baa01df))
* **deps:** update dependency yargs-parser to v20 ([bcoe#252](https://github.com/prantlf/c8/issues/252)) ([ae845f0](ae845f0))
* **deps:** update deps to address warning in cross-spawn ([bcoe#141](https://github.com/prantlf/c8/issues/141)) ([4b66221](4b66221))
* **deps:** update deps to latest ([bcoe#384](https://github.com/prantlf/c8/issues/384)) ([78eac8c](78eac8c)), closes [bcoe#375](https://github.com/prantlf/c8/issues/375)
* **deps:** v8-to-istanbul with fix for Windows paths ([bcoe#311](https://github.com/prantlf/c8/issues/311)) ([ef1b875](ef1b875))
* **deps:** v8-to-istanbul with patch for crasher ([bcoe#200](https://github.com/prantlf/c8/issues/200)) ([d4b7d80](d4b7d80))
* **deps:** v8-to-istnbul with fixes for Node 10/18 ([bcoe#392](https://github.com/prantlf/c8/issues/392)) ([d5f642a](d5f642a))
* do not override NODE_V8_COVERAGE if set ([bcoe#70](https://github.com/prantlf/c8/issues/70)) ([8bb67b0](8bb67b0))
* don't load JSON that does not look like coverage ([bcoe#146](https://github.com/prantlf/c8/issues/146)) ([a6481f1](a6481f1))
* escaping issue with cobertura reporter ([bcoe#203](https://github.com/prantlf/c8/issues/203)) ([e93747b](e93747b))
* exclude coverage of the CJS-ESM bridge from results ([bcoe#83](https://github.com/prantlf/c8/issues/83)) ([da2c945](da2c945))
* exit with code 1 when report output fails ([bcoe#92](https://github.com/prantlf/c8/issues/92)) ([a27b694](a27b694))
* file URL to system path conversion ([bcoe#46](https://github.com/prantlf/c8/issues/46)) ([e7f8cf2](e7f8cf2))
* fix package.json `test:snap` script to use cross-env ([bcoe#366](https://github.com/prantlf/c8/issues/366)) ([5d2981c](5d2981c))
* Fix usage of excludeAfterRemap not to set the coverage always to 100 ([9113449](9113449)), closes [bcoe#462](https://github.com/prantlf/c8/issues/462)
* float patch for branch/function coverage merge bug ([bcoe#56](https://github.com/prantlf/c8/issues/56)) ([1de0cca](1de0cca))
* HTML report now has correct source positions for Node >10.16.0 ([bcoe#125](https://github.com/prantlf/c8/issues/125)) ([c49fa7f](c49fa7f))
* ignore missing source maps in raw coverage output ([bcoe#233](https://github.com/prantlf/c8/issues/233)) ([eed98af](eed98af))
* make tests run on Windows ([bcoe#25](https://github.com/prantlf/c8/issues/25)) ([08e44d0](08e44d0))
* make tmp directory regardless of clean ([44d2185](44d2185))
* **perf:** cache `this.exclude.shouldInstrument` for improved performance ([bcoe#388](https://github.com/prantlf/c8/issues/388)) ([8b36f23](8b36f23))
* pin to functional version of spawn-wrap ([d1ced8c](d1ced8c))
* process coverage merging ([bcoe#37](https://github.com/prantlf/c8/issues/37)) ([67959b4](67959b4))
* regex flags in dependency were breaking Node 8 ([a9d9645](a9d9645))
* remove the unmaintained mkdirp dependency ([bcoe#91](https://github.com/prantlf/c8/issues/91)) ([a465b65](a465b65))
* snapshot ([7fd9e13](7fd9e13))
* support node@v15.x.x built-in modules ([bcoe#265](https://github.com/prantlf/c8/issues/265)) ([1b90a22](1b90a22))
* switch to mkdirp for Node 8 ([206b83f](206b83f))
* temporary files should be in tmp folder ([bcoe#106](https://github.com/prantlf/c8/issues/106)) ([64dd2e6](64dd2e6))
* tweak inspector event timing ([bcoe#6](https://github.com/prantlf/c8/issues/6)) ([01f654e](01f654e))
* **types:** add excludeAfterRemap and allowExternal  ([bcoe#297](https://github.com/prantlf/c8/issues/297)) ([e32a53f](e32a53f))
* Upgrade dependencies ([c288f5f](c288f5f))
* upgrade to @bcoe/v8-coverage with breaking regex dropped ([6c28e7f](6c28e7f))
* **v8-to-istanbul:** fixes shebang handling/ignore behavior ([bcoe#267](https://github.com/prantlf/c8/issues/267)) ([21cd41f](21cd41f))
* **v8-to-istanbul:** pull in fix for missing branches ([bcoe#258](https://github.com/prantlf/c8/issues/258)) ([eaffa78](eaffa78))
* **v8-to-istanbul:** revert off by one that broke TypeScript ([bcoe#262](https://github.com/prantlf/c8/issues/262)) ([81ab5b7](81ab5b7))
* we were not exiting with 1 if mkdir failed ([bcoe#89](https://github.com/prantlf/c8/issues/89)) ([fb02ed6](fb02ed6))

* feat!: use Node.js' source-map cache, to support tools like ts-node (bcoe#152) ([53bba15](53bba15)), closes [bcoe#152](https://github.com/prantlf/c8/issues/152)
* feat!: default temp directory to report directory (bcoe#102) ([8602f4a](8602f4a)), closes [bcoe#102](https://github.com/prantlf/c8/issues/102)

### Features

* `--100` ([bcoe#332](https://github.com/prantlf/c8/issues/332)) ([4205f2f](4205f2f))
* add --config option and documentation on options and configs ([bcoe#308](https://github.com/prantlf/c8/issues/308)) ([99436ef](99436ef))
* add --exclude-node-modules option ([bcoe#321](https://github.com/prantlf/c8/issues/321)) ([a4733c6](a4733c6))
* add --extension option ([bcoe#331](https://github.com/prantlf/c8/issues/331)) ([ff01cd8](ff01cd8))
* add --report-dir alias (for consistency with nyc) ([0dd1b04](0dd1b04))
* add --skip-full ([bcoe#287](https://github.com/prantlf/c8/issues/287)) ([8b01b63](8b01b63))
* add `skipFull` and `excludeNodeModules` to type definitions ([bcoe#417](https://github.com/prantlf/c8/issues/417)) ([b93b9c0](b93b9c0))
* add support for 1:1 source-maps ([bcoe#85](https://github.com/prantlf/c8/issues/85)) ([6ca4345](6ca4345))
* add support for ignoring lines, functions, and blocks ([bcoe#87](https://github.com/prantlf/c8/issues/87)) ([c66950e](c66950e))
* add thresholds for enforcing coverage percentage ([bcoe#59](https://github.com/prantlf/c8/issues/59)) ([70e8943](70e8943))
* adds --all functionality ([bcoe#158](https://github.com/prantlf/c8/issues/158)) ([2eb631e](2eb631e))
* adds support for 1:many source maps ([bcoe#238](https://github.com/prantlf/c8/issues/238)) ([dbf94a0](dbf94a0))
* adds TypeScript definitions ([d39801b](d39801b)), closes [bcoe#195](https://github.com/prantlf/c8/issues/195)
* **all:** handle base64 inline source maps ([bcoe#283](https://github.com/prantlf/c8/issues/283)) ([3f12dd4](3f12dd4))
* allow  --reports-dir to be configured ([bcoe#65](https://github.com/prantlf/c8/issues/65)) ([5ab31f5](5ab31f5))
* allow relative paths to be optionally included ([3806c79](3806c79))
* allow script wrapper length to be specified ([bcoe#51](https://github.com/prantlf/c8/issues/51)) ([a22c4e0](a22c4e0))
* first pass at functional prototype without subprocess support ([bcoe#5](https://github.com/prantlf/c8/issues/5)) ([9534f56](9534f56))
* foreground-child's done() method was not being called ([bcoe#82](https://github.com/prantlf/c8/issues/82)) ([fde596e](fde596e))
* implement Istanbul reporting ([bcoe#8](https://github.com/prantlf/c8/issues/8)) ([8e430bf](8e430bf))
* improve test assertions ([bcoe#28](https://github.com/prantlf/c8/issues/28)) ([522720e](522720e))
* introduce --exclude-after-remap flag ([bcoe#293](https://github.com/prantlf/c8/issues/293)) ([53c4234](53c4234)), closes [bcoe#224](https://github.com/prantlf/c8/issues/224)
* load .nycrc/.nycrc.json to simplify migration ([bcoe#100](https://github.com/prantlf/c8/issues/100)) ([bd7484f](bd7484f))
* playing around with initial implementation ([18f5471](18f5471))
* support --check-coverage for reports ([bcoe#60](https://github.com/prantlf/c8/issues/60)) ([b542930](b542930))
* support for instrumenting files outside of current working directory ([7e53a0e](7e53a0e))
* support ignore start/stop comment ([bcoe#273](https://github.com/prantlf/c8/issues/273)) ([90949fa](90949fa)), closes [bcoe#271](https://github.com/prantlf/c8/issues/271)
* support passing reporter options ([bcoe#423](https://github.com/prantlf/c8/issues/423)) ([bc347a9](bc347a9))
* switch to stderr and default port ([bcoe#7](https://github.com/prantlf/c8/issues/7)) ([bb117b7](bb117b7))
* switch to using Node's built in coverage ([bcoe#22](https://github.com/prantlf/c8/issues/22)) ([3c1b92b](3c1b92b))
* **types:** add typings for reporterOptions ([bcoe#446](https://github.com/prantlf/c8/issues/446)) ([3646e6e](3646e6e))
* use debuglog rather than console.warn ([bcoe#279](https://github.com/prantlf/c8/issues/279)) ([7c04a4d](7c04a4d))
* use process.stdout.columns for reporter maxCols ([bcoe#409](https://github.com/prantlf/c8/issues/409)) ([7731574](7731574))
* warn instead of throw on exception ([bcoe#29](https://github.com/prantlf/c8/issues/29)) ([a8620d4](a8620d4))

### BREAKING CHANGES

* Node.js' source-map and lineLength cache is now used to remap coverage output (this allows tools like ts-node to be supported, which transpile at runtime).
* temp directory now defaults to setting for report directory
* c8 will now load source-maps if possible and remap coverage accordingly
* switches to using NODE_V8_COVERAGE rather than inspector directly
* dropped subprocess support for the time being, while we march towards an initial implementation.
github-actions bot pushed a commit to prantlf/c8 that referenced this pull request Apr 2, 2023
# 1.0.0 (2023-04-02)

### Bug Fixes

* `--all` now respects `--extension` flag. ([bcoe#357](https://github.com/prantlf/c8/issues/357)) ([a5deb27](a5deb27))
* add missing space in text ([bcoe#245](https://github.com/prantlf/c8/issues/245)) ([efe6d04](efe6d04))
* address bugs with source remapping on Windows ([bcoe#301](https://github.com/prantlf/c8/issues/301)) ([c817902](c817902))
* address file:// issue with CJS ([bcoe#39](https://github.com/prantlf/c8/issues/39)) ([d4f9cab](d4f9cab))
* all flag not propagated to check-coverage command ([bcoe#188](https://github.com/prantlf/c8/issues/188)) ([86eaf72](86eaf72))
* **config:** support configuration inheritance ([bcoe#343](https://github.com/prantlf/c8/issues/343)) ([e81ed5d](e81ed5d))
* **deps:** merging failed when the same script occurred multiple times in the same report ([bcoe#147](https://github.com/prantlf/c8/issues/147)) ([1ebcaf9](1ebcaf9))
* **deps:** update dependency find-up to v4 ([bcoe#119](https://github.com/prantlf/c8/issues/119)) ([c568d96](c568d96))
* **deps:** update dependency find-up to v5 ([bcoe#242](https://github.com/prantlf/c8/issues/242)) ([8a0cfd7](8a0cfd7))
* **deps:** update dependency furi to v2 ([bcoe#193](https://github.com/prantlf/c8/issues/193)) ([6b9af6e](6b9af6e))
* **deps:** update dependency rimraf to v3 ([bcoe#132](https://github.com/prantlf/c8/issues/132)) ([7601748](7601748))
* **deps:** update dependency v8-to-istanbul to v4 ([bcoe#167](https://github.com/prantlf/c8/issues/167)) ([97b9769](97b9769))
* **deps:** update dependency yargs to v14 ([bcoe#134](https://github.com/prantlf/c8/issues/134)) ([e49737f](e49737f))
* **deps:** update dependency yargs to v15 ([bcoe#164](https://github.com/prantlf/c8/issues/164)) ([e41a483](e41a483))
* **deps:** update dependency yargs to v16 ([bcoe#251](https://github.com/prantlf/c8/issues/251)) ([0436816](0436816))
* **deps:** update dependency yargs-parser to v13 ([bcoe#124](https://github.com/prantlf/c8/issues/124)) ([1eb3394](1eb3394))
* **deps:** update dependency yargs-parser to v14 ([bcoe#144](https://github.com/prantlf/c8/issues/144)) ([9b3d089](9b3d089))
* **deps:** update dependency yargs-parser to v15 ([bcoe#153](https://github.com/prantlf/c8/issues/153)) ([80153de](80153de))
* **deps:** update dependency yargs-parser to v16 ([bcoe#157](https://github.com/prantlf/c8/issues/157)) ([15746e5](15746e5))
* **deps:** update dependency yargs-parser to v17 ([bcoe#201](https://github.com/prantlf/c8/issues/201)) ([d730c63](d730c63))
* **deps:** update dependency yargs-parser to v18 ([bcoe#202](https://github.com/prantlf/c8/issues/202)) ([983de44](983de44))
* **deps:** update dependency yargs-parser to v19 ([bcoe#241](https://github.com/prantlf/c8/issues/241)) ([baa01df](baa01df))
* **deps:** update dependency yargs-parser to v20 ([bcoe#252](https://github.com/prantlf/c8/issues/252)) ([ae845f0](ae845f0))
* **deps:** update deps to address warning in cross-spawn ([bcoe#141](https://github.com/prantlf/c8/issues/141)) ([4b66221](4b66221))
* **deps:** update deps to latest ([bcoe#384](https://github.com/prantlf/c8/issues/384)) ([78eac8c](78eac8c)), closes [bcoe#375](https://github.com/prantlf/c8/issues/375)
* **deps:** v8-to-istanbul with fix for Windows paths ([bcoe#311](https://github.com/prantlf/c8/issues/311)) ([ef1b875](ef1b875))
* **deps:** v8-to-istanbul with patch for crasher ([bcoe#200](https://github.com/prantlf/c8/issues/200)) ([d4b7d80](d4b7d80))
* **deps:** v8-to-istnbul with fixes for Node 10/18 ([bcoe#392](https://github.com/prantlf/c8/issues/392)) ([d5f642a](d5f642a))
* do not override NODE_V8_COVERAGE if set ([bcoe#70](https://github.com/prantlf/c8/issues/70)) ([8bb67b0](8bb67b0))
* don't load JSON that does not look like coverage ([bcoe#146](https://github.com/prantlf/c8/issues/146)) ([a6481f1](a6481f1))
* escaping issue with cobertura reporter ([bcoe#203](https://github.com/prantlf/c8/issues/203)) ([e93747b](e93747b))
* exclude coverage of the CJS-ESM bridge from results ([bcoe#83](https://github.com/prantlf/c8/issues/83)) ([da2c945](da2c945))
* exit with code 1 when report output fails ([bcoe#92](https://github.com/prantlf/c8/issues/92)) ([a27b694](a27b694))
* file URL to system path conversion ([bcoe#46](https://github.com/prantlf/c8/issues/46)) ([e7f8cf2](e7f8cf2))
* fix package.json `test:snap` script to use cross-env ([bcoe#366](https://github.com/prantlf/c8/issues/366)) ([5d2981c](5d2981c))
* Fix usage of excludeAfterRemap not to set the coverage always to 100 ([9113449](9113449)), closes [bcoe#462](https://github.com/prantlf/c8/issues/462)
* float patch for branch/function coverage merge bug ([bcoe#56](https://github.com/prantlf/c8/issues/56)) ([1de0cca](1de0cca))
* HTML report now has correct source positions for Node >10.16.0 ([bcoe#125](https://github.com/prantlf/c8/issues/125)) ([c49fa7f](c49fa7f))
* ignore missing source maps in raw coverage output ([bcoe#233](https://github.com/prantlf/c8/issues/233)) ([eed98af](eed98af))
* make tests run on Windows ([bcoe#25](https://github.com/prantlf/c8/issues/25)) ([08e44d0](08e44d0))
* make tmp directory regardless of clean ([44d2185](44d2185))
* **perf:** cache `this.exclude.shouldInstrument` for improved performance ([bcoe#388](https://github.com/prantlf/c8/issues/388)) ([8b36f23](8b36f23))
* pin to functional version of spawn-wrap ([d1ced8c](d1ced8c))
* process coverage merging ([bcoe#37](https://github.com/prantlf/c8/issues/37)) ([67959b4](67959b4))
* regex flags in dependency were breaking Node 8 ([a9d9645](a9d9645))
* remove the unmaintained mkdirp dependency ([bcoe#91](https://github.com/prantlf/c8/issues/91)) ([a465b65](a465b65))
* snapshot ([7fd9e13](7fd9e13))
* support node@v15.x.x built-in modules ([bcoe#265](https://github.com/prantlf/c8/issues/265)) ([1b90a22](1b90a22))
* switch to mkdirp for Node 8 ([206b83f](206b83f))
* temporary files should be in tmp folder ([bcoe#106](https://github.com/prantlf/c8/issues/106)) ([64dd2e6](64dd2e6))
* tweak inspector event timing ([bcoe#6](https://github.com/prantlf/c8/issues/6)) ([01f654e](01f654e))
* **types:** add excludeAfterRemap and allowExternal  ([bcoe#297](https://github.com/prantlf/c8/issues/297)) ([e32a53f](e32a53f))
* Upgrade dependencies ([985b219](985b219))
* upgrade to @bcoe/v8-coverage with breaking regex dropped ([6c28e7f](6c28e7f))
* **v8-to-istanbul:** fixes shebang handling/ignore behavior ([bcoe#267](https://github.com/prantlf/c8/issues/267)) ([21cd41f](21cd41f))
* **v8-to-istanbul:** pull in fix for missing branches ([bcoe#258](https://github.com/prantlf/c8/issues/258)) ([eaffa78](eaffa78))
* **v8-to-istanbul:** revert off by one that broke TypeScript ([bcoe#262](https://github.com/prantlf/c8/issues/262)) ([81ab5b7](81ab5b7))
* we were not exiting with 1 if mkdir failed ([bcoe#89](https://github.com/prantlf/c8/issues/89)) ([fb02ed6](fb02ed6))

* feat!: use Node.js' source-map cache, to support tools like ts-node (bcoe#152) ([53bba15](53bba15)), closes [bcoe#152](https://github.com/prantlf/c8/issues/152)
* feat!: default temp directory to report directory (bcoe#102) ([8602f4a](8602f4a)), closes [bcoe#102](https://github.com/prantlf/c8/issues/102)

### Features

* `--100` ([bcoe#332](https://github.com/prantlf/c8/issues/332)) ([4205f2f](4205f2f))
* add --config option and documentation on options and configs ([bcoe#308](https://github.com/prantlf/c8/issues/308)) ([99436ef](99436ef))
* add --exclude-node-modules option ([bcoe#321](https://github.com/prantlf/c8/issues/321)) ([a4733c6](a4733c6))
* add --extension option ([bcoe#331](https://github.com/prantlf/c8/issues/331)) ([ff01cd8](ff01cd8))
* add --report-dir alias (for consistency with nyc) ([0dd1b04](0dd1b04))
* add --skip-full ([bcoe#287](https://github.com/prantlf/c8/issues/287)) ([8b01b63](8b01b63))
* add `skipFull` and `excludeNodeModules` to type definitions ([bcoe#417](https://github.com/prantlf/c8/issues/417)) ([b93b9c0](b93b9c0))
* add support for 1:1 source-maps ([bcoe#85](https://github.com/prantlf/c8/issues/85)) ([6ca4345](6ca4345))
* add support for ignoring lines, functions, and blocks ([bcoe#87](https://github.com/prantlf/c8/issues/87)) ([c66950e](c66950e))
* add thresholds for enforcing coverage percentage ([bcoe#59](https://github.com/prantlf/c8/issues/59)) ([70e8943](70e8943))
* adds --all functionality ([bcoe#158](https://github.com/prantlf/c8/issues/158)) ([2eb631e](2eb631e))
* adds support for 1:many source maps ([bcoe#238](https://github.com/prantlf/c8/issues/238)) ([dbf94a0](dbf94a0))
* adds TypeScript definitions ([d39801b](d39801b)), closes [bcoe#195](https://github.com/prantlf/c8/issues/195)
* **all:** handle base64 inline source maps ([bcoe#283](https://github.com/prantlf/c8/issues/283)) ([3f12dd4](3f12dd4))
* allow  --reports-dir to be configured ([bcoe#65](https://github.com/prantlf/c8/issues/65)) ([5ab31f5](5ab31f5))
* allow relative paths to be optionally included ([3806c79](3806c79))
* allow script wrapper length to be specified ([bcoe#51](https://github.com/prantlf/c8/issues/51)) ([a22c4e0](a22c4e0))
* first pass at functional prototype without subprocess support ([bcoe#5](https://github.com/prantlf/c8/issues/5)) ([9534f56](9534f56))
* foreground-child's done() method was not being called ([bcoe#82](https://github.com/prantlf/c8/issues/82)) ([fde596e](fde596e))
* implement Istanbul reporting ([bcoe#8](https://github.com/prantlf/c8/issues/8)) ([8e430bf](8e430bf))
* improve test assertions ([bcoe#28](https://github.com/prantlf/c8/issues/28)) ([522720e](522720e))
* introduce --exclude-after-remap flag ([bcoe#293](https://github.com/prantlf/c8/issues/293)) ([53c4234](53c4234)), closes [bcoe#224](https://github.com/prantlf/c8/issues/224)
* load .nycrc/.nycrc.json to simplify migration ([bcoe#100](https://github.com/prantlf/c8/issues/100)) ([bd7484f](bd7484f))
* playing around with initial implementation ([18f5471](18f5471))
* support --check-coverage for reports ([bcoe#60](https://github.com/prantlf/c8/issues/60)) ([b542930](b542930))
* support for instrumenting files outside of current working directory ([7e53a0e](7e53a0e))
* support ignore start/stop comment ([bcoe#273](https://github.com/prantlf/c8/issues/273)) ([90949fa](90949fa)), closes [bcoe#271](https://github.com/prantlf/c8/issues/271)
* support passing reporter options ([bcoe#423](https://github.com/prantlf/c8/issues/423)) ([bc347a9](bc347a9))
* switch to stderr and default port ([bcoe#7](https://github.com/prantlf/c8/issues/7)) ([bb117b7](bb117b7))
* switch to using Node's built in coverage ([bcoe#22](https://github.com/prantlf/c8/issues/22)) ([3c1b92b](3c1b92b))
* **types:** add typings for reporterOptions ([bcoe#446](https://github.com/prantlf/c8/issues/446)) ([3646e6e](3646e6e))
* use debuglog rather than console.warn ([bcoe#279](https://github.com/prantlf/c8/issues/279)) ([7c04a4d](7c04a4d))
* use process.stdout.columns for reporter maxCols ([bcoe#409](https://github.com/prantlf/c8/issues/409)) ([7731574](7731574))
* warn instead of throw on exception ([bcoe#29](https://github.com/prantlf/c8/issues/29)) ([a8620d4](a8620d4))

### BREAKING CHANGES

* Node.js' source-map and lineLength cache is now used to remap coverage output (this allows tools like ts-node to be supported, which transpile at runtime).
* temp directory now defaults to setting for report directory
* c8 will now load source-maps if possible and remap coverage accordingly
* switches to using NODE_V8_COVERAGE rather than inspector directly
* dropped subprocess support for the time being, while we march towards an initial implementation.
mcknasty pushed a commit to mcknasty/c8 that referenced this pull request Feb 2, 2024
BREAKING CHANGE: switches to using NODE_V8_COVERAGE rather than inspector directly
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants