Example #1
0
/**
 * This determines whether the given state and options combination
 * should result in the file being ignored and not covered
 * Big thanks to babel-plugin-transform-adana and their CC0-1.0 license
 * from which this code was mostly copy/pasted
 */
function skip ({ opts, file } = { }) {
  if (file && opts) {
    const { ignore = [], only } = opts
    return util.shouldIgnore(
      file.opts.filename,
      util.arrayify(ignore, util.regexify),
      only ? util.arrayify(only, util.regexify) : null
    )
  }
  return false
}
Example #2
0
export default function (opts?: Object = {}) {
  if (opts.only != null) only = util.arrayify(opts.only, util.regexify);
  if (opts.ignore != null) ignore = util.arrayify(opts.ignore, util.regexify);

  if (opts.extensions) hookExtensions(util.arrayify(opts.extensions));

  if (opts.cache === false) cache = null;

  delete opts.extensions;
  delete opts.ignore;
  delete opts.cache;
  delete opts.only;

  extend(transformOpts, opts);
}
Example #3
0
 process: function (src, filename) {
   var isJISON = filename.match(/\.jison$/i);
   // Don't bother doing anything to node_modules
   if (filename.indexOf('node_modules') === -1 || filename.indexOf('node_modules/dcos-dygraphs') > -1) {
     // Don't load image data - it can't be parsed by jest.
     if (filename.match(/\.(jpe?g|png|gif|bmp|svg|less|raml)$/i)) {
       return '';
     }
     // Use JISON generator for JISON grammar
     if (isJISON) {
       src = (new jison.Generator(src)).generate();
     }
     // Run our modules through Babel before running tests
     if (babel.util.canCompile(filename) || isJISON) {
       src = babel.transform(src, {
         auxiliaryCommentBefore: ' istanbul ignore next ',
         filename,
         presets: [jestPreset].concat([
           'babel-preset-es2015',
           'babel-preset-react'
         ].map(require.resolve)),
         retainLines: true,
       }).code;
     }
     // Run our modules through the jest-webpack-alias plugin so we
     // can use the webpack alias in tests. By default, jest doesn't work
     // with webpack at all. webPackAlias matches filenames against the
     // alias settings in webpack.config and rewrites the filename to the
     // aliased path.
     src = webpackAlias.process(src, filename);
   }
   return src;
 }
Example #4
0
const instrumentFile = (content: string, filename: Path): string => {
  // NOTE: Keeping these requires inside this function reduces a single run
  // time by 2sec if not running in `--coverage` mode
  const babel = require('babel-core');
  const babelPluginIstanbul = require('babel-plugin-istanbul').default;

  if (babel.util.canCompile(filename)) {
    return babel.transform(content, {
      filename,
      auxiliaryCommentBefore: ' istanbul ignore next ',
      plugins: [
        [
          babelPluginIstanbul,
          // right now babel-plugin-istanbul doesn't have any configuration
          // for bypassing the excludes check, but there is a config for
          // overwriting it. `.^` as a regexp that matches nothing.
          // @see https://github.com/istanbuljs/test-exclude/issues/7
          {exclude: ['.^']},
        ],
      ],
      retainLines: true,
      babelrc: false,
    }).code;
  }
  return content;
};
const createTransformer = options => {
  options = Object.assign({}, options, {
    auxiliaryCommentBefore: ' istanbul ignore next ',
    presets: (options && options.presets || []).concat([jestPreset]),
    retainLines: true });

  delete options.cacheDirectory;

  return {
    canInstrument: true,
    process(
    src,
    filename,
    config,
    preprocessorOptions)
    {
      let plugins = options.plugins || [];

      if (preprocessorOptions && preprocessorOptions.instrument) {
        plugins = plugins.concat(require('babel-plugin-istanbul').default);
      }

      if (babel.util.canCompile(filename)) {
        return babel.transform(
        src,
        Object.assign({}, options, { filename, plugins })).
        code;
      }
      return src;
    } };

};
Example #6
0
function shouldIgnore(filename) {
  if (!ignore && !only) {
    return getRelativePath(filename).split(path.sep).indexOf("node_modules") >= 0;
  } else {
    return util.shouldIgnore(filename, ignore || [], only);
  }
}
Example #7
0
Babelify.configure = function (opts) {
  opts = assign({}, opts);
  var extensions = opts.extensions ? babel.util.arrayify(opts.extensions) : null;
  var sourceMapRelative = opts.sourceMapRelative;
  if (opts.sourceMap !== false) opts.sourceMap = "inline";

  // babelify specific options
  delete opts.sourceMapRelative;
  delete opts.extensions;
  delete opts.filename;

  // browserify specific options
  delete opts._flags;
  delete opts.basedir;
  delete opts.global;

  return function (filename) {
    if (!babel.canCompile(filename, extensions)) {
      return stream.PassThrough();
    }

    if (sourceMapRelative) {
      filename = path.relative(sourceMapRelative, filename);
    }

    return new Babelify(filename, opts);
  };
};
Example #8
0
function shouldIgnore(filename) {
  if (!ignore && !only) {
    return getRelativePath(filename).split(_path2["default"].sep).indexOf("node_modules") >= 0;
  } else {
    return _babelCore.util.shouldIgnore(filename, ignore || [], only);
  }
}
Example #9
0
exports["default"] = function () {
  var opts /*:: ?: Object*/ = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

  if (opts.only != null) only = _babelCore.util.arrayify(opts.only, _babelCore.util.regexify);
  if (opts.ignore != null) ignore = _babelCore.util.arrayify(opts.ignore, _babelCore.util.regexify);

  if (opts.extensions) hookExtensions(_babelCore.util.arrayify(opts.extensions));

  if (opts.cache === false) cache = null;

  delete opts.extensions;
  delete opts.ignore;
  delete opts.cache;
  delete opts.only;

  _lodashObjectExtend2["default"](transformOpts, opts);
};
Example #10
0
exports.default = function () {
  var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

  if (opts.only != null) only = _babelCore.util.arrayify(opts.only, _babelCore.util.regexify);
  if (opts.ignore != null) ignore = _babelCore.util.arrayify(opts.ignore, _babelCore.util.regexify);

  if (opts.extensions) hookExtensions(_babelCore.util.arrayify(opts.extensions));

  if (opts.cache === false) cache = null;

  delete opts.extensions;
  delete opts.ignore;
  delete opts.cache;
  delete opts.only;

  (0, _extend2.default)(transformOpts, opts);
};
Example #11
0
require.extensions['.jsx'] = function (module, filename) {
  var src = fs.readFileSync(filename, 'utf8');
  // Ignore all files within node_modules
  if (filename.indexOf('node_modules') === -1 && babel.util.canCompile(filename)) {
    var compiled = babel.transform(src, { filename: filename }).code;
    return module._compile(compiled, filename);
  }
  return module;
};
Example #12
0
  return function (filename) {
    if (!babel.util.canCompile(filename, extensions)) {
      return stream.PassThrough();
    }

    if (sourceMapRelative) {
      filename = path.relative(sourceMapRelative, filename);
    }

    return new Babelify(filename, opts);
  };
Example #13
0
  return function (filename) {
    if (!babel.util.canCompile(filename, extensions)) {
      return stream.PassThrough();
    }

    var _opts = sourceMapsAbsolute
      ? assign({sourceFileName: filename}, opts)
      : opts;

    return new Babelify(filename, _opts);
  };
  process: function (src, filename) {
    // Ignore all files within node_modules
    // babel files can be .js, .es, .jsx or .es6
    if (filename.indexOf("node_modules") === -1 && babel.util.canCompile(filename)) {
      return babel.transform(src, {
        filename: filename,
        retainLines: true
      }).code;
    }

    return src;
  }
Example #15
0
  process: function (src, filename) {
    // Ignore all files within node_modules
    // babel files can be .js, .es, .jsx or .es6
    if (filename.indexOf("node_modules") === -1 && babel.util.canCompile(filename)) {
      return babel.transform(src, {
        filename: filename,
        retainLines: true,
        auxiliaryCommentBefore: 'istanbul ignore next',
        plugins: ['transform-runtime']
      }).code;
    }

    return src;
  }
Example #16
0
const createTransformer = (options: any) => {
  options = Object.assign({}, options, {
    auxiliaryCommentBefore: ' istanbul ignore next ',
    presets: ((options && options.presets) || []).concat([jestPreset]),
    retainLines: true,
  });
  delete options.cacheDirectory;

  return {
    canInstrument: true,
    getCacheKey(
      fileData: string,
      filename: Path,
      configString: string,
      {instrument, watch}: TransformOptions,
    ): string {
      return crypto.createHash('md5')
        .update(fileData)
        .update(configString)
        // Don't use the in-memory cache in watch mode because the .babelrc
        // file may be modified.
        .update(getBabelRC(filename, {useCache: !watch}))
        .update(instrument ? 'instrument' : '')
        .digest('hex');
    },
    process(
      src: string,
      filename: Path,
      config: Config,
      transformOptions: TransformOptions,
    ): string {
      let plugins = options.plugins || [];

      if (transformOptions && transformOptions.instrument) {
        plugins = plugins.concat(require('babel-plugin-istanbul').default);
      }

      if (babel.util.canCompile(filename)) {
        return babel.transform(
          src,
          Object.assign({}, options, {filename, plugins}),
        ).code;
      }
      return src;
    },
  };
};
Example #17
0
const createTransformer = options => {
  options = Object.assign({}, options, { 
    auxiliaryCommentBefore: ' istanbul ignore next ', 
    presets: (options && options.presets || []).concat([jestPreset]), 
    retainLines: true });

  delete options.cacheDirectory;

  return { 
    process(src, filename) {
      if (babel.util.canCompile(filename)) {
        return babel.transform(
        src, 
        Object.assign({}, options, { filename })).
        code;}

      return src;} };};
Example #18
0
browserify.configure = function (opts) {
  opts = assign({}, opts);
  var extensions = opts.extensions ? babel.util.arrayify(opts.extensions) : null;
  var sourceMapRelative = opts.sourceMapRelative;
  if (opts.sourceMap !== false) opts.sourceMap = "inline";

  // babelify specific options
  delete opts.sourceMapRelative;
  delete opts.extensions;
  delete opts.filename;

  // browserify specific options
  delete opts._flags;
  delete opts.basedir;
  delete opts.global;

  return function (filename) {
    if (!babel.canCompile(filename, extensions)) {
      return through();
    }

    if (sourceMapRelative) {
      filename = path.relative(sourceMapRelative, filename);
    }

    var data = "";

    var write = function (buf, enc, callback) {
      data += buf;
      callback();
    };

    var end = function (callback) {
      opts.filename = filename;
      try {
        this.push(babel.transform(data, opts).code);
      } catch(err) {
        this.emit("error", err);
      }
      callback();
    };

    return through(write, end);
  };
};
Example #19
0
browserify.configure = function (opts) {
  opts = opts || {};
  if (opts.sourceMap !== false) opts.sourceMap = "inline" ;
  if (opts.extensions) opts.extensions = babel.util.arrayify(opts.extensions);

  return function (filename) {
    if (!babel.canCompile(filename, opts.extensions)) {
      return through();
    }
    
    if (opts.sourceMapRelative) {
      filename = path.relative(opts.sourceMapRelative, filename);
    }

    var data = "";

    var write = function (buf) {
      data += buf;
    };

    var end = function () {
      var opts2 = clone(opts);
      delete opts2.sourceMapRelative;
      delete opts2.extensions;
      delete opts2.global;
      opts2.filename = filename;

      try {
        var out = babel.transform(data, opts2).code;
      } catch(err) {
        stream.emit("error", err);
        stream.queue(null);
        return;
      }

      stream.queue(out);
      stream.queue(null);
    };

    var stream = through(write, end);
    return stream;
  };
};
Example #20
0
Babelify.configure = function (opts) {
  opts = assign({}, opts);
  var extensions = opts.extensions ? babel.util.arrayify(opts.extensions) : null;
  var sourceMapsAbsolute = opts.sourceMapsAbsolute;
  if (opts.sourceMaps !== false) opts.sourceMaps = "inline";

  // babelify specific options
  delete opts.sourceMapsAbsolute;
  delete opts.extensions;
  delete opts.filename;

  // babelify backwards-compat
  delete opts.sourceMapRelative;

  // browserify specific options
  delete opts._flags;
  delete opts.basedir;
  delete opts.global;

  // browserify cli options
  delete opts._;
  // "--opt [ a b ]" and "--opt a --opt b" are allowed:
  if (opts.ignore && opts.ignore._) opts.ignore = opts.ignore._;
  if (opts.only && opts.only._) opts.only = opts.only._;
  if (opts.plugins && opts.plugins._) opts.plugins = opts.plugins._;
  if (opts.presets && opts.presets._) opts.presets = opts.presets._;

  return function (filename) {
    if (!babel.util.canCompile(filename, extensions)) {
      return stream.PassThrough();
    }

    var _opts = sourceMapsAbsolute
      ? assign({sourceFileName: filename}, opts)
      : opts;

    return new Babelify(filename, _opts);
  };
};
Example #21
0
const createTransformer = (options) => {
    options = Object.assign({}, options, {
        plugins: (options && options.plugins) || [],
        presets: ((options && options.presets) || []).concat([jestPreset]),
        retainLines: true,
    });
    delete options.cacheDirectory;
    delete options.filename;

    return {
        canInstrument: false,
        getCacheKey(fileData) {
            return crypto.createHash('md5').update(fileData).digest('hex');
        },
        process(src, filename) {
            if (!babel.util.canCompile(filename)) {
                return src;
            }
            const theseOptions = Object.assign({ filename }, options);
            return babel.transform(src, theseOptions).code;
        },
    };
};
Example #22
0
module.exports = function (opts) {
  opts = _.defaults(opts || {}, {
    options: {},
    dest:    "cache",
    src:     "assets",
    ignore:  false
  });

  opts.ignore = babel.util.regexify(opts.ignore);

  var cache = Object.create(null);

  return function (req, res, next) {
    if (opts.ignore.test(req.url)) return next();
    if (!babel.util.canCompile(req.url)) return next();

    var pathname = path.normalize(url.parse(req.url).pathname);
    var dest = path.join(opts.dest, pathname);
    var src  = path.join(opts.src, pathname);
    var srcStat;

    var send = function (data) {
      res.setHeader("Content-Type", "application/javascript");
      res.end(data);
    };

    var write = function (transformed) {
      mkdirp(path.dirname(dest), function (err) {
        if (err) return next(err);
        fs.writeFile(dest, transformed, function (err) {
          if (err) {
            next(err);
          } else {
            cache[pathname] = +srcStat.mtime;
            send(transformed);
          }
        });
      })
    };

    var compile = function () {
      var transformOpts = _.clone(opts.options);
      transformOpts.sourceFileName = "babel:///" + src.replace(opts.src, "");
      babel.transformFile(src, transformOpts, function (err, result) {
        if (err) {
          next(err);
        } else {
          write(result.code);
        }
      });
    };

    var tryCache = function () {
      fs.readFile(dest, function (err, data) {
        if (err && err.code === "ENOENT") {
          compile();
        } else if (err) {
          next(err);
        } else {
          send(data);
        }
      });
    };

    fs.stat(src, function (err, stat) {
      srcStat = stat;
      if (err && err.code === "ENOENT") {
        next();
      } else if (err) {
        next(err);
      } else if (cache[pathname] === +stat.mtime) {
        tryCache();
      } else {
        compile();
      }
    });
  };
};
Example #23
0
  if (!filenames.length) {
    errors.push("--watch requires filenames");
  }
}

if (errors.length) {
  console.error(errors.join(". "));
  process.exit(2);
}

//

var opts = exports.opts = {};

each(options, function (opt, key) {
  opts[key] = commander[key];
});

opts.ignore = util.arrayify(opts.ignore, util.regexify);
opts.only   = util.arrayify(opts.only, util.regexify);

var fn;

if (commander.outDir) {
  fn = require("./dir");
} else {
  fn = require("./file");
}

fn(commander, filenames, exports.opts);
Example #24
0
/**
 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

'use strict';

const babel = require('babel-core');
const jestPreset = require('babel-preset-jest');

module.exports = {
  process(src, filename) {
    if (babel.util.canCompile(filename)) {
      return babel.transform(src, {
        auxiliaryCommentBefore: ' istanbul ignore next ',
        filename,
        presets: [jestPreset],
        retainLines: true,
      }).code.replace(/function\s_interop/g,
          ' /* istanbul ignore next */ function _interop');
    }
    return src;
  },
};
Example #25
0
 return readdir(filename).filter(function (filename) {
   return util.canCompile(filename);
 });
Example #26
0
commander.option("-x, --extensions [extensions]", "List of extensions to compile when a directory has been input [.es6,.js,.es,.jsx]");
commander.option("-w, --watch", "Recompile files on changes");
commander.option("-o, --out-file [out]", "Compile all input files into a single file");
commander.option("-d, --out-dir [out]", "Compile an input directory of modules into an output directory");
commander.option("-D, --copy-files", "When compiling a directory copy over non-compilable files");
commander.option("-q, --quiet", "Don't log anything");

let pkg = require("../../package.json");
commander.version(pkg.version + " (babel-core " + require("babel-core").version + ")");
commander.usage("[options] <files ...>");
commander.parse(process.argv);

//

if (commander.extensions) {
  commander.extensions = util.arrayify(commander.extensions);
}

//

let errors = [];

let filenames = commander.args.reduce(function (globbed, input) {
  let files = glob.sync(input);
  if (!files.length) files = [input];
  return globbed.concat(files);
}, []);

filenames = uniq(filenames);

each(filenames, function (filename) {
Example #27
0
const createTransformer = (options: any): Transformer => {
  const cache = Object.create(null);

  const getBabelRC = filename => {
    const paths = [];
    let directory = filename;
    while (directory !== (directory = path.dirname(directory))) {
      if (cache[directory]) {
        break;
      }

      paths.push(directory);
      const configFilePath = path.join(directory, BABELRC_FILENAME);
      if (fs.existsSync(configFilePath)) {
        cache[directory] = fs.readFileSync(configFilePath, 'utf8');
        break;
      }
      const configJsFilePath = path.join(directory, BABELRC_JS_FILENAME);
      if (fs.existsSync(configJsFilePath)) {
        // $FlowFixMe
        cache[directory] = JSON.stringify(require(configJsFilePath));
        break;
      }
      const resolvedJsonFilePath = path.join(directory, PACKAGE_JSON);
      const packageJsonFilePath =
        resolvedJsonFilePath === PACKAGE_JSON
          ? path.resolve(directory, PACKAGE_JSON)
          : resolvedJsonFilePath;
      if (fs.existsSync(packageJsonFilePath)) {
        // $FlowFixMe
        const packageJsonFileContents = require(packageJsonFilePath);
        if (packageJsonFileContents[BABEL_CONFIG_KEY]) {
          cache[directory] = JSON.stringify(
            packageJsonFileContents[BABEL_CONFIG_KEY],
          );
          break;
        }
      }
    }
    paths.forEach(directoryPath => (cache[directoryPath] = cache[directory]));
    return cache[directory] || '';
  };

  options = Object.assign({}, options, {
    plugins: (options && options.plugins) || [],
    presets: ((options && options.presets) || []).concat([jestPreset]),
    sourceMaps: 'both',
  });
  delete options.cacheDirectory;
  delete options.filename;

  return {
    canInstrument: true,
    getCacheKey(
      fileData: string,
      filename: Path,
      configString: string,
      {instrument, rootDir}: CacheKeyOptions,
    ): string {
      return crypto
        .createHash('md5')
        .update(THIS_FILE)
        .update('\0', 'utf8')
        .update(fileData)
        .update('\0', 'utf8')
        .update(path.relative(rootDir, filename))
        .update('\0', 'utf8')
        .update(configString)
        .update('\0', 'utf8')
        .update(getBabelRC(filename))
        .update('\0', 'utf8')
        .update(instrument ? 'instrument' : '')
        .digest('hex');
    },
    process(
      src: string,
      filename: Path,
      config: ProjectConfig,
      transformOptions?: TransformOptions,
    ): string | TransformedSource {
      const altExts = config.moduleFileExtensions.map(
        extension => '.' + extension,
      );
      if (babelUtil && !babelUtil.canCompile(filename, altExts)) {
        return src;
      }

      const theseOptions = Object.assign({filename}, options);
      if (transformOptions && transformOptions.instrument) {
        theseOptions.auxiliaryCommentBefore = ' istanbul ignore next ';
        // Copied from jest-runtime transform.js
        theseOptions.plugins = theseOptions.plugins.concat([
          [
            babelIstanbulPlugin,
            {
              // files outside `cwd` will not be instrumented
              cwd: config.rootDir,
              exclude: [],
            },
          ],
        ]);
      }

      // babel v7 might return null in the case when the file has been ignored.
      const transformResult = babelTransform(src, theseOptions);

      if (!transformResult) {
        return src;
      }

      const shouldReturnCodeOnly =
        transformOptions == null ||
        transformOptions.returnSourceString == null ||
        transformOptions.returnSourceString === true;

      return shouldReturnCodeOnly ? transformResult.code : transformResult;
    },
  };
};
Example #28
0
 const babelIgnoreRegexes = transpilationConfig.skip.map(item => {
     return babelCore.util.regexify(item);
 });
Example #29
0
export function shouldIgnore(loc) {
  return util.shouldIgnore(loc, index.opts.ignore, index.opts.only);
}