utils_regex.js

/* eslint-disable stylistic/max-len */
/* eslint-disable no-control-regex */
/**
 * @file utils/regex.js
 * @copyright 2025 SPMHome, LLC
 * @author @spmeesseman Scott Meesseman
 */

const HasErrorText = (/TS[0-9]{4,5}|error|fail(?:ed|ure)?|enoent|could not|cannot|can'?t|unable to/i);

const HasWarningText = (/warn(?:ing|ed)?/i);

const HasErrorOrWarningText = (/TS[0-9]{4,5}|error|fail(?:ed|ure)?|enoent|could not|cannot|can'?t|unable to|warn(?:ing|ed)?/i);

const ExecJsdocStdio = /(^(?:ERROR|WARNING):? ([^]*?))(?=^(?:ERROR|WARNING)|###END###)/gmi;

const ExecTscStdio = /^(?:(.+?)\(([0-9]+,[0-9]+)\): )?error (TS[0-9]{4,5}): ([^]*?)(?=^error (TS[0-9]{4,5})|###END###)/gmi;

const PathVersion = /\/v([0-9]+\.[0-9]+\.[0-9]+(?:-(?:pre|alpha|beta)\.[0-9]+)?)\//;

const SourceFile = / (?:[a-zA-Z]:)?[\\/].*?[\\/].+?[\\/](.*?\.(?:c?m?js|ts)x?) */;

const SourceFileAbs = /(?: |\(|^|source file )((?:[a-zA-Z]:)?[\\/][\w_\-\\/]*?[\\/][\w_\-\\/]+?[\\/][\w_\-\\/]*?\.(?:c?m?js|ts)x?)(?: |:|\()/i;

const StackTraceCurFile = /(?:at )? *\(?.*?(?:[\\/]|^)(?:.+?[\\/])+(.+?\.(?:c?m?js|ts)x?)(?:\(|:)/;

const StackTraceCurFileAbs = /(?:at )?[a-zA-Z0-9_.]+ *\(?((?:[a-zA-Z]:|\/).*?[\\/].+?[\\/].*?\.(?:c?m?js|ts)x?)(?:\(|:)/;

const StackTraceCurLine = / *\(?.*?(?:[\\/]|^).+?[\\/].*?\.(?:c?m?js|ts)x?(?:\(|:)([0-9]+?)(?:,|:)([0-9]+)/;

const StackTraceCurMethod = /(?:at |^ *).+?\.([a-zA-Z0-9._-]+).+?(?:$|\()/;

const StackTraceVendor = /(?:vendor|runtime|spmh[acl]|react)\.[mc]?jsx?:/;

const StackTraceAnonymous = /(?:\.forEach|anonymous)/;

const StackTraceSourceDir = /[\\/]src[\\/]?[a-zA-Z0-9.\\/_-]+?(?:\(|:)([0-9]+?)(?:,|:)[0-9].+?\.ts/;

const TerminalColorEsc = /\x1B(?:\[(?:38;2;)?[0-9]{1,3};?(?:[0-9]{1,3};?)*m)+/;

const TerminalColorEscStart = /^ *\x1B(?:\[(?:38;2;)?[0-9]{1,3};?(?:[0-9]{1,3};?)*m)+/;

const TerminalColorEscSingle = /\x1B(?:\[(?:38;2;)?[0-9]{1,3};?(?:[0-9]{1,3};?)*m)+/;

const TerminalColorEscGlobal = /\x1B(?:\[(?:38;2;)?[0-9]{1,3};?(?:[0-9]{1,3};?)*m)+/g;

const TerminalColoredText = /\x1B(?:38;2;)?(?:\[[0-9]{1,3}(?:[0-9]{1,3};?)*m)+(.*?)\x1B(?:\[[0-9]{1,3}(z?:[0-9]{1,3};?)*m)+/;

const TerminalColoredTextGlobal = /\x1B(?:38;2;)?(?:\[[0-9]{1,3}(?:[0-9]{1,3};)*m)+(.*?)\x1B(?:\[[0-9]{1,3}(?:[0-9]{1,3};)*m)+/g;

const TestsChunk = (/[a-z]+\.(?:tests?|specs?)$|[\\/]tests?|suite[\\/]/i);


const WpwRegex = {
    HasErrorText, HasWarningText, PathVersion, SourceFile, SourceFileAbs, StackTraceCurFile, ExecJsdocStdio,
    StackTraceAnonymous, StackTraceCurFileAbs, StackTraceCurLine, StackTraceCurMethod, TestsChunk, ExecTscStdio,
    StackTraceVendor, StackTraceSourceDir, TerminalColorEsc, TerminalColorEscGlobal, TerminalColoredText,
    TerminalColoredTextGlobal, TerminalColorEscSingle, TerminalColorEscStart, HasErrorOrWarningText
};


module.exports = WpwRegex;