123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _path = _interopRequireDefault(require("path"));
- var _fs = require("fs");
- var _child_process = require("child_process");
- var _helperPluginUtils = require("@babel/helper-plugin-utils");
- var _istanbulLibInstrument = require("istanbul-lib-instrument");
- var _testExclude = _interopRequireDefault(require("test-exclude"));
- var _schema = _interopRequireDefault(require("@istanbuljs/schema"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function getRealpath(n) {
- try {
- return (0, _fs.realpathSync)(n) ||
- /* istanbul ignore next */
- n;
- } catch (e) {
- /* istanbul ignore next */
- return n;
- }
- }
- const memoize = new Map();
- /* istanbul ignore next */
- const memosep = _path.default.sep === '/' ? ':' : ';';
- function loadNycConfig(cwd, opts) {
- let memokey = cwd;
- const args = [_path.default.resolve(__dirname, 'load-nyc-config-sync.js'), cwd];
- if ('nycrcPath' in opts) {
- args.push(opts.nycrcPath);
- memokey += memosep + opts.nycrcPath;
- }
- /* execFileSync is expensive, avoid it if possible! */
- if (memoize.has(memokey)) {
- return memoize.get(memokey);
- }
- const result = JSON.parse((0, _child_process.execFileSync)(process.execPath, args));
- const error = result['load-nyc-config-sync-error'];
- if (error) {
- throw new Error(error);
- }
- const config = { ..._schema.default.defaults.babelPluginIstanbul,
- cwd,
- ...result
- };
- memoize.set(memokey, config);
- return config;
- }
- function findConfig(opts) {
- const cwd = getRealpath(opts.cwd || process.env.NYC_CWD ||
- /* istanbul ignore next */
- process.cwd());
- const keys = Object.keys(opts);
- const ignored = Object.keys(opts).filter(s => s === 'nycrcPath' || s === 'cwd');
- if (keys.length > ignored.length) {
- // explicitly configuring options in babel
- // takes precedence.
- return { ..._schema.default.defaults.babelPluginIstanbul,
- cwd,
- ...opts
- };
- }
- if (ignored.length === 0 && process.env.NYC_CONFIG) {
- // defaults were already applied by nyc
- return JSON.parse(process.env.NYC_CONFIG);
- }
- return loadNycConfig(cwd, opts);
- }
- function makeShouldSkip() {
- let exclude;
- return function shouldSkip(file, nycConfig) {
- if (!exclude || exclude.cwd !== nycConfig.cwd) {
- exclude = new _testExclude.default({
- cwd: nycConfig.cwd,
- include: nycConfig.include,
- exclude: nycConfig.exclude,
- extension: nycConfig.extension,
- // Make sure this is true unless explicitly set to `false`. `undefined` is still `true`.
- excludeNodeModules: nycConfig.excludeNodeModules !== false
- });
- }
- return !exclude.shouldInstrument(file);
- };
- }
- var _default = (0, _helperPluginUtils.declare)(api => {
- api.assertVersion(7);
- const shouldSkip = makeShouldSkip();
- const t = api.types;
- return {
- visitor: {
- Program: {
- enter(path) {
- this.__dv__ = null;
- this.nycConfig = findConfig(this.opts);
- const realPath = getRealpath(this.file.opts.filename);
- if (shouldSkip(realPath, this.nycConfig)) {
- return;
- }
- let {
- inputSourceMap
- } = this.opts;
- if (this.opts.useInlineSourceMaps !== false) {
- if (!inputSourceMap && this.file.inputMap) {
- inputSourceMap = this.file.inputMap.sourcemap;
- }
- }
- const visitorOptions = {};
- Object.entries(_schema.default.defaults.instrumentVisitor).forEach(([name, defaultValue]) => {
- if (name in this.nycConfig) {
- visitorOptions[name] = this.nycConfig[name];
- } else {
- visitorOptions[name] = _schema.default.defaults.instrumentVisitor[name];
- }
- });
- this.__dv__ = (0, _istanbulLibInstrument.programVisitor)(t, realPath, { ...visitorOptions,
- inputSourceMap
- });
- this.__dv__.enter(path);
- },
- exit(path) {
- if (!this.__dv__) {
- return;
- }
- const result = this.__dv__.exit(path);
- if (this.opts.onCover) {
- this.opts.onCover(getRealpath(this.file.opts.filename), result.fileCoverage);
- }
- }
- }
- }
- };
- });
- exports.default = _default;
|