| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | /*global $hash$ installedModules $require$ hotDownloadManifest hotDownloadUpdateChunk modules */ | 
					
						
							|  |  |  | module.exports = function() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var hotApplyOnUpdate = true; | 
					
						
							|  |  |  | 	var hotCurrentHash = $hash$; // eslint-disable-line no-unused-vars
 | 
					
						
							|  |  |  | 	var hotCurrentModuleData = {}; | 
					
						
							|  |  |  | 	var hotCurrentParents = []; // eslint-disable-line no-unused-vars
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotCreateRequire(moduleId) { // eslint-disable-line no-unused-vars
 | 
					
						
							|  |  |  | 		var me = installedModules[moduleId]; | 
					
						
							|  |  |  | 		if(!me) return $require$; | 
					
						
							|  |  |  | 		var fn = function(request) { | 
					
						
							|  |  |  | 			if(me.hot.active) { | 
					
						
							|  |  |  | 				if(installedModules[request]) { | 
					
						
							|  |  |  | 					if(installedModules[request].parents.indexOf(moduleId) < 0) | 
					
						
							|  |  |  | 						installedModules[request].parents.push(moduleId); | 
					
						
							|  |  |  | 					if(me.children.indexOf(request) < 0) | 
					
						
							|  |  |  | 						me.children.push(request); | 
					
						
							|  |  |  | 				} else hotCurrentParents = [moduleId]; | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				console.warn("[HMR] unexpected require(" + request + ") from disposed module " + moduleId); | 
					
						
							|  |  |  | 				hotCurrentParents = []; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return $require$(request); | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		for(var name in $require$) { | 
					
						
							|  |  |  | 			if(Object.prototype.hasOwnProperty.call($require$, name)) { | 
					
						
							|  |  |  | 				fn[name] = $require$[name]; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 		fn.e = function(chunkId) { | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 			if(hotStatus === "ready") | 
					
						
							|  |  |  | 				hotSetStatus("prepare"); | 
					
						
							|  |  |  | 			hotChunksLoading++; | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			return $require$.e(chunkId).then(finishChunkLoading, function(err) { | 
					
						
							|  |  |  | 				finishChunkLoading(); | 
					
						
							|  |  |  | 				throw err; | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			function finishChunkLoading() { | 
					
						
							|  |  |  | 				hotChunksLoading--; | 
					
						
							|  |  |  | 				if(hotStatus === "prepare") { | 
					
						
							|  |  |  | 					if(!hotWaitingFilesMap[chunkId]) { | 
					
						
							|  |  |  | 						hotEnsureUpdateChunk(chunkId); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					if(hotChunksLoading === 0 && hotWaitingFiles === 0) { | 
					
						
							|  |  |  | 						hotUpdateDownloaded(); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		}; | 
					
						
							|  |  |  | 		return fn; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotCreateModule(moduleId) { // eslint-disable-line no-unused-vars
 | 
					
						
							|  |  |  | 		var hot = { | 
					
						
							|  |  |  | 			// private stuff
 | 
					
						
							|  |  |  | 			_acceptedDependencies: {}, | 
					
						
							|  |  |  | 			_declinedDependencies: {}, | 
					
						
							|  |  |  | 			_selfAccepted: false, | 
					
						
							|  |  |  | 			_selfDeclined: false, | 
					
						
							|  |  |  | 			_disposeHandlers: [], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Module API
 | 
					
						
							|  |  |  | 			active: true, | 
					
						
							|  |  |  | 			accept: function(dep, callback) { | 
					
						
							|  |  |  | 				if(typeof dep === "undefined") | 
					
						
							|  |  |  | 					hot._selfAccepted = true; | 
					
						
							|  |  |  | 				else if(typeof dep === "function") | 
					
						
							|  |  |  | 					hot._selfAccepted = dep; | 
					
						
							| 
									
										
										
										
											2015-06-28 04:47:51 +08:00
										 |  |  | 				else if(typeof dep === "object") | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 					for(var i = 0; i < dep.length; i++) | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 						hot._acceptedDependencies[dep[i]] = callback; | 
					
						
							| 
									
										
										
										
											2015-06-28 04:47:51 +08:00
										 |  |  | 				else | 
					
						
							|  |  |  | 					hot._acceptedDependencies[dep] = callback; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 			decline: function(dep) { | 
					
						
							|  |  |  | 				if(typeof dep === "undefined") | 
					
						
							|  |  |  | 					hot._selfDeclined = true; | 
					
						
							|  |  |  | 				else if(typeof dep === "number") | 
					
						
							|  |  |  | 					hot._declinedDependencies[dep] = true; | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 				else | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 					for(var i = 0; i < dep.length; i++) | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 						hot._declinedDependencies[dep[i]] = true; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 			dispose: function(callback) { | 
					
						
							|  |  |  | 				hot._disposeHandlers.push(callback); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			addDisposeHandler: function(callback) { | 
					
						
							|  |  |  | 				hot._disposeHandlers.push(callback); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			removeDisposeHandler: function(callback) { | 
					
						
							|  |  |  | 				var idx = hot._disposeHandlers.indexOf(callback); | 
					
						
							|  |  |  | 				if(idx >= 0) hot._disposeHandlers.splice(idx, 1); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Management API
 | 
					
						
							|  |  |  | 			check: hotCheck, | 
					
						
							|  |  |  | 			apply: hotApply, | 
					
						
							|  |  |  | 			status: function(l) { | 
					
						
							|  |  |  | 				if(!l) return hotStatus; | 
					
						
							|  |  |  | 				hotStatusHandlers.push(l); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			addStatusHandler: function(l) { | 
					
						
							|  |  |  | 				hotStatusHandlers.push(l); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			removeStatusHandler: function(l) { | 
					
						
							|  |  |  | 				var idx = hotStatusHandlers.indexOf(l); | 
					
						
							|  |  |  | 				if(idx >= 0) hotStatusHandlers.splice(idx, 1); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			//inherit from previous dispose call
 | 
					
						
							|  |  |  | 			data: hotCurrentModuleData[moduleId] | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		return hot; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var hotStatusHandlers = []; | 
					
						
							|  |  |  | 	var hotStatus = "idle"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotSetStatus(newStatus) { | 
					
						
							|  |  |  | 		hotStatus = newStatus; | 
					
						
							|  |  |  | 		for(var i = 0; i < hotStatusHandlers.length; i++) | 
					
						
							|  |  |  | 			hotStatusHandlers[i].call(null, newStatus); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// while downloading
 | 
					
						
							|  |  |  | 	var hotWaitingFiles = 0; | 
					
						
							|  |  |  | 	var hotChunksLoading = 0; | 
					
						
							|  |  |  | 	var hotWaitingFilesMap = {}; | 
					
						
							|  |  |  | 	var hotRequestedFilesMap = {}; | 
					
						
							|  |  |  | 	var hotAvailibleFilesMap = {}; | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 	var hotDeferred; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// The update info
 | 
					
						
							|  |  |  | 	var hotUpdate, hotUpdateNewHash; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-28 04:47:51 +08:00
										 |  |  | 	function toModuleId(id) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:39:56 +08:00
										 |  |  | 		var isNumber = (+id) + "" === id; | 
					
						
							|  |  |  | 		return isNumber ? +id : id; | 
					
						
							| 
									
										
										
										
											2015-06-28 04:47:51 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 	function hotCheck(apply) { | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		if(hotStatus !== "idle") throw new Error("check() is only allowed in idle status"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 		hotApplyOnUpdate = apply; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		hotSetStatus("check"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 		return hotDownloadManifest().then(function(update) { | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 			if(!update) { | 
					
						
							|  |  |  | 				hotSetStatus("idle"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 				return null; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			hotRequestedFilesMap = {}; | 
					
						
							|  |  |  | 			hotAvailibleFilesMap = {}; | 
					
						
							|  |  |  | 			hotWaitingFilesMap = {}; | 
					
						
							|  |  |  | 			for(var i = 0; i < update.c.length; i++) | 
					
						
							|  |  |  | 				hotAvailibleFilesMap[update.c[i]] = true; | 
					
						
							|  |  |  | 			hotUpdateNewHash = update.h; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			hotSetStatus("prepare"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			var promise = new Promise(function(resolve, reject) { | 
					
						
							|  |  |  | 				hotDeferred = { | 
					
						
							|  |  |  | 					resolve: resolve, | 
					
						
							|  |  |  | 					reject: reject | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 			hotUpdate = {}; | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 			/*foreachInstalledChunks*/ | 
					
						
							|  |  |  | 			{ // eslint-disable-line no-lone-blocks
 | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 				/*globals chunkId */ | 
					
						
							|  |  |  | 				hotEnsureUpdateChunk(chunkId); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(hotStatus === "prepare" && hotChunksLoading === 0 && hotWaitingFiles === 0) { | 
					
						
							|  |  |  | 				hotUpdateDownloaded(); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			return promise; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotAddUpdateChunk(chunkId, moreModules) { // eslint-disable-line no-unused-vars
 | 
					
						
							|  |  |  | 		if(!hotAvailibleFilesMap[chunkId] || !hotRequestedFilesMap[chunkId]) | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		hotRequestedFilesMap[chunkId] = false; | 
					
						
							|  |  |  | 		for(var moduleId in moreModules) { | 
					
						
							|  |  |  | 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { | 
					
						
							|  |  |  | 				hotUpdate[moduleId] = moreModules[moduleId]; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if(--hotWaitingFiles === 0 && hotChunksLoading === 0) { | 
					
						
							|  |  |  | 			hotUpdateDownloaded(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotEnsureUpdateChunk(chunkId) { | 
					
						
							|  |  |  | 		if(!hotAvailibleFilesMap[chunkId]) { | 
					
						
							|  |  |  | 			hotWaitingFilesMap[chunkId] = true; | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			hotRequestedFilesMap[chunkId] = true; | 
					
						
							|  |  |  | 			hotWaitingFiles++; | 
					
						
							|  |  |  | 			hotDownloadUpdateChunk(chunkId); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function hotUpdateDownloaded() { | 
					
						
							|  |  |  | 		hotSetStatus("ready"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 		var deferred = hotDeferred; | 
					
						
							|  |  |  | 		hotDeferred = null; | 
					
						
							|  |  |  | 		if(!deferred) return; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		if(hotApplyOnUpdate) { | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			hotApply(hotApplyOnUpdate).then(function(result) { | 
					
						
							|  |  |  | 				deferred.resolve(result); | 
					
						
							|  |  |  | 			}, function(err) { | 
					
						
							|  |  |  | 				deferred.reject(err); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		} else { | 
					
						
							|  |  |  | 			var outdatedModules = []; | 
					
						
							|  |  |  | 			for(var id in hotUpdate) { | 
					
						
							|  |  |  | 				if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) { | 
					
						
							| 
									
										
										
										
											2015-06-28 04:47:51 +08:00
										 |  |  | 					outdatedModules.push(toModuleId(id)); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			deferred.resolve(outdatedModules); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 	function hotApply(options) { | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		if(hotStatus !== "ready") throw new Error("apply() is only allowed in ready status"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 		options = options || {}; | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		function getAffectedStuff(module) { | 
					
						
							|  |  |  | 			var outdatedModules = [module]; | 
					
						
							|  |  |  | 			var outdatedDependencies = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var queue = outdatedModules.slice(); | 
					
						
							|  |  |  | 			while(queue.length > 0) { | 
					
						
							|  |  |  | 				var moduleId = queue.pop(); | 
					
						
							|  |  |  | 				var module = installedModules[moduleId]; | 
					
						
							|  |  |  | 				if(!module || module.hot._selfAccepted) | 
					
						
							|  |  |  | 					continue; | 
					
						
							|  |  |  | 				if(module.hot._selfDeclined) { | 
					
						
							|  |  |  | 					return new Error("Aborted because of self decline: " + moduleId); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-07-17 15:30:37 +08:00
										 |  |  | 				if($require$.s === moduleId) { | 
					
						
							| 
									
										
										
										
											2015-07-02 21:00:49 +08:00
										 |  |  | 					return; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 				for(var i = 0; i < module.parents.length; i++) { | 
					
						
							|  |  |  | 					var parentId = module.parents[i]; | 
					
						
							|  |  |  | 					var parent = installedModules[parentId]; | 
					
						
							|  |  |  | 					if(parent.hot._declinedDependencies[moduleId]) { | 
					
						
							|  |  |  | 						return new Error("Aborted because of declined dependency: " + moduleId + " in " + parentId); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					if(outdatedModules.indexOf(parentId) >= 0) continue; | 
					
						
							|  |  |  | 					if(parent.hot._acceptedDependencies[moduleId]) { | 
					
						
							|  |  |  | 						if(!outdatedDependencies[parentId]) | 
					
						
							|  |  |  | 							outdatedDependencies[parentId] = []; | 
					
						
							|  |  |  | 						addAllToSet(outdatedDependencies[parentId], [moduleId]); | 
					
						
							|  |  |  | 						continue; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					delete outdatedDependencies[parentId]; | 
					
						
							|  |  |  | 					outdatedModules.push(parentId); | 
					
						
							|  |  |  | 					queue.push(parentId); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			return [outdatedModules, outdatedDependencies]; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		function addAllToSet(a, b) { | 
					
						
							|  |  |  | 			for(var i = 0; i < b.length; i++) { | 
					
						
							|  |  |  | 				var item = b[i]; | 
					
						
							|  |  |  | 				if(a.indexOf(item) < 0) | 
					
						
							|  |  |  | 					a.push(item); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// at begin all updates modules are outdated
 | 
					
						
							|  |  |  | 		// the "outdated" status can propagate to parents if they don't accept the children
 | 
					
						
							|  |  |  | 		var outdatedDependencies = {}; | 
					
						
							|  |  |  | 		var outdatedModules = []; | 
					
						
							|  |  |  | 		var appliedUpdate = {}; | 
					
						
							|  |  |  | 		for(var id in hotUpdate) { | 
					
						
							|  |  |  | 			if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) { | 
					
						
							| 
									
										
										
										
											2015-06-28 04:47:51 +08:00
										 |  |  | 				var moduleId = toModuleId(id); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 				var result = getAffectedStuff(moduleId); | 
					
						
							|  |  |  | 				if(!result) { | 
					
						
							|  |  |  | 					if(options.ignoreUnaccepted) | 
					
						
							|  |  |  | 						continue; | 
					
						
							|  |  |  | 					hotSetStatus("abort"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 					return Promise.reject(new Error("Aborted because " + moduleId + " is not accepted")); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				if(result instanceof Error) { | 
					
						
							|  |  |  | 					hotSetStatus("abort"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 					return Promise.reject(result); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				appliedUpdate[moduleId] = hotUpdate[moduleId]; | 
					
						
							|  |  |  | 				addAllToSet(outdatedModules, result[0]); | 
					
						
							|  |  |  | 				for(var moduleId in result[1]) { | 
					
						
							|  |  |  | 					if(Object.prototype.hasOwnProperty.call(result[1], moduleId)) { | 
					
						
							|  |  |  | 						if(!outdatedDependencies[moduleId]) | 
					
						
							|  |  |  | 							outdatedDependencies[moduleId] = []; | 
					
						
							|  |  |  | 						addAllToSet(outdatedDependencies[moduleId], result[1][moduleId]); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Store self accepted outdated modules to require them later by the module system
 | 
					
						
							|  |  |  | 		var outdatedSelfAcceptedModules = []; | 
					
						
							|  |  |  | 		for(var i = 0; i < outdatedModules.length; i++) { | 
					
						
							|  |  |  | 			var moduleId = outdatedModules[i]; | 
					
						
							|  |  |  | 			if(installedModules[moduleId] && installedModules[moduleId].hot._selfAccepted) | 
					
						
							|  |  |  | 				outdatedSelfAcceptedModules.push({ | 
					
						
							|  |  |  | 					module: moduleId, | 
					
						
							|  |  |  | 					errorHandler: installedModules[moduleId].hot._selfAccepted | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Now in "dispose" phase
 | 
					
						
							|  |  |  | 		hotSetStatus("dispose"); | 
					
						
							|  |  |  | 		var queue = outdatedModules.slice(); | 
					
						
							|  |  |  | 		while(queue.length > 0) { | 
					
						
							|  |  |  | 			var moduleId = queue.pop(); | 
					
						
							|  |  |  | 			var module = installedModules[moduleId]; | 
					
						
							|  |  |  | 			if(!module) continue; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var data = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Call dispose handlers
 | 
					
						
							|  |  |  | 			var disposeHandlers = module.hot._disposeHandlers; | 
					
						
							|  |  |  | 			for(var j = 0; j < disposeHandlers.length; j++) { | 
					
						
							|  |  |  | 				var cb = disposeHandlers[j]; | 
					
						
							|  |  |  | 				cb(data); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			hotCurrentModuleData[moduleId] = data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// disable module (this disables requires from this module)
 | 
					
						
							|  |  |  | 			module.hot.active = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// remove module from cache
 | 
					
						
							|  |  |  | 			delete installedModules[moduleId]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// remove "parents" references from all children
 | 
					
						
							|  |  |  | 			for(var j = 0; j < module.children.length; j++) { | 
					
						
							|  |  |  | 				var child = installedModules[module.children[j]]; | 
					
						
							|  |  |  | 				if(!child) continue; | 
					
						
							|  |  |  | 				var idx = child.parents.indexOf(moduleId); | 
					
						
							|  |  |  | 				if(idx >= 0) { | 
					
						
							|  |  |  | 					child.parents.splice(idx, 1); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// remove outdated dependency from module children
 | 
					
						
							|  |  |  | 		for(var moduleId in outdatedDependencies) { | 
					
						
							|  |  |  | 			if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) { | 
					
						
							|  |  |  | 				var module = installedModules[moduleId]; | 
					
						
							|  |  |  | 				var moduleOutdatedDependencies = outdatedDependencies[moduleId]; | 
					
						
							|  |  |  | 				for(var j = 0; j < moduleOutdatedDependencies.length; j++) { | 
					
						
							|  |  |  | 					var dependency = moduleOutdatedDependencies[j]; | 
					
						
							|  |  |  | 					var idx = module.children.indexOf(dependency); | 
					
						
							|  |  |  | 					if(idx >= 0) module.children.splice(idx, 1); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Not in "apply" phase
 | 
					
						
							|  |  |  | 		hotSetStatus("apply"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		hotCurrentHash = hotUpdateNewHash; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// insert new code
 | 
					
						
							|  |  |  | 		for(var moduleId in appliedUpdate) { | 
					
						
							|  |  |  | 			if(Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) { | 
					
						
							|  |  |  | 				modules[moduleId] = appliedUpdate[moduleId]; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// call accept handlers
 | 
					
						
							|  |  |  | 		var error = null; | 
					
						
							|  |  |  | 		for(var moduleId in outdatedDependencies) { | 
					
						
							|  |  |  | 			if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) { | 
					
						
							|  |  |  | 				var module = installedModules[moduleId]; | 
					
						
							|  |  |  | 				var moduleOutdatedDependencies = outdatedDependencies[moduleId]; | 
					
						
							|  |  |  | 				var callbacks = []; | 
					
						
							|  |  |  | 				for(var i = 0; i < moduleOutdatedDependencies.length; i++) { | 
					
						
							|  |  |  | 					var dependency = moduleOutdatedDependencies[i]; | 
					
						
							|  |  |  | 					var cb = module.hot._acceptedDependencies[dependency]; | 
					
						
							|  |  |  | 					if(callbacks.indexOf(cb) >= 0) continue; | 
					
						
							|  |  |  | 					callbacks.push(cb); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				for(var i = 0; i < callbacks.length; i++) { | 
					
						
							|  |  |  | 					var cb = callbacks[i]; | 
					
						
							|  |  |  | 					try { | 
					
						
							|  |  |  | 						cb(outdatedDependencies); | 
					
						
							|  |  |  | 					} catch(err) { | 
					
						
							|  |  |  | 						if(!error) | 
					
						
							|  |  |  | 							error = err; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Load self accepted modules
 | 
					
						
							|  |  |  | 		for(var i = 0; i < outdatedSelfAcceptedModules.length; i++) { | 
					
						
							|  |  |  | 			var item = outdatedSelfAcceptedModules[i]; | 
					
						
							|  |  |  | 			var moduleId = item.module; | 
					
						
							|  |  |  | 			hotCurrentParents = [moduleId]; | 
					
						
							|  |  |  | 			try { | 
					
						
							|  |  |  | 				$require$(moduleId); | 
					
						
							|  |  |  | 			} catch(err) { | 
					
						
							|  |  |  | 				if(typeof item.errorHandler === "function") { | 
					
						
							|  |  |  | 					try { | 
					
						
							|  |  |  | 						item.errorHandler(err); | 
					
						
							|  |  |  | 					} catch(err) { | 
					
						
							|  |  |  | 						if(!error) | 
					
						
							|  |  |  | 							error = err; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} else if(!error) | 
					
						
							|  |  |  | 					error = err; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// handle errors in accept handlers and self accepted module load
 | 
					
						
							|  |  |  | 		if(error) { | 
					
						
							|  |  |  | 			hotSetStatus("fail"); | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 			return Promise.reject(error); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		hotSetStatus("idle"); | 
					
						
							| 
									
										
										
										
											2015-06-22 04:22:55 +08:00
										 |  |  | 		return Promise.resolve(outdatedModules); | 
					
						
							| 
									
										
										
										
											2015-04-29 05:38:41 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | }; |