123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- const chalk = require('chalk');
- const pluginCompat = require('./util/plugin-compat');
- const LOGGER_SEPARATOR = ':';
- const DEFAULT_LOGGER_PREFIX = 'hardsource';
- const messages = {
- 'serialization--error-freezing-module': {
- short: value =>
- `Could not freeze ${value.data.moduleReadable}: ${
- value.data.errorMessage
- }`,
- },
- 'serialzation--cache-incomplete': {
- short: value =>
- `Last compilation did not finish saving. Building new cache.`,
- },
- 'confighash--directory-no-confighash': {
- short: value => `Config hash skipped in cache directory.`,
- },
- 'confighash--new': {
- short: value =>
- `Writing new cache ${value.data.configHash.substring(0, 8)}...`,
- },
- 'confighash--reused': {
- short: value =>
- `Reading from cache ${value.data.configHash.substring(0, 8)}...`,
- },
- 'caches--delete-old': {
- short: value =>
- `Deleted ${value.data.deletedSizeMB} MB. Using ${
- value.data.sizeMB
- } MB of disk space.`,
- },
- 'caches--keep': {
- short: value => `Using ${value.data.sizeMB} MB of disk space.`,
- },
- 'environment--inputs': {
- short: value =>
- `Tracking node dependencies with: ${value.data.inputs.join(', ')}.`,
- },
- 'environment--config-changed': {
- short: value => 'Configuration changed. Building new cache.',
- },
- 'environment--changed': {
- short: value => `Node dependencies changed. Building new cache.`,
- },
- 'environment--hardsource-changed': {
- short: value => `hard-source version changed. Building new cache.`,
- },
- 'childcompiler--no-cache': {
- once: value =>
- `A child compiler has its cache disabled. Skipping child in hard-source.`,
- },
- 'childcompiler--unnamed-cache': {
- once: value =>
- `A child compiler has unnamed cache. Skipping child in hard-source.`,
- },
- unrecognized: {
- short: value => value.message,
- },
- };
- const logLevels = ['error', 'warn', 'info', 'log', 'debug'];
- const levelId = level => logLevels.indexOf(level.toLowerCase());
- const compareLevel = (a, b) => levelId(a) - levelId(b);
- class ChalkLoggerPlugin {
- constructor(options = {}) {
- this.options = options;
- this.once = {};
- // mode: 'test' or 'none'
- this.options.mode =
- this.options.mode || (process.env.NODE_ENV === 'test' ? 'test' : 'none');
- // level: 'error', 'warn', 'info', 'log', 'debug'
- this.options.level =
- this.options.level || (this.options.mode === 'test' ? 'warn' : 'debug');
- }
- apply(compiler) {
- const compilerHooks = pluginCompat.hooks(compiler);
- compilerHooks.hardSourceLog.tap('HardSource - ChalkLoggerPlugin', value => {
- if (compareLevel(this.options.level, value.level) < 0) {
- return;
- }
- let headerColor = chalk.white;
- let color = chalk.white;
- if (value.level === 'error') {
- headerColor = chalk.red;
- } else if (value.level === 'warn') {
- headerColor = chalk.yellow;
- } else if (value.level === 'info') {
- headerColor = chalk.white;
- } else {
- headerColor = color = chalk.gray;
- }
- const header = headerColor(
- `[${DEFAULT_LOGGER_PREFIX}${LOGGER_SEPARATOR}${compiler.__hardSource_shortConfigHash ||
- value.from}]`,
- );
- // Always use warn or error so that output goes to stderr.
- const consoleFn = value.level === 'error' ? console.error : console.warn;
- let handle = messages[value.data.id];
- if (!handle) {
- handle = messages.unrecognized;
- }
- if (handle) {
- if (handle.once) {
- if (!this.once[value.data.id]) {
- this.once[value.data.id] = true;
- consoleFn.call(console, header, color(handle.once(value)));
- }
- } else if (handle.short) {
- consoleFn.call(console, header, color(handle.short(value)));
- }
- } else {
- consoleFn.call(console, header, color(value.message));
- }
- });
- }
- }
- module.exports = ChalkLoggerPlugin;
|