/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; const babelRegisterOnly = require('metro/src/babelRegisterOnly'); const escapeRegExp = require('lodash/escapeRegExp'); const path = require('path'); const BABEL_ENABLED_PATHS = ['local-cli', 'metro']; /** * We use absolute paths for matching only the top-level folders reliably. For * example, we would not want to match some deeply nested forder that happens to * have the same name as one of `BABEL_ENABLED_PATHS`. */ function buildRegExps(basePath, dirPaths) { return dirPaths.map( folderPath => folderPath === 'metro' // metro uses flow (for example) which needs to be stripped out w/babel. // it'll resolve to .../metro/src/index.js we want root ? path.resolve(require.resolve('metro'), '..') // Babel `only` option works with forward slashes in the RegExp so replace // backslashes for Windows. : folderPath instanceof RegExp ? new RegExp( `^${escapeRegExp( path.resolve(basePath, '.').replace(/\\/g, '/') )}/${folderPath.source}`, folderPath.flags ) : new RegExp( `^${escapeRegExp( path.resolve(basePath, folderPath).replace(/\\/g, '/') )}` ) ); } function getOnlyList() { return buildRegExps(__dirname, BABEL_ENABLED_PATHS); } /** * Centralized place to register all the directories that need a Babel * transformation before being fed to Node.js. Notably, this is necessary to * support Flow type annotations. */ function setupBabel() { babelRegisterOnly(getOnlyList()); } setupBabel.buildRegExps = buildRegExps; setupBabel.getOnlyList = getOnlyList; module.exports = setupBabel;