Skip to content

Commit 674dd60

Browse files
committed
Fix tests. Refactor event context.
1 parent 0b6c4d7 commit 674dd60

16 files changed

+138
-136
lines changed

packages/core/src/EventBuilder.ts

Lines changed: 13 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,23 @@
11
import { ExceptionlessClient } from "./ExceptionlessClient.js";
2-
import {
3-
Event,
4-
KnownEventDataKeys
5-
} from "./models/Event.js";
2+
import { Event, KnownEventDataKeys } from "./models/Event.js";
63
import { ManualStackingInfo } from "./models/data/ManualStackingInfo.js";
74
import { RequestInfo } from "./models/data/RequestInfo.js";
85
import { UserInfo } from "./models/data/UserInfo.js";
9-
import { ContextData } from "./plugins/ContextData.js";
6+
import { EventContext } from "./models/EventContext.js";
7+
import { isEmpty, stringify } from "./Utils.js";
108
import { EventPluginContext } from "./plugins/EventPluginContext.js";
11-
import {
12-
isEmpty,
13-
stringify
14-
} from "./Utils.js";
159

1610
export class EventBuilder {
1711
public target: Event;
1812
public client: ExceptionlessClient;
19-
public pluginContextData: ContextData;
13+
public context: EventContext;
2014

2115
private _validIdentifierErrorMessage = "must contain between 8 and 100 alphanumeric or '-' characters.";
2216

23-
constructor(
24-
event: Event,
25-
client: ExceptionlessClient,
26-
pluginContextData?: ContextData,
27-
) {
17+
constructor(event: Event, client: ExceptionlessClient, context?: EventContext) {
2818
this.target = event;
2919
this.client = client;
30-
this.pluginContextData = pluginContextData || new ContextData();
20+
this.context = context || new EventContext();
3121
}
3222

3323
public setType(type: string): EventBuilder {
@@ -59,7 +49,6 @@ export class EventBuilder {
5949
* Allows you to reference a parent event by its ReferenceId property. This allows you to have parent and child relationships.
6050
* @param name Reference name
6151
* @param id The reference id that points to a specific event
62-
* @returns {EventBuilder}
6352
*/
6453
public setEventReference(name: string, id: string): EventBuilder {
6554
if (!name) {
@@ -100,10 +89,7 @@ export class EventBuilder {
10089
public setUserIdentity(userInfo: UserInfo): EventBuilder;
10190
public setUserIdentity(identity: string): EventBuilder;
10291
public setUserIdentity(identity: string, name: string): EventBuilder;
103-
public setUserIdentity(
104-
userInfoOrIdentity: UserInfo | string,
105-
name?: string,
106-
): EventBuilder {
92+
public setUserIdentity(userInfoOrIdentity: UserInfo | string, name?: string): EventBuilder {
10793
const userInfo = typeof userInfoOrIdentity !== "string"
10894
? userInfoOrIdentity
10995
: { identity: userInfoOrIdentity, name };
@@ -120,12 +106,8 @@ export class EventBuilder {
120106
*
121107
* @param emailAddress The email address
122108
* @param description The user"s description of the event.
123-
* @returns {EventBuilder}
124109
*/
125-
public setUserDescription(
126-
emailAddress: string,
127-
description: string,
128-
): EventBuilder {
110+
public setUserDescription(emailAddress: string, description: string): EventBuilder {
129111
if (emailAddress && description) {
130112
this.setProperty(KnownEventDataKeys.UserDescription, {
131113
email_address: emailAddress,
@@ -141,12 +123,8 @@ export class EventBuilder {
141123
* stacking information.
142124
* @param signatureData A dictionary of strings to use for stacking.
143125
* @param title An optional title for the stacking information.
144-
* @returns {EventBuilder}
145126
*/
146-
public setManualStackingInfo(
147-
signatureData: Record<string, string>,
148-
title?: string,
149-
): EventBuilder {
127+
public setManualStackingInfo(signatureData: Record<string, string>, title?: string): EventBuilder {
150128
if (signatureData) {
151129
const stack: ManualStackingInfo = { signature_data: signatureData };
152130
if (title) {
@@ -163,12 +141,8 @@ export class EventBuilder {
163141
* Changes default stacking behavior by setting the stacking key.
164142
* @param manualStackingKey The manual stacking key.
165143
* @param title An optional title for the stacking information.
166-
* @returns {EventBuilder}
167144
*/
168-
public setManualStackingKey(
169-
manualStackingKey: string,
170-
title?: string,
171-
): EventBuilder {
145+
public setManualStackingKey(manualStackingKey: string, title?: string): EventBuilder {
172146
if (manualStackingKey) {
173147
const data = { ManualStackingKey: manualStackingKey };
174148
this.setManualStackingInfo(data, title);
@@ -180,7 +154,6 @@ export class EventBuilder {
180154
/**
181155
* Sets the event value.
182156
* @param value The value of the event.
183-
* @returns {EventBuilder}
184157
*/
185158
public setValue(value: number): EventBuilder {
186159
if (value) {
@@ -203,12 +176,7 @@ export class EventBuilder {
203176
* @param maxDepth The max depth of the object to include.
204177
* @param excludedPropertyNames Any property names that should be excluded.
205178
*/
206-
public setProperty(
207-
name: string,
208-
value: unknown,
209-
maxDepth?: number,
210-
excludedPropertyNames?: string[],
211-
): EventBuilder {
179+
public setProperty(name: string, value: unknown, maxDepth?: number, excludedPropertyNames?: string[]): EventBuilder {
212180
if (!name || (value === undefined || value == null)) {
213181
return this;
214182
}
@@ -241,14 +209,14 @@ export class EventBuilder {
241209

242210
public addRequestInfo(request: RequestInfo): EventBuilder {
243211
if (request) {
244-
this.pluginContextData[KnownEventDataKeys.RequestInfo] = request;
212+
this.context[KnownEventDataKeys.RequestInfo] = request;
245213
}
246214

247215
return this;
248216
}
249217

250218
public submit(): Promise<EventPluginContext> {
251-
return this.client.submitEvent(this.target, this.pluginContextData);
219+
return this.client.submitEvent(this.target, this.context);
252220
}
253221

254222
private isValidIdentifier(value: string): boolean {

packages/core/src/ExceptionlessClient.ts

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { SettingsManager } from "./configuration/SettingsManager.js";
33
import { EventBuilder } from "./EventBuilder.js";
44
import { Event, KnownEventDataKeys } from "./models/Event.js";
55
import { UserDescription } from "./models/data/UserDescription.js";
6-
import { ContextData } from "./plugins/ContextData.js";
6+
import { EventContext } from "./models/EventContext.js";
77
import { EventPluginContext } from "./plugins/EventPluginContext.js";
88
import { EventPluginManager } from "./plugins/EventPluginManager.js";
99
import { PluginContext } from "./plugins/PluginContext.js";
@@ -86,7 +86,7 @@ export class ExceptionlessClient {
8686
}
8787

8888
public createException(exception: Error): EventBuilder {
89-
const pluginContextData = new ContextData();
89+
const pluginContextData = new EventContext();
9090
pluginContextData.setException(exception);
9191
return this.createEvent(pluginContextData).setType("error");
9292
}
@@ -97,8 +97,8 @@ export class ExceptionlessClient {
9797

9898
public createUnhandledException(exception: Error, submissionMethod?: string): EventBuilder {
9999
const builder = this.createException(exception);
100-
builder.pluginContextData.markAsUnhandledError();
101-
builder.pluginContextData.setSubmissionMethod(submissionMethod || "");
100+
builder.context.markAsUnhandledError();
101+
builder.context.setSubmissionMethod(submissionMethod || "");
102102

103103
return builder;
104104
}
@@ -192,28 +192,28 @@ export class ExceptionlessClient {
192192
}
193193
}
194194

195-
public createEvent(pluginContextData?: ContextData): EventBuilder {
196-
return new EventBuilder({ date: new Date() }, this, pluginContextData);
195+
public createEvent(context?: EventContext): EventBuilder {
196+
return new EventBuilder({ date: new Date() }, this, context);
197197
}
198198

199199
/**
200-
* Submits the event to be sent to the server.
200+
* Submits the event to the server.
201201
*
202-
* @param event The event data.
203-
* @param pluginContextData Any contextual data objects to be used by Exceptionless plugins to gather default information for inclusion in the report information.
204-
* @param callback
202+
* @param event The event
203+
* @param context Contextual data used by event plugins to enrich the event details
205204
*/
206-
public async submitEvent(event: Event, pluginContextData?: ContextData): Promise<EventPluginContext> {
207-
const context = new EventPluginContext(this, event, pluginContextData);
205+
public async submitEvent(event: Event, context?: EventContext): Promise<EventPluginContext> {
206+
const pluginContext = new EventPluginContext(this, event, context);
207+
208208
if (!event) {
209209
context.cancelled = true;
210-
return context;
210+
return pluginContext;
211211
}
212212

213213
if (!this.config.enabled || !this.config.isValid) {
214214
this.config.services.log.info("Event submission is currently disabled.");
215215
context.cancelled = true;
216-
return context;
216+
return pluginContext;
217217
}
218218

219219
if (!event.data) {
@@ -224,13 +224,12 @@ export class ExceptionlessClient {
224224
event.tags = [];
225225
}
226226

227-
await EventPluginManager.run(context);
227+
await EventPluginManager.run(pluginContext);
228228
if (context.cancelled) {
229-
return context;
229+
return pluginContext;
230230
}
231231

232-
const config = context.client.config;
233-
const ev = context.event;
232+
const ev = pluginContext.event;
234233

235234
// ensure all required data
236235
if (!ev.type || ev.type.length === 0) {
@@ -241,14 +240,14 @@ export class ExceptionlessClient {
241240
ev.date = new Date();
242241
}
243242

244-
await config.services.queue.enqueue(ev);
243+
await this.config.services.queue.enqueue(ev);
245244

246245
if (ev.reference_id && ev.reference_id.length > 0) {
247-
context.log.info(`Setting last reference id "${ev.reference_id}"`);
248-
config.services.lastReferenceIdManager.setLast(ev.reference_id);
246+
pluginContext.log.info(`Setting last reference id "${ev.reference_id}"`);
247+
this.config.services.lastReferenceIdManager.setLast(ev.reference_id);
249248
}
250249

251-
return context;
250+
return pluginContext;
252251
}
253252

254253
/**

packages/core/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export { EventExclusionPlugin } from "./plugins/default/EventExclusionPlugin.js"
3232
export { HeartbeatPlugin } from "./plugins/default/HeartbeatPlugin.js";
3333
export { ReferenceIdPlugin } from "./plugins/default/ReferenceIdPlugin.js";
3434
export { SubmissionMethodPlugin } from "./plugins/default/SubmissionMethodPlugin.js";
35-
export { ContextData } from "./plugins/ContextData.js";
35+
export { EventContext as ContextData } from "./models/EventContext.js";
3636
export { PluginContext } from "./plugins/PluginContext.js";
3737
export { EventPluginContext } from "./plugins/EventPluginContext.js";
3838
export { EventPluginManager } from "./plugins/EventPluginManager.js";

packages/core/src/plugins/ContextData.ts renamed to packages/core/src/models/EventContext.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ const enum KnownContextKeys {
55
SubmissionMethod = "@@_SubmissionMethod"
66
}
77

8-
// TODO: Look into ways of improving this.
9-
export class ContextData implements Record<string, unknown> {
8+
export class EventContext implements Record<string, unknown> {
109
[x: string]: unknown;
1110

1211
public getException(): Error | null {

packages/core/src/plugins/EventPluginContext.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
import { ExceptionlessClient } from "../ExceptionlessClient.js";
22
import { ILog } from "../logging/ILog.js";
33
import { Event } from "../models/Event.js";
4-
import { ContextData } from "./ContextData.js";
5-
import { PluginContext } from "./PluginContext.js";
4+
import { EventContext } from "../models/EventContext.js";
65

7-
export class EventPluginContext extends PluginContext {
6+
export class EventPluginContext {
87
public cancelled = false;
98

10-
constructor(
11-
client: ExceptionlessClient,
12-
public event: Event,
13-
public contextData: ContextData = new ContextData()
14-
) {
15-
super(client);
9+
constructor(public client: ExceptionlessClient, public event: Event, public eventContext: EventContext = null) {
10+
if (!this.eventContext)
11+
this.eventContext = new EventContext();
1612
}
1713

1814
public get log(): ILog {

packages/core/src/plugins/PluginContext.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { ExceptionlessClient } from "../ExceptionlessClient.js";
22
import { ILog } from "../logging/ILog.js";
33

4-
54
export class PluginContext {
65
constructor(public client: ExceptionlessClient) { }
76

packages/core/src/plugins/default/ErrorPlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class ErrorPlugin implements IEventPlugin {
2727
"stacktrace"
2828
];
2929

30-
const exception = context.contextData.getException();
30+
const exception = context.eventContext.getException();
3131
if (exception) {
3232
context.event.type = "error";
3333

packages/core/src/plugins/default/SubmissionMethodPlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export class SubmissionMethodPlugin implements IEventPlugin {
77
public name = "SubmissionMethodPlugin";
88

99
public run(context: EventPluginContext): Promise<void> {
10-
const submissionMethod = context.contextData.getSubmissionMethod();
10+
const submissionMethod = context.eventContext.getSubmissionMethod();
1111
if (submissionMethod) {
1212
context.event.data[KnownEventDataKeys.SubmissionMethod] = submissionMethod;
1313
}

packages/core/src/storage/LocalStorage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ export class LocalStorage implements IStorage {
44
constructor(private prefix: string = "exceptionless-", private storage: Storage = globalThis.localStorage) { }
55

66
public length(): Promise<number> {
7-
return Promise.resolve(this.getKeys().length);
7+
return Promise.resolve(this.storage.length);
88
}
99

1010
public clear(): Promise<void> {
11+
return Promise.resolve(this.storage.clear());
1112
for (const key of this.getKeys()) {
1213
this.storage.removeItem(this.getKey(key));
1314
}

packages/core/test/plugins/EventPluginManager.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ContextData } from "../../src/plugins/ContextData.js";
1+
import { EventContext } from "../../src/models/EventContext.js";
22
import { ExceptionlessClient } from "../../src/ExceptionlessClient.js";
33
import { EventPluginContext } from "../../src/plugins/EventPluginContext.js";
44
import { EventPluginManager } from "../../src/plugins/EventPluginManager.js";
@@ -9,7 +9,7 @@ describe("EventPluginManager", () => {
99
const client = new ExceptionlessClient();
1010
client.config.apiKey = "UNIT_TEST_API_KEY";
1111

12-
const context = new EventPluginContext(client, {}, new ContextData());
12+
const context = new EventPluginContext(client, {});
1313
expect(context.event.source).toBeUndefined();
1414
expect(context.event.geo).toBeUndefined();
1515

@@ -38,7 +38,7 @@ describe("EventPluginManager", () => {
3838
const client = new ExceptionlessClient();
3939
client.config.apiKey = "UNIT_TEST_API_KEY";
4040

41-
const context = new EventPluginContext(client, {}, new ContextData());
41+
const context = new EventPluginContext(client, {});
4242
expect(client.config.plugins).not.toBeNull();
4343
while (client.config.plugins.length > 0) {
4444
client.config.removePlugin(client.config.plugins[0]);
@@ -60,7 +60,7 @@ describe("EventPluginManager", () => {
6060
test("throwing error should stop plugin execution.", async () => {
6161
const client = new ExceptionlessClient();
6262
client.config.apiKey = "UNIT_TEST_API_KEY";
63-
const context = new EventPluginContext(client, {}, new ContextData());
63+
const context = new EventPluginContext(client, {});
6464

6565
expect(client.config.plugins).not.toBeNull();
6666
while (client.config.plugins.length > 0) {
@@ -82,7 +82,7 @@ describe("EventPluginManager", () => {
8282
test("should cancel via timeout.", async () => {
8383
const client = new ExceptionlessClient();
8484
client.config.apiKey = "UNIT_TEST_API_KEY";
85-
const context = new EventPluginContext(client, {}, new ContextData());
85+
const context = new EventPluginContext(client, {});
8686

8787
expect(client.config.plugins).not.toBeNull();
8888
while (client.config.plugins.length > 0) {
@@ -104,7 +104,7 @@ describe("EventPluginManager", () => {
104104
test("should ensure config plugins are not wrapped.", async () => {
105105
const client = new ExceptionlessClient();
106106
client.config.apiKey = "UNIT_TEST_API_KEY";
107-
const context = new EventPluginContext(client, {}, new ContextData());
107+
const context = new EventPluginContext(client, {});
108108

109109
expect(client.config.plugins).not.toBeNull();
110110
while (client.config.plugins.length > 0) {

0 commit comments

Comments
 (0)