"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.printInstructions = printInstructions; exports.printPreviewNotice = printPreviewNotice; exports.default = createWebpackCompiler; exports.printSuccessMessages = printSuccessMessages; function _chalk() { const data = _interopRequireDefault(require("chalk")); _chalk = function () { return data; }; return data; } function _clearConsole() { const data = _interopRequireDefault(require("react-dev-utils/clearConsole")); _clearConsole = function () { return data; }; return data; } function _formatWebpackMessages() { const data = _interopRequireDefault(require("react-dev-utils/formatWebpackMessages")); _formatWebpackMessages = function () { return data; }; return data; } function _boxen() { const data = _interopRequireDefault(require("boxen")); _boxen = function () { return data; }; return data; } function ProjectUtils() { const data = _interopRequireWildcard(require("./project/ProjectUtils")); ProjectUtils = function () { return data; }; return data; } function _Web() { const data = require("./Web"); _Web = function () { return data; }; return data; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Copyright (c) 2015-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. */ const CONSOLE_TAG = 'expo'; const SHOULD_CLEAR_CONSOLE = (0, _Web().shouldWebpackClearLogs)(); const PLATFORM_TAG = ProjectUtils().getPlatformTag('web'); const withTag = (...messages) => [PLATFORM_TAG + ' ', ...messages].join(''); function log(projectRoot, message, showInDevtools = true) { if (showInDevtools) { ProjectUtils().logInfo(projectRoot, CONSOLE_TAG, message); } else { console.log(message); } } function logWarning(projectRoot, message) { ProjectUtils().logWarning(projectRoot, CONSOLE_TAG, withTag(message)); } function logError(projectRoot, message) { ProjectUtils().logError(projectRoot, CONSOLE_TAG, withTag(message)); } function printInstructions(projectRoot, { appName, urls, showInDevtools, showHelp }) { printPreviewNotice(projectRoot, showInDevtools); let message = '\n'; message += `${ProjectUtils().getPlatformTag('React')} You can now view ${_chalk().default.bold(appName)} in the browser.\n`; if (urls.lanUrlForTerminal) { message += `\n ${_chalk().default.bold('Local:')} ${urls.localUrlForTerminal}`; message += `\n ${_chalk().default.bold('On Your Network:')} ${urls.lanUrlForTerminal}`; } else { message += `\n ${urls.localUrlForTerminal}`; } message += `\n\nNote that the development build is not optimized.\n`; message += `\n \u203A To create a production build, run ${_chalk().default.bold(`expo build:web`)}`; message += `\n \u203A Press ${_chalk().default.bold(`Ctrl+C`)} to exit.`; log(projectRoot, message, showInDevtools); if (showHelp) { const PLATFORM_TAG = ProjectUtils().getPlatformTag('Expo'); log(projectRoot, `\n${PLATFORM_TAG} Press ${_chalk().default.bold('?')} to show a list of all available commands.`, showInDevtools); } } function printPreviewNotice(projectRoot, showInDevtools) { log(projectRoot, (0, _boxen().default)(_chalk().default.yellow('Web support in Expo is experimental and subject to breaking changes.\n' + 'Do not use this in production yet.'), { borderColor: 'yellow', padding: 1 }), showInDevtools); } function createWebpackCompiler({ projectRoot, appName, config, urls, nonInteractive, webpackFactory, onFinished }) { // "Compiler" is a low-level interface to Webpack. // It lets us listen to some events and provide our own custom messages. const compiler = webpackFactory(config); // "invalid" event fires when you have changed a file, and Webpack is // recompiling a bundle. WebpackDevServer takes care to pause serving the // bundle, so if you refresh, it'll wait instead of serving the old one. // "invalid" is short for "bundle invalidated", it doesn't imply any errors. compiler.hooks.invalid.tap('invalid', () => { log(projectRoot, '\nCompiling...'); }); let isFirstCompile = true; // "done" event fires when Webpack has finished recompiling the bundle. // Whether or not you have warnings or errors, you will get this event. compiler.hooks.done.tap('done', async stats => { if (SHOULD_CLEAR_CONSOLE && !nonInteractive) { (0, _clearConsole().default)(); } // We have switched off the default Webpack output in WebpackDevServer // options so we are going to "massage" the warnings and errors and present // them in a readable focused way. // We only construct the warnings and errors for speed: // https://github.com/facebook/create-react-app/issues/4492#issuecomment-421959548 const statsData = stats.toJson({ all: false, warnings: true, errors: true }); const messages = (0, _formatWebpackMessages().default)(statsData); const isSuccessful = !messages.errors.length && !messages.warnings.length; if (isSuccessful) { (0, _Web().logEnvironmentInfo)(projectRoot, CONSOLE_TAG, config); } if (isSuccessful && !isFirstCompile && !nonInteractive) { printInstructions(projectRoot, { appName, urls, showInDevtools: isFirstCompile, showHelp: true }); } onFinished(); isFirstCompile = false; // If errors exist, only show errors. if (messages.errors.length) { // Only keep the first error. Others are often indicative // of the same problem, but confuse the reader with noise. if (messages.errors.length > 1) { messages.errors.length = 1; } logError(projectRoot, _chalk().default.red('Failed to compile.\n') + messages.errors.join('\n\n')); return; } // Show warnings if no errors were found. if (messages.warnings.length) { logWarning(projectRoot, _chalk().default.yellow('Compiled with warnings.\n') + messages.warnings.join('\n\n')); } }); return compiler; } function printSuccessMessages({ projectRoot, appName, urls, config, isFirstCompile, nonInteractive }) { log(projectRoot, _chalk().default.bold.cyan(`Compiled successfully!`)); printPreviewNotice(projectRoot, isFirstCompile); (0, _Web().logEnvironmentInfo)(projectRoot, CONSOLE_TAG, config); if (!nonInteractive || isFirstCompile) { printInstructions(projectRoot, { appName, urls, showInDevtools: isFirstCompile, showHelp: false }); } } //# sourceMappingURL=__sourcemaps__/createWebpackCompiler.js.map