spinjs
Version:
<p align="center"><a href="#"><img width="150" src="https://rawgit.com/sysgears/spinjs/master/logo.svg"></a></p>
118 lines • 5.66 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var fs = require("fs");
var path = require("path");
var JSRuleFinder_1 = require("./shared/JSRuleFinder");
var babelRegisterDone = false;
var registerBabel = function (builder) {
if (!babelRegisterDone) {
require('babel-register')({
presets: ['babel-preset-env', 'babel-preset-flow'],
ignore: /node_modules(?!\/(haul|react-native))/,
retainLines: true,
sourceMaps: 'inline'
});
babelRegisterDone = true;
}
};
var ReactNativePlugin = (function () {
function ReactNativePlugin() {
}
ReactNativePlugin.prototype.configure = function (builder, spin) {
var stack = builder.stack;
if (stack.hasAll(['react-native', 'webpack'])) {
registerBabel(builder);
var webpack = builder.require('webpack');
var mobileAssetTest = /\.(bmp|gif|jpg|jpeg|png|psd|svg|webp|m4v|aac|aiff|caf|m4a|mp3|wav|html|pdf|ttf)$/;
var AssetResolver = builder.require('haul/src/resolvers/AssetResolver');
var HasteResolver = builder.require('haul/src/resolvers/HasteResolver');
var reactNativeRule_1 = {
loader: builder.require.probe('heroku-babel-loader') ? 'heroku-babel-loader' : 'babel-loader',
options: spin.merge({
babelrc: false,
cacheDirectory: builder.cache === false || (builder.cache === 'auto' && !spin.dev)
? false
: path.join(builder.cache === true ? '.cache' : builder.cache, 'babel-loader'),
compact: !spin.dev,
presets: ['babel-preset-expo'].concat(spin.dev ? [] : [['babel-preset-minify', { mangle: false }]]),
plugins: ['haul/src/utils/fixRequireIssues']
}, builder.babelConfig)
};
var jsRuleFinder_1 = new JSRuleFinder_1.default(builder);
var jsRule = jsRuleFinder_1.findAndCreateJSRule();
jsRule.exclude = /node_modules\/(?!react-native.*|@expo|expo|lottie-react-native|haul|pretty-format|react-navigation)$/;
var origUse_1 = jsRule.use || require.resolve('./shared/identity-loader');
jsRule.use = function (req) { return (req.resource.indexOf('node_modules') >= 0 ? reactNativeRule_1 : origUse_1); };
builder.config.resolve.extensions = ["." + stack.platform + ".", '.native.', '.']
.map(function (prefix) { return jsRuleFinder_1.extensions.map(function (ext) { return prefix + ext; }); })
.reduce(function (acc, val) { return acc.concat(val); });
var reactVer = builder.require('react-native/package.json').version.split('.')[1] >= 43 ? 16 : 15;
var polyfillCode = fs
.readFileSync(require.resolve("../../react-native-polyfills/react-native-polyfill-" + reactVer))
.toString();
var VirtualModules = builder.require('webpack-virtual-modules');
builder.config = spin.merge(builder.config, {
module: {
rules: [
{ parser: { requireEnsure: false } },
{
test: mobileAssetTest,
use: {
loader: 'spinjs/lib/plugins/react-native/assetLoader',
query: {
platform: stack.platform,
root: builder.require.cwd,
cwd: spin.cwd,
bundle: false
}
}
}
]
},
resolve: {
plugins: [
new HasteResolver({
directories: [builder.require.resolve('react-native')]
}),
new AssetResolver({
platform: stack.platform,
test: mobileAssetTest
})
],
mainFields: ['react-native', 'browser', 'main']
},
plugins: [new VirtualModules({ 'node_modules/@virtual/react-native-polyfill.js': polyfillCode })],
target: 'webworker'
});
if (stack.hasAny('dll')) {
builder.config = spin.merge(builder.config, {
entry: {
vendor: ['@virtual/react-native-polyfill']
}
});
}
else {
var idx = builder.config.entry.index.indexOf('babel-polyfill');
if (idx >= 0) {
builder.config.entry.index.splice(idx, 1);
}
builder.config = spin.merge({
plugins: builder.sourceMap
? [
new webpack.SourceMapDevToolPlugin({
test: new RegExp("\\.bundle$"),
filename: '[file].map'
})
]
: [],
entry: {
index: ['@virtual/react-native-polyfill']
}
}, builder.config);
}
}
};
return ReactNativePlugin;
}());
exports.default = ReactNativePlugin;
//# sourceMappingURL=ReactNativePlugin.js.map