UNPKG

1.13 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Ivan Kopeykin @vankop
4*/
5
6"use strict";
7
8const WebpackError = require("./WebpackError");
9const CURRENT_METHOD_REGEXP = /at ([a-zA-Z0-9_.]*)/;
10
11/**
12 * @param {string=} method method name
13 * @returns {string} message
14 */
15function createMessage(method) {
16 return `Abstract method${method ? " " + method : ""}. Must be overridden.`;
17}
18
19/**
20 * @constructor
21 */
22function 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 */
42class AbstractMethodError extends WebpackError {
43 constructor() {
44 super(new Message().message);
45 this.name = "AbstractMethodError";
46 }
47}
48
49module.exports = AbstractMethodError;