time-analytics-webpack-plugin
Version:
analytize the time of loaders and plugins
81 lines • 3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isConstructorNameInPrototypeChain = exports.now = exports.assertNever = exports.assertIsDefined = exports.assert = exports.failInDebug = exports.fail = exports.ConsoleHelper = void 0;
const const_1 = require("./const");
const perf_hooks_1 = require("perf_hooks");
const chalk_1 = __importDefault(require("chalk"));
const MESSAGE_PREFIX = `[${const_1.PACKAGE_NAME}]: `;
/**
* Add prefix "[time-analytics-webpack-plugin]: " prefix to all meesages
*/
class ConsoleHelper {
static log(message) {
console.log(ConsoleHelper.getMessage(message));
}
static warn(message) {
console.log(chalk_1.default.yellow(ConsoleHelper.getMessage(message)));
}
static getMessage(message) {
return `${MESSAGE_PREFIX}${message}`;
}
}
exports.ConsoleHelper = ConsoleHelper;
/// The whole assert part is basically copied from typescript repo.
function fail(message) {
// const isProduction = true;
// if (isProduction) return;
failInDebug(message);
}
exports.fail = fail;
function failInDebug(message) {
// eslint-disable-next-line no-debugger
debugger;
const e = new Error(message ? `Debug Failure.${message} ` : 'Debug Failure.');
throw e;
}
exports.failInDebug = failInDebug;
function assert(expression, message, verboseDebugInfo) {
if (!expression) {
const messagePostfix = message ? `with message "${message}"` : '';
message = `${MESSAGE_PREFIX}assert failed${messagePostfix}`;
if (verboseDebugInfo) {
message += '\r\nVerbose Debug Information: ' + (typeof verboseDebugInfo === 'string' ? verboseDebugInfo : verboseDebugInfo());
}
fail(message);
}
}
exports.assert = assert;
function assertIsDefined(value, message) {
if (value === undefined || value === null) {
fail(message);
}
}
exports.assertIsDefined = assertIsDefined;
function assertNever(member, message = 'Assert never:') {
const detail = JSON.stringify(member);
return failInDebug(`${message} ${detail} `);
}
exports.assertNever = assertNever;
function now() {
return perf_hooks_1.performance.now();
}
exports.now = now;
/**
* like `instanceof `, but not accurate. Judgement by the name of constructor.
*/
// webpack does not export tapable, so there is no way to know whether a class is hook or not easily.
function isConstructorNameInPrototypeChain(name, obj) {
let curProto = obj;
while (curProto) {
if (curProto.constructor.name === name) {
return true;
}
curProto = Reflect.getPrototypeOf(curProto);
}
return false;
}
exports.isConstructorNameInPrototypeChain = isConstructorNameInPrototypeChain;
//# sourceMappingURL=utils.js.map