Skip to content

Commit

Permalink
Format JS
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastiandedeyne committed Sep 19, 2024
1 parent 464d5db commit c3cdb62
Show file tree
Hide file tree
Showing 24 changed files with 100 additions and 220 deletions.
59 changes: 15 additions & 44 deletions packages/js/src/Flare.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { assert, assertKey, assertSolutionProvider, now } from './util';
import { Api } from './api';
import { collectContext } from './context';
import { createStackTrace } from './stacktrace';
import { CLIENT_VERSION, KEY, SOURCEMAP_VERSION } from './env';
import { getSolutions } from './solutions';
import { createStackTrace } from './stacktrace';
import {
Config,
Glow,
Context,
Glow,
MessageLevel,
Report,
SolutionProvider,
SolutionProviderExtraParameters,
MessageLevel,
} from './types';
import { Api } from './api';
import { assert, assertKey, assertSolutionProvider, now } from './util';

export class Flare {
config: Config = {
Expand Down Expand Up @@ -50,11 +50,7 @@ export class Flare {
return this.report(new Error('The Flare client is set up correctly!'));
}

glow(
name: string,
level: MessageLevel = 'info',
data: object | object[] = [],
): Flare {
glow(name: string, level: MessageLevel = 'info', data: object | object[] = []): Flare {
const time = now();

this.glows.push({
Expand All @@ -66,9 +62,7 @@ export class Flare {
});

if (this.glows.length > this.config.maxGlowsPerReport) {
this.glows = this.glows.slice(
this.glows.length - this.config.maxGlowsPerReport,
);
this.glows = this.glows.slice(this.glows.length - this.config.maxGlowsPerReport);
}

return this;
Expand Down Expand Up @@ -105,19 +99,15 @@ export class Flare {
async report(
error: Error,
context: Context = {},
extraSolutionParameters: SolutionProviderExtraParameters = {},
extraSolutionParameters: SolutionProviderExtraParameters = {}
): Promise<void> {
const errorToReport = await this.config.beforeEvaluate(error);

if (!errorToReport) {
return;
}

const report = await this.createReportFromError(
error,
context,
extraSolutionParameters,
);
const report = await this.createReportFromError(error, context, extraSolutionParameters);

if (!report) {
return;
Expand All @@ -126,11 +116,7 @@ export class Flare {
return this.sendReport(report);
}

async reportMessage(
message: string,
context: Context = {},
exceptionClass: string = 'Log',
): Promise<void> {
async reportMessage(message: string, context: Context = {}, exceptionClass: string = 'Log'): Promise<void> {
const stackTrace = await createStackTrace(Error(), this.config.debug);

// The first item in the stacktrace is from this file, and irrelevant
Expand All @@ -154,7 +140,7 @@ export class Flare {
createReportFromError(
error: Error,
context: Context = {},
extraSolutionParameters: SolutionProviderExtraParameters = {},
extraSolutionParameters: SolutionProviderExtraParameters = {}
): Promise<Report | false> {
if (!assert(error, 'No error provided.', this.config.debug)) {
return Promise.resolve(false);
Expand All @@ -163,27 +149,16 @@ export class Flare {
const seenAt = now();

return Promise.all([
getSolutions(
this.solutionProviders,
error,
extraSolutionParameters,
),
getSolutions(this.solutionProviders, error, extraSolutionParameters),
createStackTrace(error, this.config.debug),
]).then((result) => {
const [solutions, stacktrace] = result;

assert(
stacktrace.length,
"Couldn't generate stacktrace of this error: " + error,
this.config.debug,
);
assert(stacktrace.length, "Couldn't generate stacktrace of this error: " + error, this.config.debug);

return {
notifier: `Flare JavaScript client v${CLIENT_VERSION}`,
exception_class:
error.constructor && error.constructor.name
? error.constructor.name
: 'undefined',
exception_class: error.constructor && error.constructor.name ? error.constructor.name : 'undefined',
seen_at: seenAt,
message: error.message,
language: 'javascript',
Expand All @@ -208,11 +183,7 @@ export class Flare {
return;
}

return this.http.report(
reportToSubmit,
this.config.reportingUrl,
this.config.key,
);
return this.http.report(reportToSubmit, this.config.reportingUrl, this.config.key);
}

// Deprecated, the following methods exist for backwards compatibility.
Expand Down
6 changes: 2 additions & 4 deletions packages/js/src/api/Api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,10 @@ export class Api {
}).then(
(response) => {
if (response.status !== 204) {
console.error(
`Received response with status ${response.status} from Flare`,
);
console.error(`Received response with status ${response.status} from Flare`);
}
},
(error) => console.error(error),
(error) => console.error(error)
);
}
}
3 changes: 2 additions & 1 deletion packages/js/src/context/collectContext.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { Context } from '../types';

import cookie from './cookie';
import request from './request';
import requestData from './requestData';
import { Context } from '../types';

export function collectContext(additionalContext: object): Context {
if (typeof window === 'undefined') {
Expand Down
2 changes: 1 addition & 1 deletion packages/js/src/context/cookie.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export default function cookie() {

return cookies;
},
{} as { [key: string]: string },
{} as { [key: string]: string }
),
};
}
9 changes: 2 additions & 7 deletions packages/js/src/env/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,10 @@ declare const FLARE_SOURCEMAP_VERSION: string | undefined;

// Injected during build
export const CLIENT_VERSION =
typeof process.env.FLARE_JS_CLIENT_VERSION === 'undefined'
? '?'
: process.env.FLARE_JS_CLIENT_VERSION;
typeof process.env.FLARE_JS_CLIENT_VERSION === 'undefined' ? '?' : process.env.FLARE_JS_CLIENT_VERSION;

// Injected by flare-vite-plugin-sourcemap-uploader (optional)
export const KEY = typeof FLARE_JS_KEY === 'undefined' ? '' : FLARE_JS_KEY;

// Injected by flare-vite-plugin-sourcemap-uploader (optional)
export const SOURCEMAP_VERSION =
typeof FLARE_SOURCEMAP_VERSION === 'undefined'
? ''
: FLARE_SOURCEMAP_VERSION;
export const SOURCEMAP_VERSION = typeof FLARE_SOURCEMAP_VERSION === 'undefined' ? '' : FLARE_SOURCEMAP_VERSION;
23 changes: 5 additions & 18 deletions packages/js/src/solutions/getSolutions.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,19 @@
import { Solution, SolutionProvider, SolutionProviderExtraParameters } from '../types';
import { flattenOnce } from '../util';
import {
Solution,
SolutionProvider,
SolutionProviderExtraParameters,
} from '../types';

export function getSolutions(
solutionProviders: Array<SolutionProvider>,
error: Error,
extraSolutionParameters: SolutionProviderExtraParameters = {},
extraSolutionParameters: SolutionProviderExtraParameters = {}
): Promise<Array<Solution>> {
return new Promise((resolve) => {
const canSolves = solutionProviders.reduce(
(canSolves, provider) => {
canSolves.push(
Promise.resolve(
provider.canSolve(error, extraSolutionParameters),
),
);
canSolves.push(Promise.resolve(provider.canSolve(error, extraSolutionParameters)));

return canSolves;
},
[] as Array<Promise<boolean>>,
[] as Array<Promise<boolean>>
);

Promise.all(canSolves).then((resolvedCanSolves) => {
Expand All @@ -30,12 +22,7 @@ export function getSolutions(
resolvedCanSolves.forEach((canSolve, i) => {
if (canSolve) {
solutionPromises.push(
Promise.resolve(
solutionProviders[i].getSolutions(
error,
extraSolutionParameters,
),
),
Promise.resolve(solutionProviders[i].getSolutions(error, extraSolutionParameters))
);
}
});
Expand Down
30 changes: 9 additions & 21 deletions packages/js/src/stacktrace/createStackTrace.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
import ErrorStackParser from 'error-stack-parser';
import { getCodeSnippet } from './fileReader';

import { StackFrame } from '../types';
import { assert } from '../util';

export function createStackTrace(
error: Error,
debug: boolean,
): Promise<Array<StackFrame>> {
import { getCodeSnippet } from './fileReader';

export function createStackTrace(error: Error, debug: boolean): Promise<Array<StackFrame>> {
return new Promise((resolve) => {
if (!hasStack(error)) {
assert(
false,
"Couldn't generate stacktrace of below error:",
debug,
);
assert(false, "Couldn't generate stacktrace of below error:", debug);

if (debug) {
console.error(error);
Expand All @@ -37,25 +32,19 @@ export function createStackTrace(
Promise.all(
ErrorStackParser.parse(error).map((frame) => {
return new Promise<StackFrame>((resolve) => {
getCodeSnippet(
frame.fileName,
frame.lineNumber,
frame.columnNumber,
).then((snippet) => {
getCodeSnippet(frame.fileName, frame.lineNumber, frame.columnNumber).then((snippet) => {
resolve({
line_number: frame.lineNumber || 1,
column_number: frame.columnNumber || 1,
method:
frame.functionName ||
'Anonymous or unknown function',
method: frame.functionName || 'Anonymous or unknown function',
file: frame.fileName || 'Unknown file',
code_snippet: snippet.codeSnippet,
trimmed_column_number: snippet.trimmedColumnNumber,
class: '',
});
});
});
}),
})
).then(resolve);
});
}
Expand All @@ -64,8 +53,7 @@ function hasStack(err: any): boolean {
return (
!!err &&
(!!err.stack || !!err.stacktrace || !!err['opera#sourceloc']) &&
typeof (err.stack || err.stacktrace || err['opera#sourceloc']) ===
'string' &&
typeof (err.stack || err.stacktrace || err['opera#sourceloc']) === 'string' &&
err.stack !== `${err.name}: ${err.message}`
);
}
28 changes: 7 additions & 21 deletions packages/js/src/stacktrace/fileReader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ type ReaderResponse = {
trimmedColumnNumber: number | null;
};

export function getCodeSnippet(
url?: string,
lineNumber?: number,
columnNumber?: number,
): Promise<ReaderResponse> {
export function getCodeSnippet(url?: string, lineNumber?: number, columnNumber?: number): Promise<ReaderResponse> {
return new Promise((resolve) => {
if (!url || !lineNumber) {
return resolve({
Expand All @@ -34,9 +30,7 @@ export function getCodeSnippet(
});
}

return resolve(
readLinesFromFile(fileText, lineNumber, columnNumber),
);
return resolve(readLinesFromFile(fileText, lineNumber, columnNumber));
});
});
}
Expand All @@ -62,7 +56,7 @@ export function readLinesFromFile(
lineNumber: number,
columnNumber?: number,
maxSnippetLineLength = 1000,
maxSnippetLines = 40,
maxSnippetLines = 40
): ReaderResponse {
const codeSnippet: CodeSnippet = {};
let trimmedColumnNumber = null;
Expand All @@ -76,28 +70,20 @@ export function readLinesFromFile(
const displayLine = currentLineIndex + 1; // the linenumber in a stacktrace is not zero-based like an array

if (lines[currentLineIndex].length > maxSnippetLineLength) {
if (
columnNumber &&
columnNumber + maxSnippetLineLength / 2 >
maxSnippetLineLength
) {
if (columnNumber && columnNumber + maxSnippetLineLength / 2 > maxSnippetLineLength) {
codeSnippet[displayLine] = lines[currentLineIndex].substr(
columnNumber - Math.round(maxSnippetLineLength / 2),
maxSnippetLineLength,
maxSnippetLineLength
);

if (displayLine === lineNumber) {
trimmedColumnNumber = Math.round(
maxSnippetLineLength / 2,
);
trimmedColumnNumber = Math.round(maxSnippetLineLength / 2);
}

continue;
}

codeSnippet[displayLine] =
lines[currentLineIndex].substr(0, maxSnippetLineLength) +
'…';
codeSnippet[displayLine] = lines[currentLineIndex].substr(0, maxSnippetLineLength) + '…';

continue;
}
Expand Down
18 changes: 4 additions & 14 deletions packages/js/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,8 @@ export type Config = {
maxGlowsPerReport: number;
reportingUrl: string;
debug: boolean;
beforeEvaluate: (
error: Error,
) => Error | false | null | Promise<Error | false | null>;
beforeSubmit: (
report: Report,
) => Report | false | null | Promise<Report | false | null>;
beforeEvaluate: (error: Error) => Error | false | null | Promise<Error | false | null>;
beforeSubmit: (report: Report) => Report | false | null | Promise<Report | false | null>;
};

export type Report = {
Expand All @@ -31,14 +27,8 @@ export type Report = {
export interface SolutionProviderExtraParameters {}

export type SolutionProvider = {
canSolve: (
error: Error,
extraParameters?: SolutionProviderExtraParameters,
) => boolean | Promise<boolean>;
getSolutions: (
error: Error,
extraParameters?: SolutionProviderExtraParameters,
) => Solution[] | Promise<Solution[]>;
canSolve: (error: Error, extraParameters?: SolutionProviderExtraParameters) => boolean | Promise<boolean>;
getSolutions: (error: Error, extraParameters?: SolutionProviderExtraParameters) => Solution[] | Promise<Solution[]>;
};

export type Solution = {
Expand Down
Loading

0 comments on commit c3cdb62

Please sign in to comment.