|
2 | 2 | var fs = require('fs')
|
3 | 3 | var glob = require('glob')
|
4 | 4 | var libCoverage = require('istanbul-lib-coverage')
|
| 5 | +var libHook = require('istanbul-lib-hook') |
5 | 6 | var libReport = require('istanbul-lib-report')
|
6 | 7 | var libSourceMaps = require('istanbul-lib-source-maps')
|
7 | 8 | var reports = require('istanbul-reports')
|
8 | 9 | var mkdirp = require('mkdirp')
|
9 | 10 | var Module = require('module')
|
10 |
| -var appendTransform = require('append-transform') |
11 | 11 | var cachingTransform = require('caching-transform')
|
12 | 12 | var path = require('path')
|
13 | 13 | var rimraf = require('rimraf')
|
@@ -67,6 +67,7 @@ function NYC (opts) {
|
67 | 67 |
|
68 | 68 | this.sourceMapCache = libSourceMaps.createSourceMapStore()
|
69 | 69 |
|
| 70 | + this.hookRunInContext = config.hookRunInContext |
70 | 71 | this.hashCache = {}
|
71 | 72 | this.loadedMaps = null
|
72 | 73 | this.fakeRequire = null
|
@@ -289,13 +290,23 @@ NYC.prototype._handleJs = function (code, filename) {
|
289 | 290 | return this._maybeInstrumentSource(code, filename, relFile) || code
|
290 | 291 | }
|
291 | 292 |
|
292 |
| -NYC.prototype._wrapRequire = function () { |
| 293 | +NYC.prototype._addHook = function (type) { |
293 | 294 | var handleJs = this._handleJs.bind(this)
|
| 295 | + var dummyMatcher = function () { return true } // we do all processing in transformer |
| 296 | + libHook['hook' + type](dummyMatcher, handleJs, { extensions: this.extensions }) |
| 297 | +} |
294 | 298 |
|
| 299 | +NYC.prototype._wrapRequire = function () { |
295 | 300 | this.extensions.forEach(function (ext) {
|
296 | 301 | require.extensions[ext] = js
|
297 |
| - appendTransform(handleJs, ext) |
298 | 302 | })
|
| 303 | + this._addHook('Require') |
| 304 | +} |
| 305 | + |
| 306 | +NYC.prototype._addOtherHooks = function () { |
| 307 | + if (this.hookRunInContext) { |
| 308 | + this._addHook('RunInThisContext') |
| 309 | + } |
299 | 310 | }
|
300 | 311 |
|
301 | 312 | NYC.prototype.cleanup = function () {
|
@@ -329,6 +340,7 @@ NYC.prototype._wrapExit = function () {
|
329 | 340 |
|
330 | 341 | NYC.prototype.wrap = function (bin) {
|
331 | 342 | this._wrapRequire()
|
| 343 | + this._addOtherHooks() |
332 | 344 | this._wrapExit()
|
333 | 345 | this._loadAdditionalModules()
|
334 | 346 | return this
|
|
0 commit comments