/* 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;