@remotex-labs/xmap 3.0.4 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -122
- package/dist/cjs/formatter.component.js +3 -3
- package/dist/cjs/formatter.component.js.map +3 -3
- package/dist/cjs/highlighter.component.js +1 -1
- package/dist/cjs/highlighter.component.js.map +4 -4
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/parser.component.js +1 -1
- package/dist/cjs/parser.component.js.map +3 -3
- package/dist/esm/formatter.component.js +4 -4
- package/dist/esm/formatter.component.js.map +3 -3
- package/dist/esm/highlighter.component.js +1 -1
- package/dist/esm/highlighter.component.js.map +4 -4
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/parser.component.js +2 -2
- package/dist/esm/parser.component.js.map +3 -3
- package/dist/formatter.component.d.ts +198 -1453
- package/dist/highlighter.component.d.ts +147 -1357
- package/dist/index.d.ts +388 -1167
- package/dist/parser.component.d.ts +83 -1479
- package/package.json +19 -12
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/parser.component.ts"],
|
|
4
|
-
"sourceRoot": "https://github.com/remotex-lab/xmap/tree/
|
|
5
|
-
"sourcesContent": ["/**\n * Export interfaces\n */\n\nexport type * from '@components/interfaces/parse-component.interface';\n\n/**\n * Import will remove at compile time\n */\n\nimport type { ParsedStackTrace, StackFrame } from '@components/interfaces/parse-component.interface';\n\n/**\n * Regular expression patterns for different JavaScript engines' stack traces\n *\n * @since 2.1.0\n */\n\nconst PATTERNS = {\n V8: {\n GLOBAL: /at\\s(.*):(\\d+):(\\d+)/,\n STANDARD: /at\\s(.*?)\\((?:(.+?):(\\d+):(\\d+)|(native))\\)/,\n EVAL: /^at\\s(.+?)\\s\\(eval\\sat\\s(.+?)\\s?\\((.*):(\\d+):(\\d+)\\),\\s(.+?):(\\d+):(\\d+)\\)$/\n },\n SPIDERMONKEY: {\n EVAL: /^(.*)@(.+?):(\\d+):(\\d+),\\s(.+?)@(.+?):(\\d+):(\\d+)$/,\n STANDARD: /^(.*)@(.*?)(?:(\\[native code\\])|:(\\d+):(\\d+))$/\n },\n JAVASCRIPT_CORE: {\n STANDARD: /^(?:(global|eval)\\s)?(.*)@(.*?)(?::(\\d+)(?::(\\d+))?)?$/\n }\n};\n\n/**\n * Enumeration of JavaScript engines that can be detected from stack traces\n *\n * @since 2.1.0\n */\n\nexport const enum JSEngines {\n V8,\n SPIDERMONKEY,\n JAVASCRIPT_CORE,\n UNKNOWN\n}\n\n/**\n * Detects the JavaScript engine based on the format of a stack trace line\n *\n * @param stack - The stack trace to analyze\n * @returns The identified JavaScript engine type\n *\n * @example\n * ```ts\n * const engine = detectJSEngine(\"at functionName (/path/to/file.js:10:15)\");\n * if (engine === JSEngines.V8) {\n * // Handle V8 specific logic\n * }\n * ```\n *\n * @since 2.1.0\n */\n\nexport function detectJSEngine(stack: string): JSEngines {\n if (stack.startsWith(' at ') || stack.startsWith('at '))\n return JSEngines.V8;\n\n if (stack.includes('@'))\n return /(?:global|eval) code@/.test(stack)\n ? JSEngines.JAVASCRIPT_CORE : JSEngines.SPIDERMONKEY;\n\n return JSEngines.UNKNOWN;\n}\n\n/**\n * Normalizes file paths from various formats to a standard format\n *\n * @param filePath - The file path to normalize, which may include protocol prefixes\n * @returns A normalized file path with consistent separators and without protocol prefixes\n *\n * @remarks\n * Handles both Windows and Unix-style paths, as well as file:// protocol URLs.\n * Converts all backslashes to forward slashes for consistency.\n *\n * @example\n * ```ts\n * // Windows file URL to a normal path\n * normalizePath(\"file:///C:/path/to/file.js\"); // \"C:/path/to/file.js\"\n *\n * // Unix file URL to a normal path\n * normalizePath(\"file:///path/to/file.js\"); // \"/path/to/file.js\"\n *\n * // Windows backslashes to forward slashes\n * normalizePath(\"C:\\\\path\\\\to\\\\file.js\"); // \"C:/path/to/file.js\"\n * ```\n *\n * @since 2.1.0\n */\n\nexport function normalizePath(filePath: string): string {\n // Handle file:// protocol URLs\n if (filePath.startsWith('file://')) {\n // Handle Windows file:/// format\n if (filePath.startsWith('file:///') && /^file:\\/\\/\\/[A-Za-z]:/.test(filePath)) {\n // Windows absolute path: file:///C:/path/to/file.js\n return filePath.substring(8);\n }\n\n // Handle *nix file:// format\n return filePath.substring(7);\n }\n\n // Handle Windows-style paths with backward slashes\n filePath = filePath.replace(/\\\\/g, '/');\n\n return filePath;\n}\n\n/**\n * Creates a default stack frame object with initial values\n *\n * @param source - The original source line from the stack trace\n * @returns A new StackFrame object with default null values\n *\n * @see ParsedStackTrace\n * @see StackFrame\n *\n * @since 2.1.0\n */\n\nexport function createDefaultFrame(source: string): StackFrame {\n return {\n source,\n eval: false,\n async: false,\n native: false,\n constructor: false\n };\n}\n\n/**\n * Safely parses a string value to an integer, handling undefined and null cases\n *\n * @param value - The string value to parse\n * @returns The parsed integer or null if the input is undefined/null\n *\n * @example\n * ```ts\n * safeParseInt(\"42\"); // 42\n * safeParseInt(undefined); // null\n * safeParseInt(null); // null\n * ```\n *\n * @since 2.1.0\n */\n\nexport function safeParseInt(value: string | undefined | null): number | undefined {\n return value && value.trim() !== '' ? parseInt(value, 10) : undefined;\n}\n\n/**\n * Parses a V8 JavaScript engine stack trace line into a structured StackFrame object\n *\n * @param line - The stack trace line to parse\n * @returns A StackFrame object containing the parsed information\n *\n * @remarks\n * Handles both standard V8 stack frames and eval-generated stack frames which\n * have a more complex structure with nested origin information.\n *\n * @example\n * ```ts\n * // Standard frame\n * parseV8StackLine(\"at functionName (/path/to/file.js:10:15)\");\n *\n * // Eval frame\n * parseV8StackLine(\"at eval (eval at evalFn (/source.js:5:10), <anonymous>:1:5)\");\n * ```\n *\n * @throws Error - If the line format doesn't match any known V8 pattern\n *\n * @see StackFrame\n * @see createDefaultFrame\n *\n * @since 2.1.0\n */\n\nexport function parseV8StackLine(line: string): StackFrame {\n const frame = createDefaultFrame(line);\n\n // Common flags that apply to all formats\n if (line.toLowerCase().includes('new')) frame.constructor = true;\n if (line.toLowerCase().includes('async')) frame.async = true;\n\n // Try to match against each pattern\n const evalMatch = line.match(PATTERNS.V8.EVAL);\n const globalMatch = line.match(PATTERNS.V8.GLOBAL);\n const standardMatch = !evalMatch && line.match(PATTERNS.V8.STANDARD);\n\n if (evalMatch) {\n // Handle eval format\n frame.eval = true;\n frame.functionName = evalMatch[1] || undefined;\n\n // Add eval origin information\n frame.evalOrigin = {\n line: safeParseInt(evalMatch[4]) ?? undefined,\n column: safeParseInt(evalMatch[5]) ?? undefined,\n fileName: evalMatch[3] ? normalizePath(evalMatch[3]) : undefined,\n functionName: evalMatch[2] || '<anonymous>'\n };\n\n // Position inside evaluated code\n frame.line = safeParseInt(evalMatch[7]) ?? undefined;\n frame.column = safeParseInt(evalMatch[8]) ?? undefined;\n frame.fileName = evalMatch[6] ? normalizePath(evalMatch[6]) : undefined;\n } else if (standardMatch) {\n // Handle standard format\n frame.functionName = standardMatch[1] ? standardMatch[1].trim() : undefined;\n\n if (standardMatch[5] === 'native') {\n frame.native = true;\n frame.fileName = '[native code]';\n } else {\n frame.line = safeParseInt(standardMatch[3]) ?? undefined;\n frame.column = safeParseInt(standardMatch[4]) ?? undefined;\n frame.fileName = standardMatch[2] ? normalizePath(standardMatch[2]) : undefined;\n if(frame.fileName?.includes('node:')) frame.native = true;\n }\n } else if (globalMatch) {\n frame.fileName = globalMatch[1] ? normalizePath(globalMatch[1]) : undefined;\n frame.line = safeParseInt(globalMatch[2]) ?? undefined;\n frame.column = safeParseInt(globalMatch[3]) ?? undefined;\n }\n\n return frame;\n}\n\n/**\n * Parses a SpiderMonkey JavaScript engine stack trace line into a structured StackFrame object\n *\n * @param line - The stack trace line to parse\n * @returns A StackFrame object containing the parsed information\n *\n * @remarks\n * Handles both standard SpiderMonkey stack frames and eval/Function-generated stack frames\n * which contain additional evaluation context information.\n *\n * @example\n * ```ts\n * // Standard frame\n * parseSpiderMonkeyStackLine(\"functionName@/path/to/file.js:10:15\");\n *\n * // Eval frame\n * parseSpiderMonkeyStackLine(\"evalFn@/source.js line 5 > eval:1:5\");\n * ```\n *\n * @see StackFrame\n * @see createDefaultFrame\n *\n * @since 2.1.0\n */\n\nexport function parseSpiderMonkeyStackLine(line: string): StackFrame {\n const frame = createDefaultFrame(line);\n\n // Check for eval/Function format\n const evalMatch = line.match(PATTERNS.SPIDERMONKEY.EVAL);\n if (evalMatch) {\n frame.eval = true;\n frame.functionName = evalMatch[1] ? evalMatch[1] : undefined;\n\n if (line.toLowerCase().includes('constructor'))\n frame.constructor = true;\n\n if (line.toLowerCase().includes('async'))\n frame.async = true;\n\n // Add eval origin information\n frame.evalOrigin = {\n line: safeParseInt(evalMatch[7]) ?? undefined,\n column: safeParseInt(evalMatch[8]) ?? undefined,\n fileName: normalizePath(evalMatch[6]),\n functionName: evalMatch[5] ? evalMatch[5] : undefined\n };\n\n // Position inside evaluated code\n frame.line = safeParseInt(evalMatch[3]) ?? undefined;\n frame.column = safeParseInt(evalMatch[4]) ?? undefined;\n\n return frame;\n }\n\n // Standard SpiderMonkey format\n const match = line.match(PATTERNS.SPIDERMONKEY.STANDARD);\n if (match) {\n frame.functionName = match[1] ? match[1] : undefined;\n frame.fileName = normalizePath(match[2]);\n\n if (match[3] === '[native code]') {\n frame.fileName = '[native code]';\n } else {\n frame.line = safeParseInt(match[4]) ?? undefined;\n frame.column = safeParseInt(match[5]) ?? undefined;\n }\n }\n\n return frame;\n}\n\n/**\n * Parses a JavaScriptCore engine stack trace line into a structured StackFrame object\n *\n * @param line - The stack trace line to parse\n * @returns A StackFrame object containing the parsed information\n *\n * @remarks\n * Handles both standard JavaScriptCore stack frames and eval-generated stack frames.\n * Special handling is provided for \"global code\" references and native code.\n *\n * @example\n * ```ts\n * // Standard frame\n * parseJavaScriptCoreStackLine(\"functionName@/path/to/file.js:10:15\");\n *\n * // Eval frame\n * parseJavaScriptCoreStackLine(\"eval code@\");\n * ```\n *\n * @see StackFrame\n * @see createDefaultFrame\n *\n * @since 2.1.0\n */\n\nexport function parseJavaScriptCoreStackLine(line: string): StackFrame {\n const frame = createDefaultFrame(line);\n\n // Standard JavaScriptCore format\n const match = line.match(PATTERNS.JAVASCRIPT_CORE.STANDARD);\n if (match) {\n frame.functionName = match[2];\n frame.eval = (match[1] === 'eval' || match[3] === 'eval');\n\n if (line.toLowerCase().includes('constructor'))\n frame.constructor = true;\n\n if (line.toLowerCase().includes('async'))\n frame.async = true;\n\n if (match[3] === '[native code]') {\n frame.native = true;\n frame.fileName = '[native code]';\n } else {\n frame.line = safeParseInt(match[4]) ?? undefined;\n frame.column = safeParseInt(match[5]) ?? undefined;\n frame.fileName = normalizePath(match[3]);\n }\n }\n\n return frame;\n}\n\n/**\n * Parses a stack trace line based on the detected JavaScript engine\n *\n * @param line - The stack trace line to parse\n * @param engine - The JavaScript engine type that generated the stack trace\n * @returns A StackFrame object containing the parsed information\n *\n * @remarks\n * Delegates to the appropriate parsing function based on the JavaScript engine.\n * Defaults to V8 parsing if the engine is unknown.\n *\n * @example\n * ```ts\n * const engine = detectJSEngine(stackLine);\n * const frame = parseStackLine(stackLine, engine);\n * ```\n *\n * @see JSEngines\n * @see parseV8StackLine\n * @see parseSpiderMonkeyStackLine\n * @see parseJavaScriptCoreStackLine\n *\n * @since 2.1.0\n */\n\nexport function parseStackLine(line: string, engine: JSEngines): StackFrame {\n switch (engine) {\n case JSEngines.SPIDERMONKEY:\n return parseSpiderMonkeyStackLine(line);\n case JSEngines.JAVASCRIPT_CORE:\n return parseJavaScriptCoreStackLine(line);\n case JSEngines.V8:\n default:\n return parseV8StackLine(line);\n }\n}\n\n/**\n * Parses a complete error stack trace into a structured format\n *\n * @param error - Error object or error message string to parse\n * @returns A ParsedStackTrace object containing structured stack trace information\n *\n * @remarks\n * Automatically detects the JavaScript engine from the stack format.\n * Filters out redundant information like the error name/message line.\n * Handles both Error objects and string error messages.\n *\n * @example\n * ```ts\n * try {\n * throw new Error (\"Something went wrong\");\n * } catch (error) {\n * const parsedStack = parseErrorStack(error);\n * console.log(parsedStack.name); // \"Error\"\n * console.log(parsedStack.message); // \"Something went wrong\"\n * console.log(parsedStack.stack); // Array of StackFrame objects\n * }\n * ```\n *\n * @see ParsedStackTrace\n * @see StackFrame\n * @see parseStackLine\n * @see detectJSEngine\n *\n * @since 2.1.0\n */\n\nexport function parseErrorStack(error: Error | string): ParsedStackTrace {\n const errorObj = typeof error === 'string' ? new Error(error) : error;\n const stack = errorObj.stack || '';\n const message = errorObj.message || '';\n const name = errorObj.name || 'Error';\n\n const engine = detectJSEngine(stack);\n const stackLines = stack.split('\\n')\n .map(line => line.trim())\n .filter(line => line.trim() !== '')\n .slice(1);\n\n return {\n name,\n message,\n stack: stackLines.map(line => parseStackLine(line, engine)),\n rawStack: stack\n };\n}\n"],
|
|
6
|
-
"mappings": "AAkBA,IAAMA,EAAW,CACb,GAAI,CACA,OAAQ,uBACR,SAAU,8CACV,KAAM,6EACV,EACA,aAAc,CACV,KAAM,qDACN,SAAU,gDACd,EACA,gBAAiB,CACb,SAAU,wDACd,CACJ,EAQkBC,OACdA,IAAA,WACAA,IAAA,+BACAA,IAAA,qCACAA,IAAA,qBAJcA,OAAA,IAwBX,SAASC,EAAeC,EAA0B,CACrD,OAAIA,EAAM,WAAW,SAAS,GAAKA,EAAM,WAAW,KAAK,EAC9C,EAEPA,EAAM,SAAS,GAAG,EACX,wBAAwB,KAAKA,CAAK,EACnC,EAA4B,EAE/B,CACX,CA2BO,SAASC,EAAcC,EAA0B,CAEpD,OAAIA,EAAS,WAAW,SAAS,EAEzBA,EAAS,WAAW,UAAU,GAAK,wBAAwB,KAAKA,CAAQ,EAEjEA,EAAS,UAAU,CAAC,EAIxBA,EAAS,UAAU,CAAC,GAI/BA,EAAWA,EAAS,QAAQ,MAAO,GAAG,EAE/BA,EACX,CAcO,SAASC,EAAmBC,
|
|
4
|
+
"sourceRoot": "https://github.com/remotex-lab/xmap/tree/v4.0.0/",
|
|
5
|
+
"sourcesContent": ["/**\n * Export interfaces\n */\n\nexport type * from '@components/interfaces/parse-component.interface';\n\n/**\n * Import will remove at compile time\n */\n\nimport type { ParsedStackTraceInterface, StackFrameInterface } from '@components/interfaces/parse-component.interface';\n\n/**\n * Regular expression patterns for different JavaScript engines' stack traces\n *\n * @since 2.1.0\n */\n\nconst PATTERNS = {\n V8: {\n GLOBAL: /at\\s(.*):(\\d+):(\\d+)/,\n STANDARD: /at\\s(.*?)\\((?:(.+?):(\\d+):(\\d+)|(native))\\)/,\n EVAL: /^at\\s(.+?)\\s\\(eval\\sat\\s(.+?)\\s?\\((.*):(\\d+):(\\d+)\\),\\s(.+?):(\\d+):(\\d+)\\)$/\n },\n SPIDERMONKEY: {\n EVAL: /^(.*)@(.+?):(\\d+):(\\d+),\\s(.+?)@(.+?):(\\d+):(\\d+)$/,\n STANDARD: /^(.*)@(.*?)(?:(\\[native code\\])|:(\\d+):(\\d+))$/\n },\n JAVASCRIPT_CORE: {\n STANDARD: /^(?:(global|eval)\\s)?(.*)@(.*?)(?::(\\d+)(?::(\\d+))?)?$/\n }\n};\n\n/**\n * Enumeration of JavaScript engines that can be detected from stack traces\n *\n * @since 2.1.0\n */\n\nexport const enum JSEngines {\n V8,\n SPIDERMONKEY,\n JAVASCRIPT_CORE,\n UNKNOWN\n}\n\n/**\n * Detects the JavaScript engine based on the format of a stack trace line\n *\n * @param stack - The stack trace to analyze\n * @returns The identified JavaScript engine type\n *\n * @example\n * ```ts\n * const engine = detectJSEngine(\"at functionName (/path/to/file.js:10:15)\");\n * if (engine === JSEngines.V8) {\n * // Handle V8 specific logic\n * }\n * ```\n *\n * @since 2.1.0\n */\n\nexport function detectJSEngine(stack: string): JSEngines {\n if (stack.startsWith(' at ') || stack.startsWith('at '))\n return JSEngines.V8;\n\n if (stack.includes('@'))\n return /(?:global|eval) code@/.test(stack)\n ? JSEngines.JAVASCRIPT_CORE : JSEngines.SPIDERMONKEY;\n\n return JSEngines.UNKNOWN;\n}\n\n/**\n * Normalizes file paths from various formats to a standard format\n *\n * @param filePath - The file path to normalize, which may include protocol prefixes\n * @returns A normalized file path with consistent separators and without protocol prefixes\n *\n * @remarks\n * Handles both Windows and Unix-style paths, as well as file:// protocol URLs.\n * Converts all backslashes to forward slashes for consistency.\n *\n * @example\n * ```ts\n * // Windows file URL to a normal path\n * normalizePath(\"file:///C:/path/to/file.js\"); // \"C:/path/to/file.js\"\n *\n * // Unix file URL to a normal path\n * normalizePath(\"file:///path/to/file.js\"); // \"/path/to/file.js\"\n *\n * // Windows backslashes to forward slashes\n * normalizePath(\"C:\\\\path\\\\to\\\\file.js\"); // \"C:/path/to/file.js\"\n * ```\n *\n * @since 2.1.0\n */\n\nexport function normalizePath(filePath: string): string {\n // Handle file:// protocol URLs\n if (filePath.startsWith('file://')) {\n // Handle Windows file:/// format\n if (filePath.startsWith('file:///') && /^file:\\/\\/\\/[A-Za-z]:/.test(filePath)) {\n // Windows absolute path: file:///C:/path/to/file.js\n return filePath.substring(8);\n }\n\n // Handle *nix file:// format\n return filePath.substring(7);\n }\n\n // Handle Windows-style paths with backward slashes\n filePath = filePath.replace(/\\\\/g, '/');\n\n return filePath;\n}\n\n/**\n * Creates a default stack frame object with initial values\n *\n * @param source - The original source line from the stack trace\n * @returns A new StackFrameInterface object with default null values\n *\n * @see ParsedStackTraceInterface\n * @see StackFrameInterface\n *\n * @since 2.1.0\n */\n\nexport function createDefaultFrame(source: string): StackFrameInterface {\n return {\n source,\n eval: false,\n async: false,\n native: false,\n constructor: false\n };\n}\n\n/**\n * Safely parses a string value to an integer, handling undefined and null cases\n *\n * @param value - The string value to parse\n * @returns The parsed integer or null if the input is undefined/null\n *\n * @example\n * ```ts\n * safeParseInt(\"42\"); // 42\n * safeParseInt(undefined); // null\n * safeParseInt(null); // null\n * ```\n *\n * @since 2.1.0\n */\n\nexport function safeParseInt(value: string | undefined | null): number | undefined {\n return value && value.trim() !== '' ? parseInt(value, 10) : undefined;\n}\n\n/**\n * Parses a V8 JavaScript engine stack trace line into a structured StackFrameInterface object\n *\n * @param line - The stack trace line to parse\n * @returns A StackFrameInterface object containing the parsed information\n *\n * @remarks\n * Handles both standard V8 stack frames and eval-generated stack frames which\n * have a more complex structure with nested origin information.\n *\n * @example\n * ```ts\n * // Standard frame\n * parseV8StackLine(\"at functionName (/path/to/file.js:10:15)\");\n *\n * // Eval frame\n * parseV8StackLine(\"at eval (eval at evalFn (/source.js:5:10), <anonymous>:1:5)\");\n * ```\n *\n * @throws Error - If the line format doesn't match any known V8 pattern\n *\n * @see StackFrameInterface\n * @see createDefaultFrame\n *\n * @since 2.1.0\n */\n\nexport function parseV8StackLine(line: string): StackFrameInterface {\n const frame = createDefaultFrame(line);\n\n // Common flags that apply to all formats\n if (line.toLowerCase().includes('new')) frame.constructor = true;\n if (line.toLowerCase().includes('async')) frame.async = true;\n\n // Try to match against each pattern\n const evalMatch = line.match(PATTERNS.V8.EVAL);\n const globalMatch = line.match(PATTERNS.V8.GLOBAL);\n const standardMatch = !evalMatch && line.match(PATTERNS.V8.STANDARD);\n\n if (evalMatch) {\n // Handle eval format\n frame.eval = true;\n frame.functionName = evalMatch[1] || undefined;\n\n // Add eval origin information\n frame.evalOrigin = {\n line: safeParseInt(evalMatch[4]) ?? undefined,\n column: safeParseInt(evalMatch[5]) ?? undefined,\n fileName: evalMatch[3] ? normalizePath(evalMatch[3]) : undefined,\n functionName: evalMatch[2] || '<anonymous>'\n };\n\n // Position inside evaluated code\n frame.line = safeParseInt(evalMatch[7]) ?? undefined;\n frame.column = safeParseInt(evalMatch[8]) ?? undefined;\n frame.fileName = evalMatch[6] ? normalizePath(evalMatch[6]) : undefined;\n } else if (standardMatch) {\n // Handle standard format\n frame.functionName = standardMatch[1] ? standardMatch[1].trim() : undefined;\n\n if (standardMatch[5] === 'native') {\n frame.native = true;\n frame.fileName = '[native code]';\n } else {\n frame.line = safeParseInt(standardMatch[3]) ?? undefined;\n frame.column = safeParseInt(standardMatch[4]) ?? undefined;\n frame.fileName = standardMatch[2] ? normalizePath(standardMatch[2]) : undefined;\n if(frame.fileName?.includes('node:')) frame.native = true;\n }\n } else if (globalMatch) {\n frame.fileName = globalMatch[1] ? normalizePath(globalMatch[1]) : undefined;\n frame.line = safeParseInt(globalMatch[2]) ?? undefined;\n frame.column = safeParseInt(globalMatch[3]) ?? undefined;\n }\n\n return frame;\n}\n\n/**\n * Parses a SpiderMonkey JavaScript engine stack trace line into a structured StackFrameInterface object\n *\n * @param line - The stack trace line to parse\n * @returns A StackFrameInterface object containing the parsed information\n *\n * @remarks\n * Handles both standard SpiderMonkey stack frames and eval/Function-generated stack frames\n * which contain additional evaluation context information.\n *\n * @example\n * ```ts\n * // Standard frame\n * parseSpiderMonkeyStackLine(\"functionName@/path/to/file.js:10:15\");\n *\n * // Eval frame\n * parseSpiderMonkeyStackLine(\"evalFn@/source.js line 5 > eval:1:5\");\n * ```\n *\n * @see StackFrameInterface\n * @see createDefaultFrame\n *\n * @since 2.1.0\n */\n\nexport function parseSpiderMonkeyStackLine(line: string): StackFrameInterface {\n const frame = createDefaultFrame(line);\n\n // Check for eval/Function format\n const evalMatch = line.match(PATTERNS.SPIDERMONKEY.EVAL);\n if (evalMatch) {\n frame.eval = true;\n frame.functionName = evalMatch[1] ? evalMatch[1] : undefined;\n\n if (line.toLowerCase().includes('constructor'))\n frame.constructor = true;\n\n if (line.toLowerCase().includes('async'))\n frame.async = true;\n\n // Add eval origin information\n frame.evalOrigin = {\n line: safeParseInt(evalMatch[7]) ?? undefined,\n column: safeParseInt(evalMatch[8]) ?? undefined,\n fileName: normalizePath(evalMatch[6]),\n functionName: evalMatch[5] ? evalMatch[5] : undefined\n };\n\n // Position inside evaluated code\n frame.line = safeParseInt(evalMatch[3]) ?? undefined;\n frame.column = safeParseInt(evalMatch[4]) ?? undefined;\n\n return frame;\n }\n\n // Standard SpiderMonkey format\n const match = line.match(PATTERNS.SPIDERMONKEY.STANDARD);\n if (match) {\n frame.functionName = match[1] ? match[1] : undefined;\n frame.fileName = normalizePath(match[2]);\n\n if (match[3] === '[native code]') {\n frame.fileName = '[native code]';\n } else {\n frame.line = safeParseInt(match[4]) ?? undefined;\n frame.column = safeParseInt(match[5]) ?? undefined;\n }\n }\n\n return frame;\n}\n\n/**\n * Parses a JavaScriptCore engine stack trace line into a structured StackFrameInterface object\n *\n * @param line - The stack trace line to parse\n * @returns A StackFrameInterface object containing the parsed information\n *\n * @remarks\n * Handles both standard JavaScriptCore stack frames and eval-generated stack frames.\n * Special handling is provided for \"global code\" references and native code.\n *\n * @example\n * ```ts\n * // Standard frame\n * parseJavaScriptCoreStackLine(\"functionName@/path/to/file.js:10:15\");\n *\n * // Eval frame\n * parseJavaScriptCoreStackLine(\"eval code@\");\n * ```\n *\n * @see StackFrameInterface\n * @see createDefaultFrame\n *\n * @since 2.1.0\n */\n\nexport function parseJavaScriptCoreStackLine(line: string): StackFrameInterface {\n const frame = createDefaultFrame(line);\n\n // Standard JavaScriptCore format\n const match = line.match(PATTERNS.JAVASCRIPT_CORE.STANDARD);\n if (match) {\n frame.functionName = match[2];\n frame.eval = (match[1] === 'eval' || match[3] === 'eval');\n\n if (line.toLowerCase().includes('constructor'))\n frame.constructor = true;\n\n if (line.toLowerCase().includes('async'))\n frame.async = true;\n\n if (match[3] === '[native code]') {\n frame.native = true;\n frame.fileName = '[native code]';\n } else {\n frame.line = safeParseInt(match[4]) ?? undefined;\n frame.column = safeParseInt(match[5]) ?? undefined;\n frame.fileName = normalizePath(match[3]);\n }\n }\n\n return frame;\n}\n\n/**\n * Parses a stack trace line based on the detected JavaScript engine\n *\n * @param line - The stack trace line to parse\n * @param engine - The JavaScript engine type that generated the stack trace\n * @returns A StackFrameInterface object containing the parsed information\n *\n * @remarks\n * Delegates to the appropriate parsing function based on the JavaScript engine.\n * Defaults to V8 parsing if the engine is unknown.\n *\n * @example\n * ```ts\n * const engine = detectJSEngine(stackLine);\n * const frame = parseStackLine(stackLine, engine);\n * ```\n *\n * @see JSEngines\n * @see parseV8StackLine\n * @see parseSpiderMonkeyStackLine\n * @see parseJavaScriptCoreStackLine\n *\n * @since 2.1.0\n */\n\nexport function parseStackLine(line: string, engine: JSEngines): StackFrameInterface {\n switch (engine) {\n case JSEngines.SPIDERMONKEY:\n return parseSpiderMonkeyStackLine(line);\n case JSEngines.JAVASCRIPT_CORE:\n return parseJavaScriptCoreStackLine(line);\n case JSEngines.V8:\n default:\n return parseV8StackLine(line);\n }\n}\n\n/**\n * Parses a complete error stack trace into a structured format\n *\n * @param error - Error object or error message string to parse\n * @returns A ParsedStackTraceInterface object containing structured stack trace information\n *\n * @remarks\n * Automatically detects the JavaScript engine from the stack format.\n * Filters out redundant information like the error name/message line.\n * Handles both Error objects and string error messages.\n *\n * @example\n * ```ts\n * try {\n * throw new Error (\"Something went wrong\");\n * } catch (error) {\n * const parsedStack = parseErrorStack(error);\n * console.log(parsedStack.name); // \"Error\"\n * console.log(parsedStack.message); // \"Something went wrong\"\n * console.log(parsedStack.stack); // Array of StackFrameInterface objects\n * }\n * ```\n *\n * @see ParsedStackTraceInterface\n * @see StackFrameInterface\n * @see parseStackLine\n * @see detectJSEngine\n *\n * @since 2.1.0\n */\n\nexport function parseErrorStack(error: Error | string): ParsedStackTraceInterface {\n const errorObj = typeof error === 'string' ? new Error(error) : error;\n const stack = errorObj.stack || '';\n const message = errorObj.message || '';\n const name = errorObj.name || 'Error';\n\n const engine = detectJSEngine(stack);\n const stackLines = stack.split('\\n')\n .map(line => line.trim())\n .filter(line => line.trim() !== '')\n .slice(1);\n\n return {\n name,\n message,\n stack: stackLines.map(line => parseStackLine(line, engine)),\n rawStack: stack\n };\n}\n"],
|
|
6
|
+
"mappings": "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",
|
|
7
7
|
"names": ["PATTERNS", "JSEngines", "detectJSEngine", "stack", "normalizePath", "filePath", "createDefaultFrame", "source", "safeParseInt", "value", "parseV8StackLine", "line", "frame", "evalMatch", "globalMatch", "standardMatch", "parseSpiderMonkeyStackLine", "match", "parseJavaScriptCoreStackLine", "parseStackLine", "engine", "parseErrorStack", "error", "errorObj", "message", "name", "stackLines"]
|
|
8
8
|
}
|