UNPKG

spinjs

Version:

<p align="center"><a href="#"><img width="150" src="https://rawgit.com/sysgears/spin.js/master/logo.svg"></a></p>

121 lines 5.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var requireModule_1 = require("../requireModule"); var JSRuleFinder_1 = require("./shared/JSRuleFinder"); var babelRegisterDone = false; var registerBabel = function () { if (!babelRegisterDone) { requireModule_1.default('babel-register')({ presets: [ requireModule_1.default.resolve('babel-preset-es2015'), requireModule_1.default.resolve('babel-preset-flow') ], ignore: /node_modules(?!\/(haul|react-native))/, retainLines: true, sourceMaps: 'inline', }); requireModule_1.default('babel-polyfill'); babelRegisterDone = true; } }; var ReactNativePlugin = (function () { function ReactNativePlugin() { } ReactNativePlugin.prototype.configure = function (builder, spin) { var stack = builder.stack; if (stack.hasAll(['react-native', 'webpack'])) { registerBabel(); var webpack = requireModule_1.default('webpack'); var mobileAssetTest = /\.(bmp|gif|jpg|jpeg|png|psd|svg|webp|m4v|aac|aiff|caf|m4a|mp3|wav|html|pdf|ttf)$/; var AssetResolver_1 = requireModule_1.default('haul/src/resolvers/AssetResolver'); var HasteResolver = requireModule_1.default('haul/src/resolvers/HasteResolver'); var reactNativeRule_1 = { loader: requireModule_1.default.resolve('babel-loader'), options: { cacheDirectory: spin.dev, presets: [requireModule_1.default.resolve('babel-preset-expo')], plugins: [ requireModule_1.default.resolve('haul/src/utils/fixRequireIssues'), ], }, }; var jsRuleFinder_1 = new JSRuleFinder_1.default(builder); var jsRule = jsRuleFinder_1.rule; jsRule.exclude = /node_modules\/(?!react-native|@expo|expo|lottie-react-native|haul|pretty-format|react-navigation)$/; var origUse_1 = jsRule.use; jsRule.use = function (req) { var result; if (req.resource.indexOf('node_modules') >= 0) { result = reactNativeRule_1; } else { result = origUse_1; } return result; }; 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); }); builder.config = spin.merge(builder.config, { module: { rules: [{ test: mobileAssetTest, use: { loader: require.resolve('./react-native/assetLoader'), query: { platform: stack.platform, root: path.resolve('.'), bundle: false }, }, }], }, resolve: { plugins: [ new HasteResolver({ directories: [path.resolve('node_modules/react-native')], }), new AssetResolver_1({ platform: stack.platform, test: mobileAssetTest }), ], mainFields: ['react-native', 'browser', 'main'] }, }); var reactVer = requireModule_1.default('react-native/package.json').version.split('.')[1] >= 43 ? 16 : 15; if (stack.hasAny('dll')) { builder.config = spin.merge(builder.config, { entry: { vendor: [ require.resolve("./react-native/react-native-polyfill-" + reactVer + ".js"), ], }, }); } 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: [ new webpack.SourceMapDevToolPlugin({ test: new RegExp("\\.(" + jsRuleFinder_1.extensions.join('|') + "|css|bundle)($|\\?)", 'i'), filename: '[file].map', }), ], entry: { index: [ require.resolve("./react-native/react-native-polyfill-" + reactVer + ".js") ], }, }, builder.config); } } }; return ReactNativePlugin; }()); exports.default = ReactNativePlugin; //# sourceMappingURL=ReactNativePlugin.js.map