mirror of
https://github.com/status-im/react-native.git
synced 2025-01-16 04:24:15 +00:00
51d8ed92d5
Summary: public We want to support Hot Loading on the packager itself instead of on the transformer. This will allow us to enable it on OSS (and for any scripting language, yay!). For now to enable Hot Loading the packager's internals transforms need to be manually enabled (start packager with `--enable-internal-transforms`). I think the internal pipeline should always be enabled as it doesn't affect performance if there're no transforms and the user can disable Hot Loading through the setting on the app though. I'll tweak this on a follow up commit. Reviewed By: vjeux Differential Revision: D2801343 fb-gh-sync-id: 563984d77b10c3925fda6fd5616b814cdbea2c66
79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-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.
|
|
*
|
|
* Note: This is a fork of the fb-specific transform.js
|
|
*/
|
|
'use strict';
|
|
|
|
const babel = require('babel-core');
|
|
const fs = require('fs');
|
|
const inlineRequires = require('fbjs-scripts/babel-6/inline-requires');
|
|
const json5 = require('json5');
|
|
const path = require('path');
|
|
const ReactPackager = require('./react-packager');
|
|
|
|
const babelRC =
|
|
json5.parse(
|
|
fs.readFileSync(
|
|
path.resolve(__dirname, 'react-packager', '.babelrc')));
|
|
|
|
function transform(src, filename, options) {
|
|
options = options || {};
|
|
|
|
const extraPlugins = ['external-helpers-2'];
|
|
const extraConfig = {
|
|
filename,
|
|
sourceFileName: filename,
|
|
};
|
|
|
|
const config = Object.assign({}, babelRC, extraConfig);
|
|
|
|
if (options.inlineRequires) {
|
|
extraPlugins.push(inlineRequires);
|
|
}
|
|
config.plugins = extraPlugins.concat(config.plugins);
|
|
|
|
// Manually resolve all default Babel plugins. babel.transform will attempt to resolve
|
|
// all base plugins relative to the file it's compiling. This makes sure that we're
|
|
// using the plugins installed in the react-native package.
|
|
config.plugins = config.plugins.map(function(plugin) {
|
|
// Normalise plugin to an array.
|
|
if (!Array.isArray(plugin)) {
|
|
plugin = [plugin];
|
|
}
|
|
// Only resolve the plugin if it's a string reference.
|
|
if (typeof plugin[0] === 'string') {
|
|
plugin[0] = require(`babel-plugin-${plugin[0]}`);
|
|
plugin[0] = plugin[0].__esModule ? plugin[0].default : plugin[0];
|
|
}
|
|
return plugin;
|
|
});
|
|
|
|
const result = babel.transform(src, Object.assign({}, babelRC, config));
|
|
|
|
return {
|
|
code: result.code,
|
|
filename: filename,
|
|
};
|
|
}
|
|
|
|
module.exports = function(data, callback) {
|
|
let result;
|
|
try {
|
|
result = transform(data.sourceCode, data.filename, data.options);
|
|
} catch (e) {
|
|
callback(e);
|
|
return;
|
|
}
|
|
|
|
callback(null, result);
|
|
};
|
|
|
|
// export for use in jest
|
|
module.exports.transform = transform;
|