{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-constraints/src/client/utils/stack.js"],"names":["Stack","defaultErrorMessage","constructor","omitFn","max","Error","stackTraceLimit","Infinity","captureStackTrace","_error","_frames","_computeFrames","stack","desc","lines","slice","map","line","Frame","frames","getFrame","id","getFrames","from","to","toString","join","_desc","_extractInfos","endsWith","extractSourceInfo","result","exec","info","_getFileLineChar","_applyLocationInfo","isNamedCall","namedCall","funcDesc","location","locations","getLocations","evalInfo","sourceLocation","_extractEvalInfos","info2","_getFunction","_applyFunctionInfo","lively","warn","_applyEvalLocationInfo","_applyEvalFunctionInfo","locationDesc","reverseString","str","split","reverse","reversedDesc","reversedFileLineChar","char","transpiled","file","parseInt","_char","_line","_transpiled","_file","_evalChar","_evalLine","_evalTranspiled","_evalFile","newAsyncFunc","isNew","isAsync","func","_new","_async","_func","_evalNew","_evalAsync","_evalFunc","async","new","evalAsync","evalNew","evalFunc","evalFile","evalTranspiled","evalLine","evalChar","openInBrowser","browser","replace"],"mappings":"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","file":"stack.js","sourcesContent":["/*MD # Stack MD*/\nexport default class Stack {\n  static get defaultErrorMessage() {\n    return 'Error for stack';\n  }\n  constructor({ omitFn = Stack, max }) {\n    Error.stackTraceLimit = Infinity;\n    Error.captureStackTrace(this._error = {}, omitFn);\n    this._frames = this._computeFrames(this._error.stack, max);\n  }\n  _computeFrames(desc, max) {\n    return desc.lines().slice(1, max).map(line => new Frame(line));\n  }\n  get frames() {\n    return this._frames;\n  }\n  getFrame(id = 1) {\n    return this.frames[id];\n  }\n  getFrames(from, to) {\n    return this.frames.slice(from, to);\n  }\n  toString() {\n    return this.frames.join('\\n');\n  }\n}\n\n/*MD # Frame\nView some examples at [regex101](https://regex101.com/r/pSppPm/3)\nMD*/\nexport class Frame {\n  constructor(desc) {\n    this._desc = desc;\n    this._extractInfos(this._desc);\n  }\n\n  _extractInfos(desc) {\n    // just file, transpiled, line, char given -> no parens around\n    // \" at https://lively-kernel.org/lively4/aexpr/src/external/mocha.js?1583757762700:4694:7\"\n    if (!this._desc.endsWith(')')) {\n      const extractSourceInfo = /^\\s+at\\s(.*)$/;\n      const result = extractSourceInfo.exec(desc);\n      // lively.openInspector(result)\n      const info = this._getFileLineChar(result[1]);\n      this._applyLocationInfo(info);\n\n      return;\n    }\n\n    // e.g. \" at Function.stack (https://lively-kernel.org/lively4/aexpr/src/client/lively.js!transpiled:2548:19)\"\n    const isNamedCall = /^\\s+at\\s([^\\(]*)\\s\\((.*)\\)$/;\n    let namedCall;\n    if ((namedCall = isNamedCall.exec(desc)) !== null) {\n      const [, funcDesc, location] = namedCall;\n\n      let locations;\n      // \" at doEvaluate (eval at loadJavaScript (https://lively-kernel.org/lively4/aexpr/src/client/boot.js:25:3), &lt;anonymous>:1554:13)\"\n      // can also have no infos on function name of eval call:\n      // \"    at eval (eval at <anonymous> (https://lively-kernel.org/lively4/aexpr/test/stack-test.js!transpiled), <anonymous>:8:19)\"\n      const getLocations = /^(?:eval\\sat\\s(.*\\)),\\s)?(.*)$/;\n      if ((locations = getLocations.exec(location)) !== null) {\n        const [, evalInfo, sourceLocation] = locations;\n\n        if (evalInfo) {\n          this._extractEvalInfos(evalInfo);\n        }\n\n        const info = this._getFileLineChar(sourceLocation);\n        this._applyLocationInfo(info);\n      }\n\n      const info2 = this._getFunction(funcDesc);\n      this._applyFunctionInfo(info2);\n\n      return;\n    }\n\n    lively.warn('could not analyse frame', desc);\n    debugger;\n  }\n\n  _extractEvalInfos(desc) {\n    const isNamedCall = /^([^\\(]*)\\s\\((.*)\\)$/;\n    let namedCall;\n    if ((namedCall = isNamedCall.exec(desc)) !== null) {\n      const [, funcDesc, location] = namedCall;\n\n      const info = this._getFileLineChar(location);\n      this._applyEvalLocationInfo(info);\n\n      const info2 = this._getFunction(funcDesc);\n      this._applyEvalFunctionInfo(info2);\n    }\n  }\n\n  /*MD ## location utils MD*/\n  _getFileLineChar(locationDesc) {\n    function reverseString(str) {\n      return str.split('').reverse().join('');\n    }\n\n    const reversedDesc = reverseString(locationDesc);\n    const reversedFileLineChar = /^(?:(\\d+):)?(?:(\\d+):)?(?:(delipsnart)!)?(.*)$/;\n\n    const [, char, line, transpiled, file] = reversedFileLineChar.exec(reversedDesc);\n\n    return {\n      char: char && parseInt(reverseString(char)),\n      line: line && parseInt(reverseString(line)),\n      transpiled: !!transpiled,\n      file: reverseString(file)\n    };\n  }\n\n  _applyLocationInfo({ char, line, transpiled, file }) {\n    this._char = char;\n    this._line = line;\n    this._transpiled = transpiled;\n    this._file = file;\n  }\n\n  _applyEvalLocationInfo({ char, line, transpiled, file }) {\n    this._evalChar = char;\n    this._evalLine = line;\n    this._evalTranspiled = transpiled;\n    this._evalFile = file;\n  }\n\n  /*MD ## func utils MD*/\n  _getFunction(desc) {\n    const newAsyncFunc = /^(?:(new)\\s)?(?:(async)\\s)?(.+)$/;\n\n    const [, isNew, isAsync, func] = newAsyncFunc.exec(desc);\n\n    return {\n      isNew: !!isNew,\n      isAsync: !!isAsync,\n      func\n    };\n  }\n\n  _applyFunctionInfo({ isNew, isAsync, func }) {\n    this._new = isNew;\n    this._async = isAsync;\n    this._func = func;\n  }\n\n  _applyEvalFunctionInfo({ isNew, isAsync, func }) {\n    this._evalNew = isNew;\n    this._evalAsync = isAsync;\n    this._evalFunc = func;\n  }\n\n  /*MD ## func MD*/\n  /**\n   * returns Bool\n   */\n  get async() {\n    return this._async || false;\n  }\n\n  get new() {\n    return this._new || false;\n  }\n\n  get func() {\n    return this._func;\n  }\n\n  /*MD ## location MD*/\n  get file() {\n    return this._file;\n  }\n\n  get transpiled() {\n    return this._transpiled || false;\n  }\n\n  get line() {\n    return this._line;\n  }\n\n  get char() {\n    return this._char;\n  }\n\n  /*MD ## eval func MD*/\n  /**\n   * returns Bool\n   */\n  get evalAsync() {\n    return this._evalAsync || false;\n  }\n\n  get evalNew() {\n    return this._evalNew || false;\n  }\n\n  get evalFunc() {\n    return this._evalFunc;\n  }\n\n  /*MD ## eval location MD*/\n  get evalFile() {\n    return this._evalFile;\n  }\n\n  get evalTranspiled() {\n    return this._evalTranspiled;\n  }\n\n  get evalLine() {\n    return this._evalLine;\n  }\n\n  get evalChar() {\n    return this._evalChar;\n  }\n\n  /*MD ## utils MD*/\n  // #TODO: implement\n  openInBrowser(browser) {\n    // #TODO: requires back mapping of source code information #SourceMaps\n  }\n\n  toString() {\n    return this._desc.replace(/\\s+at\\s/, '');\n  }\n\n}"]}