109 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports["default"] = void 0; | ||
|  | 
 | ||
|  | var _fs = require("fs"); | ||
|  | 
 | ||
|  | var _path = require("path"); | ||
|  | 
 | ||
|  | var _istanbulLibInstrument = require("istanbul-lib-instrument"); | ||
|  | 
 | ||
|  | var testExclude = require('test-exclude'); | ||
|  | 
 | ||
|  | var findUp = require('find-up'); | ||
|  | 
 | ||
|  | function getRealpath(n) { | ||
|  |   try { | ||
|  |     return (0, _fs.realpathSync)(n) || n; | ||
|  |   } catch (e) { | ||
|  |     return n; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function makeShouldSkip() { | ||
|  |   var exclude; | ||
|  |   return function shouldSkip(file, opts) { | ||
|  |     if (!exclude || exclude.cwd !== opts.cwd) { | ||
|  |       var cwd = getRealpath(process.env.NYC_CWD || process.cwd()); | ||
|  |       var nycConfig = process.env.NYC_CONFIG ? JSON.parse(process.env.NYC_CONFIG) : {}; | ||
|  |       var config = {}; | ||
|  | 
 | ||
|  |       if (Object.keys(opts).length > 0) { | ||
|  |         // explicitly configuring options in babel
 | ||
|  |         // takes precedence.
 | ||
|  |         config = opts; | ||
|  |       } else if (nycConfig.include || nycConfig.exclude) { | ||
|  |         // nyc was configured in a parent process (keep these settings).
 | ||
|  |         config = { | ||
|  |           include: nycConfig.include, | ||
|  |           exclude: nycConfig.exclude | ||
|  |         }; | ||
|  |       } else { | ||
|  |         // fallback to loading config from key in package.json.
 | ||
|  |         config = { | ||
|  |           configKey: 'nyc', | ||
|  |           configPath: (0, _path.dirname)(findUp.sync('package.json', { | ||
|  |             cwd: cwd | ||
|  |           })) | ||
|  |         }; | ||
|  |       } | ||
|  | 
 | ||
|  |       exclude = testExclude(Object.assign({ | ||
|  |         cwd: cwd | ||
|  |       }, config)); | ||
|  |     } | ||
|  | 
 | ||
|  |     return !exclude.shouldInstrument(file); | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | function makeVisitor(_ref) { | ||
|  |   var t = _ref.types; | ||
|  |   var shouldSkip = makeShouldSkip(); | ||
|  |   return { | ||
|  |     visitor: { | ||
|  |       Program: { | ||
|  |         enter: function enter(path) { | ||
|  |           this.__dv__ = null; | ||
|  |           var realPath = getRealpath(this.file.opts.filename); | ||
|  | 
 | ||
|  |           if (shouldSkip(realPath, this.opts)) { | ||
|  |             return; | ||
|  |           } | ||
|  | 
 | ||
|  |           var inputSourceMap = this.opts.inputSourceMap; | ||
|  | 
 | ||
|  |           if (this.opts.useInlineSourceMaps !== false) { | ||
|  |             if (!inputSourceMap && this.file.inputMap) { | ||
|  |               inputSourceMap = this.file.inputMap.sourcemap; | ||
|  |             } | ||
|  |           } | ||
|  | 
 | ||
|  |           this.__dv__ = (0, _istanbulLibInstrument.programVisitor)(t, realPath, { | ||
|  |             coverageVariable: '__coverage__', | ||
|  |             inputSourceMap: inputSourceMap | ||
|  |           }); | ||
|  | 
 | ||
|  |           this.__dv__.enter(path); | ||
|  |         }, | ||
|  |         exit: function exit(path) { | ||
|  |           if (!this.__dv__) { | ||
|  |             return; | ||
|  |           } | ||
|  | 
 | ||
|  |           var result = this.__dv__.exit(path); | ||
|  | 
 | ||
|  |           if (this.opts.onCover) { | ||
|  |             this.opts.onCover(getRealpath(this.file.opts.filename), result.fileCoverage); | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | var _default = makeVisitor; | ||
|  | exports["default"] = _default; |