UNPKG

3.33 kBJavaScriptView Raw
1"use strict";
2function __export(m) {
3 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4}
5var webpack_state_1 = require('./webpack-state');
6__export(require('./webpack-state'));
7function hotModuleReplacement(bootloader, module, options) {
8 if (options === void 0) { options = {}; }
9 var LOCALSTORAGE_KEY = options.LOCALSTORAGE_KEY || '@@WEBPACK_INITIAL_DATA';
10 var LOCAL = options.localStorage || false;
11 var TOKEN = options.storeToken || webpack_state_1.WebpackState;
12 var DISPOSE = options.globalDispose || 'WEBPACK_HMR_beforeunload';
13 var SAVE_STATE = options.saveState || saveState;
14 var ASSIGN = options.assignState || Object.assign;
15 var disposed = false;
16 var DATA = options.data || module.hot.data;
17 var COMPONENT_REF = null;
18 function saveState(appState) {
19 var json = appState.toJSON();
20 if (LOCAL) {
21 console.time('localStorage');
22 localStorage.setItem(LOCALSTORAGE_KEY, JSON.stringify(appState));
23 console.timeEnd('localStorage');
24 }
25 return json;
26 }
27 console.log('DATA', DATA);
28 if (!DATA && LOCAL) {
29 try {
30 console.time('start localStorage');
31 DATA = JSON.parse(localStorage.getItem(LOCALSTORAGE_KEY)) || DATA;
32 console.timeEnd('start localStorage');
33 }
34 catch (e) {
35 console.log('JSON.parse Error', e);
36 }
37 }
38 console.time('bootstrap');
39 if (document.readyState === 'complete') {
40 bootloader(DATA)
41 .then(function (cmpRef) { return COMPONENT_REF = cmpRef; })
42 .then((function (cmpRef) { return (console.timeEnd('bootstrap'), cmpRef); }));
43 }
44 else {
45 document.addEventListener('DOMContentLoaded', function () {
46 bootloader(DATA)
47 .then(function (cmpRef) { return COMPONENT_REF = cmpRef; })
48 .then((function (cmpRef) { return (console.timeEnd('bootstrap'), cmpRef); }));
49 });
50 }
51 function beforeunload(event) {
52 var appState = COMPONENT_REF.injector.get(TOKEN);
53 return SAVE_STATE(appState);
54 }
55 window[DISPOSE] = function () {
56 disposed = true;
57 window.removeEventListener('beforeunload', beforeunload);
58 if (LOCAL) {
59 localStorage.removeItem(LOCALSTORAGE_KEY);
60 }
61 };
62 module.hot.accept();
63 window.addEventListener('beforeunload', beforeunload);
64 module.hot.dispose(function (data) {
65 console.time('dispose');
66 var componentNode = COMPONENT_REF.location.nativeElement;
67 var newNode = document.createElement(componentNode.tagName);
68 // display none
69 var currentDisplay = newNode.style.display;
70 newNode.style.display = 'none';
71 var parentNode = componentNode.parentNode;
72 parentNode.insertBefore(newNode, componentNode);
73 var appState = COMPONENT_REF.injector.get(TOKEN);
74 var json = SAVE_STATE(appState);
75 ASSIGN(data, json);
76 COMPONENT_REF.dispose();
77 newNode.style.display = currentDisplay;
78 if (!disposed) {
79 window.removeEventListener('beforeunload', beforeunload);
80 }
81 disposed = true;
82 console.timeEnd('dispose');
83 });
84}
85exports.hotModuleReplacement = hotModuleReplacement;
86//# sourceMappingURL=index.js.map
\No newline at end of file