1 | "use strict";
|
2 | var __assign = (this && this.__assign) || function () {
|
3 | __assign = Object.assign || function(t) {
|
4 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5 | s = arguments[i];
|
6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7 | t[p] = s[p];
|
8 | }
|
9 | return t;
|
10 | };
|
11 | return __assign.apply(this, arguments);
|
12 | };
|
13 | var __spreadArrays = (this && this.__spreadArrays) || function () {
|
14 | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
15 | for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
16 | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
17 | r[k] = a[j];
|
18 | return r;
|
19 | };
|
20 | exports.__esModule = true;
|
21 | var lodash_1 = require("lodash");
|
22 | var MemoryFS = require("memory-fs");
|
23 | var path = require("path");
|
24 | var webpack = require("webpack");
|
25 | var webpackDevMiddleware = require("webpack-dev-middleware");
|
26 | var webpackHotMiddleware = require("webpack-hot-middleware");
|
27 | exports.HMR_ENTRY = "webpack-hot-middleware/client";
|
28 | exports.getHmrPluginsByVersion = function () {
|
29 | var version = require("webpack/package.json").version;
|
30 | var majarVersion = String(version).split(".")[0];
|
31 | switch (majarVersion) {
|
32 | case "1":
|
33 | throw new Error("not support webpack@1");
|
34 | case "2":
|
35 | default:
|
36 | return [
|
37 | webpack.HotModuleReplacementPlugin
|
38 | ];
|
39 | }
|
40 | };
|
41 | var concatHMREntry = function (entry) { return [exports.HMR_ENTRY].concat(entry); };
|
42 | var isOneOfPlugins = function (PluginList, plugin) {
|
43 | return lodash_1.reduce(PluginList, function (result, Plugin) { return (result || (plugin instanceof Plugin)); }, false);
|
44 | };
|
45 | exports.patchEntryWithHMR = function (entry) {
|
46 | if (lodash_1.isObject(entry)) {
|
47 | return lodash_1.mapValues(entry, concatHMREntry);
|
48 | }
|
49 | return concatHMREntry(entry);
|
50 | };
|
51 | exports.patchPlugins = function (plugins) {
|
52 | var hmrPlugins = exports.getHmrPluginsByVersion();
|
53 | var cleanedPlugins = lodash_1.dropWhile(plugins, function (plugin) { return isOneOfPlugins(hmrPlugins, plugin); });
|
54 | return lodash_1.concat(cleanedPlugins, lodash_1.map(hmrPlugins, function (Plugin) { return new Plugin(); }));
|
55 | };
|
56 | exports.patchWebConfigWithHMR = function (webpackConfig) { return (__assign(__assign({}, webpackConfig), { entry: exports.patchEntryWithHMR(webpackConfig.entry), plugins: exports.patchPlugins(webpackConfig.plugins) })); };
|
57 | exports.createMiddlewaresForWebpack = function (webpackConfig, index, hot) {
|
58 | if (hot === void 0) { hot = false; }
|
59 | var patchedWebpackConfig = hot
|
60 | ? exports.patchWebConfigWithHMR(webpackConfig)
|
61 | : webpackConfig;
|
62 | var bundler = webpack(patchedWebpackConfig);
|
63 | var fs = new MemoryFS();
|
64 | bundler.outputFileSystem = fs;
|
65 | var devMiddleware = webpackDevMiddleware(bundler, {
|
66 | publicPath: (patchedWebpackConfig.output || {}).publicPath,
|
67 | stats: patchedWebpackConfig.stats || {
|
68 | colors: true,
|
69 | reasons: false,
|
70 | hash: false,
|
71 | version: false,
|
72 | timings: true,
|
73 | chunks: false,
|
74 | chunkModules: false,
|
75 | cached: false
|
76 | }
|
77 | });
|
78 | var devServerMiddlewares = [
|
79 | devMiddleware,
|
80 | (function (req, res, next) {
|
81 | if (req.method === "GET" && req.url === "/") {
|
82 | devMiddleware.waitUntilValid(function () {
|
83 | var indexFile = path.join(webpackConfig.output.path, index);
|
84 | res.end(fs.readFileSync(indexFile));
|
85 | });
|
86 | }
|
87 | else {
|
88 | next();
|
89 | }
|
90 | })
|
91 | ];
|
92 | if (hot) {
|
93 | return __spreadArrays(devServerMiddlewares, [
|
94 | webpackHotMiddleware(bundler)
|
95 | ]);
|
96 | }
|
97 | return devServerMiddlewares;
|
98 | };
|