| 
									
										
										
										
											2019-07-15 19:17:12 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const WebpackError = require("./WebpackError"); | 
					
						
							|  |  |  | const CURRENT_METHOD_REGEXP = /at ([a-zA-Z0-9_.]*)/; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @param {string=} method method name | 
					
						
							|  |  |  |  * @returns {string} message | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function createMessage(method) { | 
					
						
							| 
									
										
										
										
											2019-07-15 22:19:51 +08:00
										 |  |  | 	return `Abstract method${method ? " " + method : ""}. Must be overridden.`; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @constructor | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function Message() { | 
					
						
							|  |  |  | 	this.stack = undefined; | 
					
						
							|  |  |  | 	Error.captureStackTrace(this); | 
					
						
							|  |  |  | 	/** @type {RegExpMatchArray} */ | 
					
						
							|  |  |  | 	const match = this.stack.split("\n")[3].match(CURRENT_METHOD_REGEXP); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	this.message = match && match[1] ? createMessage(match[1]) : createMessage(); | 
					
						
							| 
									
										
										
										
											2019-07-15 19:17:12 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Error for abstract method | 
					
						
							|  |  |  |  * @example | 
					
						
							|  |  |  |  * class FooClass { | 
					
						
							|  |  |  |  *     abstractMethod() { | 
					
						
							|  |  |  |  *         throw new AbstractMethodError(); // error message: Abstract method FooClass.abstractMethod. Must be overriden.
 | 
					
						
							|  |  |  |  *     } | 
					
						
							|  |  |  |  * } | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class AbstractMethodError extends WebpackError { | 
					
						
							|  |  |  | 	constructor() { | 
					
						
							| 
									
										
										
										
											2019-07-15 22:19:51 +08:00
										 |  |  | 		super(new Message().message); | 
					
						
							| 
									
										
										
										
											2019-07-15 19:17:12 +08:00
										 |  |  | 		this.name = "AbstractMethodError"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = AbstractMethodError; |