1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const browser_sync_1 = tslib_1.__importDefault(require("browser-sync"));
|
5 | const compression_1 = tslib_1.__importDefault(require("compression"));
|
6 | const connect_history_api_fallback_1 = tslib_1.__importDefault(require("connect-history-api-fallback"));
|
7 | const interpret_1 = tslib_1.__importDefault(require("interpret"));
|
8 | const lodash_1 = require("lodash");
|
9 | const path_1 = tslib_1.__importDefault(require("path"));
|
10 | const utils_1 = require("./utils");
|
11 | const WebpackOptions_1 = require("./WebpackOptions");
|
12 | function registerCompiler(moduleDescriptor) {
|
13 | if (moduleDescriptor) {
|
14 | if (typeof moduleDescriptor === "string") {
|
15 | require(moduleDescriptor);
|
16 | }
|
17 | else if (!Array.isArray(moduleDescriptor)) {
|
18 | moduleDescriptor.register(require(moduleDescriptor.module));
|
19 | }
|
20 | else {
|
21 | for (const moduleName of moduleDescriptor) {
|
22 | if (moduleName) {
|
23 | try {
|
24 | registerCompiler(moduleName);
|
25 | break;
|
26 | }
|
27 | catch (e) {
|
28 | }
|
29 | }
|
30 | }
|
31 | }
|
32 | }
|
33 | }
|
34 | const createBrowserSyncOptions = (options) => {
|
35 | const webpackConfigFile = path_1.default.join(process.cwd(), options.config);
|
36 | const webpackConfigFileExt = path_1.default.extname(webpackConfigFile);
|
37 | registerCompiler(interpret_1.default.extensions[webpackConfigFileExt]);
|
38 | const webpackConfig = require(webpackConfigFile);
|
39 | let middlewares = [];
|
40 | if (options.historyApiFallback) {
|
41 | middlewares = middlewares.concat(connect_history_api_fallback_1.default({
|
42 | index: "/"
|
43 | }));
|
44 | }
|
45 | if (options.webpack) {
|
46 | middlewares = middlewares.concat(WebpackOptions_1.createMiddlewaresForWebpack(webpackConfig, options.index, options.hot));
|
47 | }
|
48 | if (options.compress) {
|
49 | middlewares = middlewares.concat(compression_1.default({ level: 6 }));
|
50 | }
|
51 | if (options.proxy) {
|
52 | return Object.assign(Object.assign({}, (lodash_1.get(webpackConfig, "devServer.browserSync"))), { proxy: {
|
53 | target: options.proxy,
|
54 | middleware: middlewares
|
55 | } });
|
56 | }
|
57 | return Object.assign(Object.assign(Object.assign({}, (lodash_1.get(webpackConfig, "devServer.browserSync"))), (process.env.PORT ? ({
|
58 | port: Number(process.env.PORT)
|
59 | }) : {})), { server: {
|
60 | baseDir: utils_1.getBaseDir(webpackConfig.output.path, webpackConfig.output.publicPath),
|
61 | index: path_1.default.join(webpackConfig.output.publicPath || "/", options.index),
|
62 | middleware: middlewares,
|
63 | }, notify: false });
|
64 | };
|
65 | exports.create = (opts) => browser_sync_1.default(createBrowserSyncOptions(opts));
|