UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

3 lines (2 loc) 3.82 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.captureStackTrace=captureStackTrace,exports.enhancedStackTrace=enhancedStackTrace,exports.captureCallStack=captureCallStack,exports.parseErrorStack=parseErrorStack,exports.renderCallStackJustMyCode=renderCallStackJustMyCode,exports.topUserFrame=topUserFrame;function captureStackTrace(below=captureStackTrace,limit=void 0){if(!limit)return enhancedStackTrace(below,!1);const previousLimit=Error.stackTraceLimit;try{return Error.stackTraceLimit=limit,enhancedStackTrace(below,!1)}finally{Error.stackTraceLimit=previousLimit}}function enhancedStackTrace(upTo,indent=!0){return withExternalTrace(renderCallStackJustMyCode(captureCallStack(upTo),indent))}function withExternalTrace(internal){const hostTrace=global[Symbol.for("jsii.context.hostStackTrace")];return hostTrace!=null?internal.concat(hostTrace.slice(1).map(formatExternalFrame)):internal}function captureCallStack(upTo){const obj={};Error.captureStackTrace(obj,upTo);let trace=parseErrorStack(obj.stack);return trace.length===0&&(Error.captureStackTrace(obj),trace=parseErrorStack(obj.stack)),trace}function formatExternalFrame(trace){const[filename,line,column,name]=trace;return`${name} (${filename}:${line}${column>0?":"+column:""})`}function parseErrorStack(stack){const lines=stack.split(` `),framePrefix=" at ";return lines.filter(line=>line.startsWith(framePrefix)).map(line=>{line=line.slice(framePrefix.length);const frame=parseStackFrame(line);return frame.functionName==="Object.<anonymous>"&&(frame.functionName="<anonymous>"),frame})}function parseStackFrame(frame){let fileName,functionName,sourceLocation;const paren=frame.indexOf("(");paren?(functionName=frame.slice(0,paren-1),frame=frame.slice(paren+1,-1)):functionName="<entry>";let asI=functionName.indexOf(" [as ");asI>-1&&(functionName=functionName.slice(0,asI));const m=frame.match(/(:[0-9]+){0,2}$/);return fileName=m?frame.slice(0,-m[0].length):frame,sourceLocation=m?m[0].slice(1):"",{fileName,functionName,sourceLocation}}const MODULE_RE=/(\/|\\)node_modules(\/|\\)(@[^/\\]+[/\\][^/\\]+|[^@][^/\\]*)/,DECORATOR_RE=/(\/|\\)(prop-injectable|no-box-stack-traces)\./;function renderCallStackJustMyCode(stack,indent=!0){const lines=[];let skipped=new Array,sawMyCode=!1,i=0;for(;i<stack.length;){const frame=stack[i++];if(frame.fileName.match(DECORATOR_RE))continue;const pat=frame.fileName.match(MODULE_RE);if(pat){for(;i<stack.length&&stack[i].fileName.includes(pat[0]);)i++;skip({functionName:stack[i-1].functionName,fileName:pat[3]})}else if(frame.fileName.includes("node:"))for(skip({fileName:"node internals"});i<stack.length&&stack[i].fileName.includes("node:");)i++;else if(isHostInternalFrame(frame))for(skip({fileName:"jsii runtime"});i<stack.length&&isHostInternalFrame(stack[i]);)i++;else{reportSkipped(!0);const prefix=indent?" at ":"";lines.push(`${prefix}${frame.functionName} (${frame.fileName}:${frame.sourceLocation})`),sawMyCode=!0}}return reportSkipped(!1),sawMyCode||lines.push(`${indent?" ":""}(no user code in ${Error.stackTraceLimit} frames, use --stack-trace-limit to capture more)`),lines;function skip(what){skipped.find(x=>x.fileName===what.fileName&&x.functionName===what.functionName)||skipped.push(what)}function reportSkipped(includeFunction){if(skipped.length>0){const rendered=skipped.map((s,j)=>j===skipped.length-1&&s.functionName&&includeFunction?`${s.functionName} in ${s.fileName}`:s.fileName),prefix=indent?" ":"";lines.push(`${prefix}...${rendered.join(", ")}...`)}skipped=[]}}function topUserFrame(stackTrace){for(const frame of stackTrace)if(frame.includes(" (")&&frame.endsWith(")"))return parseStackFrame(frame)}function isHostInternalFrame(frame){const hostDirName=global[Symbol.for("jsii.context.hostDirName")];return frame.fileName.includes(hostDirName)}