UNPKG

4.76 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.captureStackTrace = void 0;
4const debug_1 = require("./debug");
5/**
6 * Captures the current process' stack trace.
7 *
8 * Stack traces are often invaluable tools to help diagnose problems, however
9 * their capture is a rather expensive operation, and the stack traces can be
10 * large. Consequently, users are stronly advised to condition capturing stack
11 * traces to specific user opt-in.
12 *
13 * Stack traces will only be captured if the `CDK_DEBUG` environment variable
14 * is set to `'true'` or `1`.
15 *
16 * @param below an optional function starting from which stack frames will be
17 * ignored. Defaults to the `captureStackTrace` function itself.
18 * @param limit and optional upper bound to the number of stack frames to be
19 * captured. If not provided, this defaults to
20 * `Number.MAX_SAFE_INTEGER`, effectively meaning "no limit".
21 *
22 * @returns the captured stack trace, as an array of stack frames.
23 */
24function captureStackTrace(below = captureStackTrace, limit = Number.MAX_SAFE_INTEGER) {
25 if (!debug_1.debugModeEnabled()) {
26 return ['stack traces disabled'];
27 }
28 const object = {};
29 const previousLimit = Error.stackTraceLimit;
30 try {
31 Error.stackTraceLimit = limit;
32 Error.captureStackTrace(object, below);
33 }
34 finally {
35 Error.stackTraceLimit = previousLimit;
36 }
37 if (!object.stack) {
38 return [];
39 }
40 return object.stack.split('\n').slice(1).map(s => s.replace(/^\s*at\s+/, ''));
41}
42exports.captureStackTrace = captureStackTrace;
43//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay10cmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBMkM7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixRQUFrQixpQkFBaUIsRUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0I7SUFFL0IsSUFBSSxDQUFDLHdCQUFnQixFQUFFLEVBQUU7UUFDdkIsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FDbEM7SUFFRCxNQUFNLE1BQU0sR0FBdUIsRUFBRSxDQUFDO0lBQ3RDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDNUMsSUFBSTtRQUNGLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzlCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDeEM7WUFBUztRQUNSLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO0tBQ3ZDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDakIsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQXBCRCw4Q0FvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWJ1Z01vZGVFbmFibGVkIH0gZnJvbSAnLi9kZWJ1Zyc7XG5cbi8qKlxuICogQ2FwdHVyZXMgdGhlIGN1cnJlbnQgcHJvY2Vzcycgc3RhY2sgdHJhY2UuXG4gKlxuICogU3RhY2sgdHJhY2VzIGFyZSBvZnRlbiBpbnZhbHVhYmxlIHRvb2xzIHRvIGhlbHAgZGlhZ25vc2UgcHJvYmxlbXMsIGhvd2V2ZXJcbiAqIHRoZWlyIGNhcHR1cmUgaXMgYSByYXRoZXIgZXhwZW5zaXZlIG9wZXJhdGlvbiwgYW5kIHRoZSBzdGFjayB0cmFjZXMgY2FuIGJlXG4gKiBsYXJnZS4gQ29uc2VxdWVudGx5LCB1c2VycyBhcmUgc3Ryb25seSBhZHZpc2VkIHRvIGNvbmRpdGlvbiBjYXB0dXJpbmcgc3RhY2tcbiAqIHRyYWNlcyB0byBzcGVjaWZpYyB1c2VyIG9wdC1pbi5cbiAqXG4gKiBTdGFjayB0cmFjZXMgd2lsbCBvbmx5IGJlIGNhcHR1cmVkIGlmIHRoZSBgQ0RLX0RFQlVHYCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICogaXMgc2V0IHRvIGAndHJ1ZSdgIG9yIGAxYC5cbiAqXG4gKiBAcGFyYW0gYmVsb3cgYW4gb3B0aW9uYWwgZnVuY3Rpb24gc3RhcnRpbmcgZnJvbSB3aGljaCBzdGFjayBmcmFtZXMgd2lsbCBiZVxuICogICAgICAgICAgICAgIGlnbm9yZWQuIERlZmF1bHRzIHRvIHRoZSBgY2FwdHVyZVN0YWNrVHJhY2VgIGZ1bmN0aW9uIGl0c2VsZi5cbiAqIEBwYXJhbSBsaW1pdCBhbmQgb3B0aW9uYWwgdXBwZXIgYm91bmQgdG8gdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgdG8gYmVcbiAqICAgICAgICAgICAgICBjYXB0dXJlZC4gSWYgbm90IHByb3ZpZGVkLCB0aGlzIGRlZmF1bHRzIHRvXG4gKiAgICAgICAgICAgICAgYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYCwgZWZmZWN0aXZlbHkgbWVhbmluZyBcIm5vIGxpbWl0XCIuXG4gKlxuICogQHJldHVybnMgdGhlIGNhcHR1cmVkIHN0YWNrIHRyYWNlLCBhcyBhbiBhcnJheSBvZiBzdGFjayBmcmFtZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlU3RhY2tUcmFjZShcbiAgYmVsb3c6IEZ1bmN0aW9uID0gY2FwdHVyZVN0YWNrVHJhY2UsXG4gIGxpbWl0ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4pOiBzdHJpbmdbXSB7XG4gIGlmICghZGVidWdNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuIFsnc3RhY2sgdHJhY2VzIGRpc2FibGVkJ107XG4gIH1cblxuICBjb25zdCBvYmplY3Q6IHsgc3RhY2s/OiBzdHJpbmcgfSA9IHt9O1xuICBjb25zdCBwcmV2aW91c0xpbWl0ID0gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0O1xuICB0cnkge1xuICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IGxpbWl0O1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iamVjdCwgYmVsb3cpO1xuICB9IGZpbmFsbHkge1xuICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHByZXZpb3VzTGltaXQ7XG4gIH1cbiAgaWYgKCFvYmplY3Quc3RhY2spIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG9iamVjdC5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMSkubWFwKHMgPT4gcy5yZXBsYWNlKC9eXFxzKmF0XFxzKy8sICcnKSk7XG59XG4iXX0=
\No newline at end of file