timpla
Version:
An optimal website development experience for [server-side] web frameworks.
122 lines • 5.74 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
var MBrowserSync = require("browser-sync");
var chalk_1 = require("chalk");
var log = require("fancy-log");
var os = require("os");
var webpack = require("webpack");
var internal_1 = require("../internal");
exports.browserSync = function (timplaConfig) { return function (cb) {
var browserSyncConfig = timplaConfig.browserSync;
if (!browserSyncConfig) {
log(chalk_1.default.yellow('========= Browsersync disabled ========='));
cb();
return;
}
var devConfig = timplaConfig.development;
var middlewareConfig = devConfig.middlewareConfig;
var proxyConfig = browserSyncConfig.proxy || null;
if (typeof proxyConfig === 'string') {
browserSyncConfig.proxy = {
target: proxyConfig,
};
}
else if (!proxyConfig && !browserSyncConfig.server && !devConfig.disableServerFallback) {
browserSyncConfig.server = {
baseDir: timplaConfig.dest,
};
}
// Resolve path from project
if (browserSyncConfig.server &&
typeof browserSyncConfig.server === 'object' &&
!(browserSyncConfig.server instanceof Array) &&
browserSyncConfig.server.baseDir) {
var baseDir = browserSyncConfig.server.baseDir;
browserSyncConfig.server.baseDir = Array.isArray(baseDir)
? baseDir.map(function (e) { return internal_1.projectPath(e); })
: internal_1.projectPath(baseDir);
}
// Override open with TIMPLA_RELOAD check so as not to annoy dev mode users!
browserSyncConfig.open = !internal_1.TIMPLA_PROCESS.isTimplaReloaded && browserSyncConfig.open;
var server = (browserSyncConfig.proxy ||
browserSyncConfig.server);
var prepMiddleware = [];
var isCustomisable = typeof server === 'object' && !(server instanceof Array);
// can be a choke point when logging, so let's clear it first...
// we'll re-set this after we log the config
if (server && server.middleware) {
prepMiddleware.push.apply(prepMiddleware, __spread(server.middleware));
delete server.middleware;
}
// Enhance middleware
if (isCustomisable && middlewareConfig) {
var webpackConfig = internal_1.webpackMultiConfig(timplaConfig)('development');
var compiler = webpack(webpackConfig);
var webpackDevMiddleware = internal_1.sureLazyImport('webpack-dev-middleware');
var webpackHotMiddleware = internal_1.sureLazyImport('webpack-hot-middleware');
var historyApiFallback = internal_1.sureLazyImport('connect-history-api-fallback');
// Two ways to disable the SPA middleware
var enableSpa = !!middlewareConfig.connectHistoryApiFallbackMiddleware && !proxyConfig;
// Two ways to disable HMR
var enableWebpackHotMiddleware = !!middlewareConfig.webpackHotMiddleware && !!devConfig.webpackHotMiddlewareClient;
// Add config-controlled middleware
prepMiddleware.push.apply(prepMiddleware, __spread([
middlewareConfig.webpackDevMiddleware &&
internal_1.setDisplayName(webpackDevMiddleware(compiler, __assign({ publicPath: webpackConfig.output.publicPath, watchOptions: browserSyncConfig.watchOptions || {} }, middlewareConfig.webpackDevMiddleware)), 'webpack-dev-middleware'),
enableWebpackHotMiddleware &&
internal_1.setDisplayName(webpackHotMiddleware(compiler, __assign({ log: false }, middlewareConfig.webpackHotMiddleware)), 'webpack-hot-middleware'),
// Useful for developing spas
// Redirects requests to root index.html if no corresponding files are found
enableSpa &&
internal_1.setDisplayName(historyApiFallback(middlewareConfig.connectHistoryApiFallbackMiddleware), 'connect-history-api-fallback'),
].filter(Boolean)));
}
// User should be informed of the modified browsersyncConfig
internal_1.devLoggerTitle('BrowserSync config');
internal_1.devLogger('%O', browserSyncConfig);
// Switch server with cloned since we're done logging
if (server) {
server.middleware = prepMiddleware;
var middlewareMessage = 'No middleware used!';
if (Array.isArray(server.middleware) && server.middleware.length) {
middlewareMessage = server.middleware
.map(function (e) { return e.displayName || e.constructor.name || e.name; })
.join(', ');
}
internal_1.devLogger('middleware', chalk_1.default.magenta(middlewareMessage), os.EOL);
}
MBrowserSync.init(browserSyncConfig);
cb();
}; };
//# sourceMappingURL=browserSync.js.map