UNPKG

svelte

Version:

Cybernetically enhanced web apps

66 lines (50 loc) 1.28 kB
import { define_property } from './utils.js'; /** * @param {string} label * @returns {Error & { stack: string } | null} */ export function get_error(label) { const error = new Error(); const stack = get_stack(); if (stack.length === 0) { return null; } stack.unshift('\n'); define_property(error, 'stack', { value: stack.join('\n') }); define_property(error, 'name', { value: label }); return /** @type {Error & { stack: string }} */ (error); } /** * @returns {string[]} */ export function get_stack() { // @ts-ignore - doesn't exist everywhere const limit = Error.stackTraceLimit; // @ts-ignore - doesn't exist everywhere Error.stackTraceLimit = Infinity; const stack = new Error().stack; // @ts-ignore - doesn't exist everywhere Error.stackTraceLimit = limit; if (!stack) return []; const lines = stack.split('\n'); const new_lines = []; for (let i = 0; i < lines.length; i++) { const line = lines[i]; const posixified = line.replaceAll('\\', '/'); if (line.trim() === 'Error') { continue; } if (line.includes('validate_each_keys')) { return []; } if (posixified.includes('svelte/src/internal') || posixified.includes('node_modules/.vite')) { continue; } new_lines.push(line); } return new_lines; }