diff --git a/examples/sdk/electron/package-lock.json b/examples/sdk/electron/package-lock.json index d5e0cc8a..e9105f0c 100644 --- a/examples/sdk/electron/package-lock.json +++ b/examples/sdk/electron/package-lock.json @@ -12,7 +12,7 @@ "@backtrace/electron": "file:../../../packages/electron" }, "devDependencies": { - "electron": "^26.2.4", + "electron": "^28.2.1", "ts-loader": "^9.4.3", "typescript": "^5.1.3", "webpack": "^5.87.0", @@ -23,14 +23,14 @@ } }, "../../../packages/electron": { - "version": "0.0.1", + "name": "@backtrace/electron", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@backtrace/node": "^0.0.5", - "@backtrace/sdk-core": "^0.1.0" + "@backtrace/node": "^0.3.0" }, "peerDependencies": { - "electron": "12 - 26" + "electron": "12 - 28" } }, "node_modules/@backtrace/electron": { @@ -798,9 +798,9 @@ "optional": true }, "node_modules/electron": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-26.4.1.tgz", - "integrity": "sha512-G6Huzx2xP+Atknj68EsD/TzjpFSsl7nbfBcDqKf1p9DaPMIB5HRqpts3s/sd5daWinNrWInREEw2A4EavP59qw==", + "version": "28.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-28.2.1.tgz", + "integrity": "sha512-wlzXf+OvOiVlBf9dcSeMMf7Q+N6DG+wtgFbMK0sA/JpIJcdosRbLMQwLg/LTwNVKIbmayqFLDp4FmmFkEMhbYA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -2366,8 +2366,7 @@ "@backtrace/electron": { "version": "file:../../../packages/electron", "requires": { - "@backtrace/node": "^0.0.5", - "@backtrace/sdk-core": "^0.1.0" + "@backtrace/node": "^0.3.0" } }, "@discoveryjs/json-ext": { @@ -2965,9 +2964,9 @@ "optional": true }, "electron": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-26.4.1.tgz", - "integrity": "sha512-G6Huzx2xP+Atknj68EsD/TzjpFSsl7nbfBcDqKf1p9DaPMIB5HRqpts3s/sd5daWinNrWInREEw2A4EavP59qw==", + "version": "28.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-28.2.1.tgz", + "integrity": "sha512-wlzXf+OvOiVlBf9dcSeMMf7Q+N6DG+wtgFbMK0sA/JpIJcdosRbLMQwLg/LTwNVKIbmayqFLDp4FmmFkEMhbYA==", "dev": true, "requires": { "@electron/get": "^2.0.0", diff --git a/examples/sdk/electron/package.json b/examples/sdk/electron/package.json index 4a829969..d05ae701 100644 --- a/examples/sdk/electron/package.json +++ b/examples/sdk/electron/package.json @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/backtrace-labs/backtrace-javascript#readme", "devDependencies": { - "electron": "^26.2.4", + "electron": "^28.2.1", "ts-loader": "^9.4.3", "typescript": "^5.1.3", "webpack": "^5.87.0", diff --git a/examples/sdk/node/package-lock.json b/examples/sdk/node/package-lock.json index e3c51cd1..ccca96e5 100644 --- a/examples/sdk/node/package-lock.json +++ b/examples/sdk/node/package-lock.json @@ -19,10 +19,11 @@ } }, "../../../packages/node": { - "version": "0.0.4", + "name": "@backtrace/node", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@backtrace/sdk-core": "^0.1.0", + "@backtrace/sdk-core": "^0.3.0", "form-data": "^4.0.0", "native-reg": "^1.1.1" }, @@ -62,7 +63,7 @@ "@backtrace/node": { "version": "file:../../../packages/node", "requires": { - "@backtrace/sdk-core": "^0.1.0", + "@backtrace/sdk-core": "^0.3.0", "@types/jest": "^29.5.1", "form-data": "^4.0.0", "jest": "^29.5.0", diff --git a/package-lock.json b/package-lock.json index 6b977fc5..7fb83d3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20963,10 +20963,10 @@ }, "packages/browser": { "name": "@backtrace/browser", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@backtrace/sdk-core": "^0.2.0", + "@backtrace/sdk-core": "^0.3.0", "ua-parser-js": "^1.0.35" }, "devDependencies": { @@ -20984,21 +20984,21 @@ }, "packages/electron": { "name": "@backtrace/electron", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@backtrace/node": "^0.2.0" + "@backtrace/node": "^0.3.0" }, "peerDependencies": { - "electron": "12 - 26" + "electron": "12 - 28" } }, "packages/nestjs": { "name": "@backtrace/nestjs", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@backtrace/node": "^0.2.0" + "@backtrace/node": "^0.3.0" }, "devDependencies": { "@nestjs/core": "^10", @@ -21025,10 +21025,10 @@ }, "packages/node": { "name": "@backtrace/node", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@backtrace/sdk-core": "^0.2.0", + "@backtrace/sdk-core": "^0.3.0", "form-data": "^4.0.0", "native-reg": "^1.1.1" }, @@ -21048,11 +21048,11 @@ }, "packages/react": { "name": "@backtrace/react", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@backtrace/browser": "^0.2.0", - "@backtrace/sdk-core": "^0.2.0" + "@backtrace/browser": "^0.3.0", + "@backtrace/sdk-core": "^0.3.0" }, "devDependencies": { "@testing-library/react": "^14.0.0", @@ -21099,6 +21099,11 @@ "react-native": "*" } }, + "packages/react-native/node_modules/@backtrace/sdk-core": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@backtrace/sdk-core/-/sdk-core-0.2.0.tgz", + "integrity": "sha512-1S2Ou/Sc4u+MOODnDmTqAvnQ9/A5TTNUii+iDbllCKcm5f3VN1MSexvqE3ULWK6zOMZOJDViVGWt/PmCi0Mwlg==" + }, "packages/react-native/node_modules/@types/react": { "version": "17.0.71", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.71.tgz", @@ -21112,7 +21117,7 @@ }, "packages/sdk-core": { "name": "@backtrace/sdk-core", - "version": "0.2.0", + "version": "0.3.1", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.1", diff --git a/packages/browser/CHANGELOG.md b/packages/browser/CHANGELOG.md index 7b480bd3..fbc08561 100644 --- a/packages/browser/CHANGELOG.md +++ b/packages/browser/CHANGELOG.md @@ -1,3 +1,7 @@ +# Version 0.3.0 + +- update `@backtrace/sdk-core` to `0.3.0` + # Version 0.2.0 - update `@backtrace/sdk-core` to `0.2.0` diff --git a/packages/browser/package.json b/packages/browser/package.json index adf6586c..5b4a3d94 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -1,6 +1,6 @@ { "name": "@backtrace/browser", - "version": "0.2.0", + "version": "0.3.0", "description": "Backtrace-JavaScript web browser integration", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -49,7 +49,7 @@ "webpack-cli": "^5.1.4" }, "dependencies": { - "@backtrace/sdk-core": "^0.2.0", + "@backtrace/sdk-core": "^0.3.0", "ua-parser-js": "^1.0.35" } } diff --git a/packages/electron/CHANGELOG.md b/packages/electron/CHANGELOG.md index 5654e615..91748553 100644 --- a/packages/electron/CHANGELOG.md +++ b/packages/electron/CHANGELOG.md @@ -1,3 +1,7 @@ +# Version 0.3.0 + +- update `@backtrace/node` to `0.3.0` + # Version 0.2.0 - update `@backtrace/node` to `0.2.0` diff --git a/packages/electron/package.json b/packages/electron/package.json index 2f7a982e..47c53ccd 100644 --- a/packages/electron/package.json +++ b/packages/electron/package.json @@ -1,6 +1,6 @@ { "name": "@backtrace/electron", - "version": "0.2.0", + "version": "0.3.0", "description": "Backtrace-JavaScript Electron integration", "main": "main/index.js", "types": "main/index.d.ts", @@ -35,9 +35,9 @@ "/renderer" ], "dependencies": { - "@backtrace/node": "^0.2.0" + "@backtrace/node": "^0.3.0" }, "peerDependencies": { - "electron": "12 - 26" + "electron": "12 - 28" } } diff --git a/packages/nestjs/CHANGELOG.md b/packages/nestjs/CHANGELOG.md index b8c7db87..438a5fe6 100644 --- a/packages/nestjs/CHANGELOG.md +++ b/packages/nestjs/CHANGELOG.md @@ -1,3 +1,7 @@ +# Version 0.3.0 + +- update `@backtrace/node` to `0.3.0` + # Version 0.2.0 - update `@backtrace/node` to `0.2.0` diff --git a/packages/nestjs/package.json b/packages/nestjs/package.json index 62711818..b51467ba 100644 --- a/packages/nestjs/package.json +++ b/packages/nestjs/package.json @@ -1,6 +1,6 @@ { "name": "@backtrace/nestjs", - "version": "0.2.0", + "version": "0.3.0", "description": "Backtrace-JavaScript NestJS integration", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -57,7 +57,7 @@ "webpack-node-externals": "^3.0.0" }, "dependencies": { - "@backtrace/node": "^0.2.0" + "@backtrace/node": "^0.3.0" }, "peerDependencies": { "@nestjs/common": "^9 || ^10" diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md index ca1ed9d5..3374719c 100644 --- a/packages/node/CHANGELOG.md +++ b/packages/node/CHANGELOG.md @@ -1,3 +1,8 @@ +# Version 0.3.0 + +- update `@backtrace/sdk-core` to `0.3.0` +- bugfix: use correct http client (#232) + # Version 0.2.0 - update `@backtrace/sdk-core` to `0.2.0` diff --git a/packages/node/package.json b/packages/node/package.json index df7f5f61..063000c9 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "@backtrace/node", - "version": "0.2.0", + "version": "0.3.0", "description": "Backtrace-JavaScript Node.JS integration", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -49,7 +49,7 @@ "webpack-node-externals": "^3.0.0" }, "dependencies": { - "@backtrace/sdk-core": "^0.2.0", + "@backtrace/sdk-core": "^0.3.0", "form-data": "^4.0.0", "native-reg": "^1.1.1" } diff --git a/packages/node/src/BacktraceNodeRequestHandler.ts b/packages/node/src/BacktraceNodeRequestHandler.ts index 7364fcbb..78ce72e8 100644 --- a/packages/node/src/BacktraceNodeRequestHandler.ts +++ b/packages/node/src/BacktraceNodeRequestHandler.ts @@ -142,7 +142,7 @@ export class BacktraceNodeRequestHandler implements BacktraceRequestHandler { } private getHttpClient(submissionUrl: URL) { - return submissionUrl.protocol === 'http' ? http : https; + return submissionUrl.protocol === 'https:' ? https : http; } private createFormData(json: string, attachments?: BacktraceAttachment[]) { const formData = new FormData(); diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index c551cfe4..34d9ac6e 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,3 +1,8 @@ +# Version 0.3.0 + +- update `@backtrace/sdk-core` to `0.3.0` +- update `@backtrace/browser` to `0.3.0` + # Version 0.2.0 - update `@backtrace/browser` to `0.2.0` diff --git a/packages/react/package.json b/packages/react/package.json index 08113851..0da044fd 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@backtrace/react", - "version": "0.2.0", + "version": "0.3.0", "description": "Backtrace-Javascript React integration", "main": "lib/index.js", "scripts": { @@ -47,8 +47,8 @@ "webpack-cli": "^5.1.4" }, "dependencies": { - "@backtrace/browser": "^0.2.0", - "@backtrace/sdk-core": "^0.2.0" + "@backtrace/browser": "^0.3.0", + "@backtrace/sdk-core": "^0.3.0" }, "peerDependencies": { "react": ">=16.8.0" diff --git a/packages/sdk-core/CHANGELOG.md b/packages/sdk-core/CHANGELOG.md index 927c0831..c7043be7 100644 --- a/packages/sdk-core/CHANGELOG.md +++ b/packages/sdk-core/CHANGELOG.md @@ -1,3 +1,11 @@ +# Version 0.3.1 + +- allow to destroy the client instance on dispose() + +# Version 0.3.0 + +- return submission result from the `send` method (#233) + # Version 0.2.0 - fix global is undefined error (#187) diff --git a/packages/sdk-core/package.json b/packages/sdk-core/package.json index a61d549b..57936d24 100644 --- a/packages/sdk-core/package.json +++ b/packages/sdk-core/package.json @@ -1,6 +1,6 @@ { "name": "@backtrace/sdk-core", - "version": "0.2.0", + "version": "0.3.1", "description": "Backtrace-JavaScript SDK core library", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/sdk-core/src/BacktraceCoreClient.ts b/packages/sdk-core/src/BacktraceCoreClient.ts index 627c3fc7..29c3897f 100644 --- a/packages/sdk-core/src/BacktraceCoreClient.ts +++ b/packages/sdk-core/src/BacktraceCoreClient.ts @@ -3,8 +3,10 @@ import { BacktraceAttributeProvider, BacktraceBreadcrumbs, BacktraceConfiguration, + BacktraceReportSubmissionResult, BacktraceRequestHandler, BacktraceSessionProvider, + BacktraceSubmissionResponse, DebugIdProvider, FileSystem, SdkOptions, @@ -16,11 +18,11 @@ import { ReportEvents } from './events/ReportEvents'; import { AttributeType, BacktraceData } from './model/data/BacktraceData'; import { BacktraceReportSubmission, RequestBacktraceReportSubmission } from './model/http/BacktraceReportSubmission'; import { BacktraceReport } from './model/report/BacktraceReport'; -import { BacktraceModule, BacktraceModuleBindData } from './modules/BacktraceModule'; -import { BacktraceModuleCtor, BacktraceModules, ReadonlyBacktraceModules } from './modules/BacktraceModules'; import { AttributeManager } from './modules/attribute/AttributeManager'; import { ClientAttributeProvider } from './modules/attribute/ClientAttributeProvider'; import { UserAttributeProvider } from './modules/attribute/UserAttributeProvider'; +import { BacktraceModule, BacktraceModuleBindData } from './modules/BacktraceModule'; +import { BacktraceModuleCtor, BacktraceModules, ReadonlyBacktraceModules } from './modules/BacktraceModules'; import { BreadcrumbsManager } from './modules/breadcrumbs/BreadcrumbsManager'; import { V8StackTraceConverter } from './modules/converter/V8StackTraceConverter'; import { BacktraceDataBuilder } from './modules/data/BacktraceDataBuilder'; @@ -270,25 +272,28 @@ export abstract class BacktraceCoreClient, attachments?: BacktraceAttachment[], abortSignal?: AbortSignal, - ): Promise; + ): Promise>; /** * Asynchronously sends error data to Backtrace * @param report Backtrace Report * @param abortSignal Signal to abort sending */ - public send(report: BacktraceReport, abortSignal?: AbortSignal): Promise; + public send( + report: BacktraceReport, + abortSignal?: AbortSignal, + ): Promise>; // This function CANNOT be an async function due to possible async state machine stack frame inclusion, which breaks the skip stacks public send( data: BacktraceReport | Error | string, reportAttributesOrAbortSignal?: Record | AbortSignal, reportAttachments: BacktraceAttachment[] = [], abortSignal?: AbortSignal, - ): Promise { + ): Promise> { if (!this._enabled) { - return Promise.resolve(); + return Promise.resolve(BacktraceReportSubmissionResult.SdkDisabled()); } if (this._rateLimitWatcher.skipReport()) { - return Promise.resolve(); + return Promise.resolve(BacktraceReportSubmissionResult.OnLimitReached('Client')); } // If data is BacktraceReport, we know that the second argument should be only AbortSignal @@ -308,12 +313,12 @@ export abstract class BacktraceCoreClient { this.reportEvents.emit('after-send', report, backtraceData, submissionAttachments, submissionResult); + return submissionResult; }); } @@ -337,6 +343,8 @@ export abstract class BacktraceCoreClient(module: T): void; @@ -396,4 +404,8 @@ export abstract class BacktraceCoreClient { this._result = statusOrResponse; } - public static OnLimitReached(): BacktraceReportSubmissionResult { - return new BacktraceReportSubmissionResult('Limit reached', 'Client report limit reached'); + public static OnLimitReached(target: 'Server' | 'Client' = 'Server'): BacktraceReportSubmissionResult { + return new BacktraceReportSubmissionResult('Limit reached', `${target} report limit reached`); + } + + public static SdkDisabled(): BacktraceReportSubmissionResult { + return new BacktraceReportSubmissionResult('Disabled SDK'); + } + + public static ReportSkipped(): BacktraceReportSubmissionResult { + return new BacktraceReportSubmissionResult('Report skipped'); } public static OnInternalServerError(message: string): BacktraceReportSubmissionResult { diff --git a/packages/sdk-core/src/model/http/model/BacktraceSubmissionStatus.ts b/packages/sdk-core/src/model/data/BacktraceSubmissionStatus.ts similarity index 55% rename from packages/sdk-core/src/model/http/model/BacktraceSubmissionStatus.ts rename to packages/sdk-core/src/model/data/BacktraceSubmissionStatus.ts index b3a37bab..b92b049b 100644 --- a/packages/sdk-core/src/model/http/model/BacktraceSubmissionStatus.ts +++ b/packages/sdk-core/src/model/data/BacktraceSubmissionStatus.ts @@ -8,11 +8,11 @@ export type BacktraceSubmissionStatus = */ | 'Ok' /** - * Set on networking error (for example: connection reset ) + * Set on networking error (for example: connection reset) */ | 'Network Error' /** - * Set on internal server error. + * Set on internal server error */ | 'Server Error' /** @@ -22,4 +22,12 @@ export type BacktraceSubmissionStatus = /** * Unknown error */ - | 'Unknown'; + | 'Unknown' + /** + * SDK is disabled + */ + | 'Disabled SDK' + /** + * Due to before skip event or skipReport callback the user decided to skip the report + */ + | 'Report skipped'; diff --git a/packages/sdk-core/src/model/data/index.ts b/packages/sdk-core/src/model/data/index.ts index 850c5703..40fd4368 100644 --- a/packages/sdk-core/src/model/data/index.ts +++ b/packages/sdk-core/src/model/data/index.ts @@ -1,3 +1,5 @@ export * from './BacktraceData'; export * from './BacktraceStackTrace'; +export * from './BacktraceSubmissionResult'; +export * from './BacktraceSubmissionStatus'; export * from './JavaScriptEngine'; diff --git a/packages/sdk-core/src/model/http/BacktraceReportSubmission.ts b/packages/sdk-core/src/model/http/BacktraceReportSubmission.ts index 8389b35e..76ac02cb 100644 --- a/packages/sdk-core/src/model/http/BacktraceReportSubmission.ts +++ b/packages/sdk-core/src/model/http/BacktraceReportSubmission.ts @@ -2,10 +2,10 @@ import { jsonEscaper } from '../../common/jsonEscaper'; import { BacktraceAttachment } from '../attachment'; import { BacktraceConfiguration } from '../configuration/BacktraceConfiguration'; import { BacktraceData } from '../data/BacktraceData'; +import { BacktraceReportSubmissionResult } from '../data/BacktraceSubmissionResult'; import { BacktraceRequestHandler } from './BacktraceRequestHandler'; -import { SubmissionUrlInformation } from './SubmissionUrlInformation'; import { BacktraceSubmissionResponse } from './model/BacktraceSubmissionResponse'; -import { BacktraceReportSubmissionResult } from './model/BacktraceSubmissionResult'; +import { SubmissionUrlInformation } from './SubmissionUrlInformation'; export interface BacktraceReportSubmission { send( diff --git a/packages/sdk-core/src/model/http/BacktraceRequestHandler.ts b/packages/sdk-core/src/model/http/BacktraceRequestHandler.ts index 34e8c4ba..17b90f16 100644 --- a/packages/sdk-core/src/model/http/BacktraceRequestHandler.ts +++ b/packages/sdk-core/src/model/http/BacktraceRequestHandler.ts @@ -1,6 +1,6 @@ import { BacktraceAttachment } from '../attachment'; +import { BacktraceReportSubmissionResult } from '../data/BacktraceSubmissionResult'; import { BacktraceSubmissionResponse } from './model/BacktraceSubmissionResponse'; -import { BacktraceReportSubmissionResult } from './model/BacktraceSubmissionResult'; export const DEFAULT_TIMEOUT = 15_000; export interface BacktraceRequestHandler { /** diff --git a/packages/sdk-core/src/model/http/index.ts b/packages/sdk-core/src/model/http/index.ts index 6042d882..5dad44f5 100644 --- a/packages/sdk-core/src/model/http/index.ts +++ b/packages/sdk-core/src/model/http/index.ts @@ -1,7 +1,6 @@ +export * from '../data/BacktraceSubmissionResult'; export * from './BacktraceReportSubmission'; export * from './BacktraceRequestHandler'; -export * from './SubmissionUrlInformation'; export * from './common/ConnectionError'; export * from './model/BacktraceSubmissionResponse'; -export * from './model/BacktraceSubmissionResult'; -export * from './model/BacktraceSubmissionStatus'; +export * from './SubmissionUrlInformation'; diff --git a/packages/sdk-core/src/modules/converter/V8StackTraceConverter.ts b/packages/sdk-core/src/modules/converter/V8StackTraceConverter.ts index 8b30ee01..4d39b6d9 100644 --- a/packages/sdk-core/src/modules/converter/V8StackTraceConverter.ts +++ b/packages/sdk-core/src/modules/converter/V8StackTraceConverter.ts @@ -43,20 +43,44 @@ export class V8StackTraceConverter implements BacktraceStackTraceConverter { } stackFrame = stackFrame.substring(stackFrame.indexOf(frameSeparator) + frameSeparator.length); + const asyncKeyword = 'async '; const sourceCodeSeparator = ' ('; - const sourceCodeStartIndex = stackFrame.indexOf(sourceCodeSeparator); + let sourceCodeStartIndex = stackFrame.indexOf(sourceCodeSeparator); const anonymousFunction = sourceCodeStartIndex === -1; if (anonymousFunction) { + if (stackFrame.startsWith(asyncKeyword)) { + stackFrame = stackFrame.substring(asyncKeyword.length); + } return { funcName: ANONYMOUS_FUNCTION, ...this.parseSourceCodeInformation(stackFrame), }; } + + let sourceCodeInformation = stackFrame.substring( + sourceCodeStartIndex + sourceCodeSeparator.length - 1, + stackFrame.length, + ); + const anonymousGenericSymbol = '()'; + if (sourceCodeInformation.startsWith(anonymousGenericSymbol)) { + sourceCodeStartIndex += anonymousGenericSymbol.length + 1; + sourceCodeInformation = sourceCodeInformation.substring(anonymousGenericSymbol.length); + } + + if (sourceCodeInformation.startsWith(` ${frameSeparator}`)) { + sourceCodeInformation = sourceCodeInformation.substring(frameSeparator.length + 1); + } else { + sourceCodeInformation = sourceCodeInformation.substring(1, sourceCodeInformation.length - 1); + } + + let functionName = stackFrame.substring(0, sourceCodeStartIndex); + if (functionName.startsWith(asyncKeyword)) { + functionName = functionName.substring(asyncKeyword.length); + } + return { - funcName: stackFrame.substring(0, sourceCodeStartIndex), - ...this.parseSourceCodeInformation( - stackFrame.substring(sourceCodeStartIndex + sourceCodeSeparator.length, stackFrame.length - 1), - ), + funcName: functionName, + ...this.parseSourceCodeInformation(sourceCodeInformation), }; } diff --git a/packages/sdk-core/tests/converters/v8stackTraceTestCases.ts b/packages/sdk-core/tests/converters/v8stackTraceTestCases.ts index 17c1fedb..e7521279 100644 --- a/packages/sdk-core/tests/converters/v8stackTraceTestCases.ts +++ b/packages/sdk-core/tests/converters/v8stackTraceTestCases.ts @@ -5,6 +5,122 @@ export const v8StackTraceTests: Array<{ test: { message: string; stackTrace: string }; expectation: BacktraceStackFrame[]; }> = [ + { + name: 'async function', + test: { + message: 'TypeError: invalid function invocation', + stackTrace: + 'TypeError: invalid function invocation \n' + + 'at getLsTree2 (/path/to/code/dist/src/lib/file_routines.js:232:42)\n' + + 'at new Promise ()\n' + + 'at getFilePath (/path/to/code/dist/src/lib/file_routines.js:480:24)\n' + + 'at getFileDirectory (/path/to/code/dist/src/lib/file_routines.js:621:40)\n' + + 'at async getFile (/path/to/code/dist/src/lib/file_routines.js:837:22)\n' + + 'at async /path/to/code/dist/src/controller/controller-name.js:70:30', + }, + expectation: [ + { + funcName: 'getLsTree2', + library: '/path/to/code/dist/src/lib/file_routines.js', + line: 232, + column: 42, + }, + { + funcName: 'new Promise ()', + library: '', + }, + { + funcName: 'getFilePath', + library: '/path/to/code/dist/src/lib/file_routines.js', + line: 480, + column: 24, + }, + { + funcName: 'getFileDirectory', + library: '/path/to/code/dist/src/lib/file_routines.js', + line: 621, + column: 40, + }, + { + funcName: 'getFile', + library: '/path/to/code/dist/src/lib/file_routines.js', + line: 837, + column: 22, + }, + { + funcName: 'anonymous', + library: '/path/to/code/dist/src/controller/controller-name.js', + line: 70, + column: 30, + }, + ], + }, + { + name: 'generic anonymous', + test: { + message: `Cannot read properties of undefined (reading 'split')`, + stackTrace: + "TypeError: Cannot read properties of undefined (reading 'split')\n" + + 'at DifferentClass.convert (/path/to/module/lib/modules/converter/DifferentClass.js:12:37)\n' + + 'at DataBuilder.create (/path/to/module/lib/modules/data/DataBuilder.js:45:57)\n' + + 'at DataBuilder.build (/path/to/module/lib/modules/data/DataBuilder.js:16:59)\n' + + 'at Client.create (/path/to/module/lib/Client.js:176:49)\n' + + 'at Client. (/path/to/module/lib/Client.js:130:40)\n' + + 'at Generator.next () at /path/to/module/lib/Client.js:8:71\n' + + 'at new Promise () at /path/to/module/lib/Client.js:4:12\n' + + 'at Client.generate (/path/to/module/lib/Client.js:114:16)', + }, + expectation: [ + { + funcName: 'DifferentClass.convert', + library: '/path/to/module/lib/modules/converter/DifferentClass.js', + line: 12, + column: 37, + }, + { + funcName: 'DataBuilder.create', + library: '/path/to/module/lib/modules/data/DataBuilder.js', + line: 45, + column: 57, + }, + { + funcName: 'DataBuilder.build', + library: '/path/to/module/lib/modules/data/DataBuilder.js', + line: 16, + column: 59, + }, + { + funcName: 'Client.create', + library: '/path/to/module/lib/Client.js', + line: 176, + column: 49, + }, + { + funcName: 'Client.', + library: '/path/to/module/lib/Client.js', + line: 130, + column: 40, + }, + { + funcName: 'Generator.next ()', + library: '/path/to/module/lib/Client.js', + line: 8, + column: 71, + }, + { + funcName: 'new Promise ()', + library: '/path/to/module/lib/Client.js', + line: 4, + column: 12, + }, + { + funcName: 'Client.generate', + library: '/path/to/module/lib/Client.js', + line: 114, + column: 16, + }, + ], + }, { name: 'old source code syntax', test: { diff --git a/tools/cli/src/sourcemaps/upload.ts b/tools/cli/src/sourcemaps/upload.ts index 52b8858a..efc2b8ac 100644 --- a/tools/cli/src/sourcemaps/upload.ts +++ b/tools/cli/src/sourcemaps/upload.ts @@ -332,8 +332,8 @@ export function uploadAssets(uploadUrl: string, options: SymbolUploaderOptions) assets: AssetWithContent[], ): ResultPromise { const { request, promise } = uploader.createUploadRequest(); - - return pipe(request, pipeAssets(assets), () => promise); + pipeAssets(assets)(request); + return promise; }; }