simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

AbstractMethodError.js (1133B)


      1 /*
      2 	MIT License http://www.opensource.org/licenses/mit-license.php
      3 	Author Ivan Kopeykin @vankop
      4 */
      5 
      6 "use strict";
      7 
      8 const WebpackError = require("./WebpackError");
      9 const CURRENT_METHOD_REGEXP = /at ([a-zA-Z0-9_.]*)/;
     10 
     11 /**
     12  * @param {string=} method method name
     13  * @returns {string} message
     14  */
     15 function createMessage(method) {
     16 	return `Abstract method${method ? " " + method : ""}. Must be overridden.`;
     17 }
     18 
     19 /**
     20  * @constructor
     21  */
     22 function Message() {
     23 	/** @type {string} */
     24 	this.stack = undefined;
     25 	Error.captureStackTrace(this);
     26 	/** @type {RegExpMatchArray} */
     27 	const match = this.stack.split("\n")[3].match(CURRENT_METHOD_REGEXP);
     28 
     29 	this.message = match && match[1] ? createMessage(match[1]) : createMessage();
     30 }
     31 
     32 /**
     33  * Error for abstract method
     34  * @example
     35  * class FooClass {
     36  *     abstractMethod() {
     37  *         throw new AbstractMethodError(); // error message: Abstract method FooClass.abstractMethod. Must be overridden.
     38  *     }
     39  * }
     40  *
     41  */
     42 class AbstractMethodError extends WebpackError {
     43 	constructor() {
     44 		super(new Message().message);
     45 		this.name = "AbstractMethodError";
     46 	}
     47 }
     48 
     49 module.exports = AbstractMethodError;