Skip to content

Commit dab8e4f

Browse files
committed
Added LogLevel type for better auto completion
1 parent daa1b06 commit dab8e4f

File tree

6 files changed

+49
-47
lines changed

6 files changed

+49
-47
lines changed

packages/core/src/ExceptionlessClient.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Configuration } from "./configuration/Configuration.js";
22
import { SettingsManager } from "./configuration/SettingsManager.js";
33
import { EventBuilder } from "./EventBuilder.js";
4-
import { Event, KnownEventDataKeys } from "./models/Event.js";
4+
import { Event, KnownEventDataKeys, LogLevel } from "./models/Event.js";
55
import { UserDescription } from "./models/data/UserDescription.js";
66
import { EventContext } from "./models/EventContext.js";
77
import { EventPluginContext } from "./plugins/EventPluginContext.js";
@@ -133,8 +133,8 @@ export class ExceptionlessClient {
133133

134134
public createLog(message: string): EventBuilder;
135135
public createLog(source: string, message: string): EventBuilder;
136-
public createLog(source: string | undefined, message: string, level: string): EventBuilder;
137-
public createLog(sourceOrMessage: string, message?: string, level?: string): EventBuilder {
136+
public createLog(source: string | undefined, message: string, level: LogLevel): EventBuilder;
137+
public createLog(sourceOrMessage: string, message?: string, level?: LogLevel): EventBuilder {
138138
let builder = this.createEvent().setType("log");
139139

140140
if (level) {
@@ -161,9 +161,9 @@ export class ExceptionlessClient {
161161

162162
public submitLog(message: string): Promise<EventPluginContext>;
163163
public submitLog(source: string, message: string): Promise<EventPluginContext>;
164-
public submitLog(source: string | undefined, message: string, level: string): Promise<EventPluginContext>;
165-
public submitLog(sourceOrMessage: string, message?: string, level?: string): Promise<EventPluginContext> {
166-
return this.createLog(sourceOrMessage, <string>message, <string>level).submit();
164+
public submitLog(source: string | undefined, message: string, level: LogLevel): Promise<EventPluginContext>;
165+
public submitLog(sourceOrMessage: string, message?: string, level?: LogLevel): Promise<EventPluginContext> {
166+
return this.createLog(sourceOrMessage, <string>message, <LogLevel>level).submit();
167167
}
168168

169169
public createNotFound(resource: string): EventBuilder {

packages/core/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export type { ILog } from "./logging/ILog.js";
88
export { ConsoleLog } from "./logging/ConsoleLog.js";
99
export { NullLog } from "./logging/NullLog.js";
1010

11-
export type { Event, EventType, IEventData } from "./models/Event.js";
11+
export type { Event, EventType, IEventData, LogLevel } from "./models/Event.js";
1212
export { KnownEventDataKeys } from "./models/Event.js";
1313
export type { EnvironmentInfo } from "./models/data/EnvironmentInfo.js";
1414
export type { ManualStackingInfo } from "./models/data/ManualStackingInfo.js";

packages/core/src/models/Event.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export enum KnownEventDataKeys {
4444
ManualStackingInfo = "@stack",
4545
}
4646

47+
export type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal" | string;
48+
4749
export interface IEventData extends Record<string, unknown> {
4850
"@error"?: ErrorInfo;
4951
"@simple_error"?: SimpleError;
@@ -52,7 +54,7 @@ export interface IEventData extends Record<string, unknown> {
5254
"@user"?: UserInfo;
5355
"@user_description"?: UserDescription;
5456
"@version"?: string;
55-
"@level"?: string;
57+
"@level"?: LogLevel;
5658
"@submission_method"?: string;
5759
"@stack"?: ManualStackingInfo;
5860
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { KnownEventDataKeys } from "../../models/Event.js";
1+
import { KnownEventDataKeys, LogLevel } from "../../models/Event.js";
22
import { isMatch, startsWith, toBoolean } from "../../Utils.js";
33
import { EventPluginContext } from "../EventPluginContext.js";
44
import { IEventPlugin } from "../IEventPlugin.js";
@@ -38,7 +38,7 @@ export class EventExclusionPlugin implements IEventPlugin {
3838
return Promise.resolve();
3939
}
4040

41-
public getLogLevel(level: string | undefined): number {
41+
public getLogLevel(level: LogLevel | undefined): number {
4242
switch ((level || "").toLowerCase().trim()) {
4343
case "trace":
4444
case "true":

packages/core/test/ExceptionlessClient.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ describe("ExceptionlessClient", () => {
4242
const client = new ExceptionlessClient();
4343
client.config.apiKey = "UNIT_TEST_API_KEY";
4444

45-
const builder = client.createLog(undefined, "Unit Test message", "Trace");
45+
const builder = client.createLog(undefined, "Unit Test message", "trace");
4646

4747
expect(builder.target.source).toBeUndefined();
4848
expect(builder.target.message).toBe("Unit Test message");
49-
expect(builder.target.data?.[KnownEventDataKeys.Level]).toBe("Trace");
49+
expect(builder.target.data?.[KnownEventDataKeys.Level]).toBe("trace");
5050
});
5151

5252
test("should accept source and message", () => {
@@ -63,11 +63,11 @@ describe("ExceptionlessClient", () => {
6363
test("should accept source and message and level", () => {
6464
const client = new ExceptionlessClient();
6565
client.config.apiKey = "UNIT_TEST_API_KEY";
66-
const builder = client.createLog("source", "Unit Test message", "Info");
66+
const builder = client.createLog("source", "Unit Test message", "info");
6767

6868
expect(builder.target.source).toBe("source");
6969
expect(builder.target.message).toBe("Unit Test message");
70-
expect(builder.target.data?.[KnownEventDataKeys.Level]).toBe("Info");
70+
expect(builder.target.data?.[KnownEventDataKeys.Level]).toBe("info");
7171
});
7272

7373
test("should allow construction via a configuration object", () => {

packages/core/test/plugins/default/EventExclusionPlugin.test.ts

+33-33
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ import { describe, test } from "@jest/globals";
22
import { expect } from "expect";
33

44
import { ExceptionlessClient } from "../../../src/ExceptionlessClient.js";
5-
import { Event, EventType, KnownEventDataKeys } from "../../../src/models/Event.js";
5+
import { Event, EventType, KnownEventDataKeys, LogLevel } from "../../../src/models/Event.js";
66
import { InnerErrorInfo } from "../../../src/models/data/ErrorInfo.js";
77
import { EventExclusionPlugin } from "../../../src/plugins/default/EventExclusionPlugin.js";
88
import { EventPluginContext } from "../../../src/plugins/EventPluginContext.js";
99
import { EventContext } from "../../../src/models/EventContext.js";
1010

1111
describe("EventExclusionPlugin", () => {
1212
describe("should exclude log levels", () => {
13-
const run = async (source: string | undefined, level: string | null | undefined, settingKey: string | null | undefined, settingValue: string | null | undefined): Promise<boolean> => {
13+
const run = async (source: string | undefined, level: LogLevel | null | undefined, settingKey: string | null | undefined, settingValue: string | null | undefined): Promise<boolean> => {
1414
const client = new ExceptionlessClient();
1515
if (typeof settingKey == "string") {
1616
client.config.settings[settingKey] = settingValue as string;
@@ -30,31 +30,31 @@ describe("EventExclusionPlugin", () => {
3030

3131
test("<null>", async () => expect(await run(undefined, null, null, null)).toBe(false));
3232
test("Test", async () => expect(await run("Test", null, null, null)).toBe(false));
33-
test("[Trace] Test", async () => expect(await run("Test", "Trace", null, null)).toBe(false));
33+
test("[trace] Test", async () => expect(await run("Test", "trace", null, null)).toBe(false));
3434
test("[Off] Test", async () => expect(await run("Test", "Off", null, null)).toBe(true));
3535
test("[Abc] Test", async () => expect(await run("Test", "Abc", null, null)).toBe(false));
36-
test("[Trace] <null> (source min level: Off", async () => expect(await run(undefined, "Trace", "@@log:", "Off")).toBe(true));
37-
test("[Trace] <null> (global min level: Off", async () => expect(await run(undefined, "Trace", "@@log:*", "Off")).toBe(true));
38-
test("[Trace] <undefined> (source min level: Off", async () => expect(await run(undefined, "Trace", "@@log:", "Off")).toBe(true));
39-
test("[Trace] <undefined> (global min level: Off", async () => expect(await run(undefined, "Trace", "@@log:*", "Off")).toBe(true));
40-
test("[Trace] <empty> (source min level: Off", async () => expect(await run("", "Trace", "@@log:", "Off")).toBe(true)); // Becomes Global Log Level
41-
test("[Trace] <empty> (global min level: Off", async () => expect(await run("", "Trace", "@@log:*", "Off")).toBe(true));
42-
test("[Trace] Test (source min level: false)", async () => expect(await run("Test", "Trace", "@@log:Test", "false")).toBe(true));
43-
test("[Trace] Test (source min level: no)", async () => expect(await run("Test", "Trace", "@@log:Test", "no")).toBe(true));
44-
test("[Trace] Test (source min level: 0)", async () => expect(await run("Test", "Trace", "@@log:Test", "0")).toBe(true));
45-
test("[Trace] Test (source min level: true)", async () => expect(await run("Test", "Trace", "@@log:Test", "true")).toBe(false));
46-
test("[Trace] Test (source min level: yes)", async () => expect(await run("Test", "Trace", "@@log:Test", "yes")).toBe(false));
47-
test("[Trace] Test (source min level: 1)", async () => expect(await run("Test", "Trace", "@@log:Test", "1")).toBe(false));
48-
test("[Trace] Test (source min level: Debug)", async () => expect(await run("Test", "Trace", "@@log:Test", "Debug")).toBe(true));
49-
test("[Info] Test (source min level: Debug)", async () => expect(await run("Test", "Info", "@@log:Test", "Debug")).toBe(false));
50-
test("[Trace] Test (global min level: Debug)", async () => expect(await run("Test", "Trace", "@@log:*", "Debug")).toBe(true));
51-
test("[Warn] Test (global min level: Debug)", async () => expect(await run("Test", "Warn", "@@log:*", "Debug")).toBe(false));
36+
test("[trace] <null> (source min level: Off", async () => expect(await run(undefined, "trace", "@@log:", "Off")).toBe(true));
37+
test("[trace] <null> (global min level: Off", async () => expect(await run(undefined, "trace", "@@log:*", "Off")).toBe(true));
38+
test("[trace] <undefined> (source min level: Off", async () => expect(await run(undefined, "trace", "@@log:", "Off")).toBe(true));
39+
test("[trace] <undefined> (global min level: Off", async () => expect(await run(undefined, "trace", "@@log:*", "Off")).toBe(true));
40+
test("[trace] <empty> (source min level: Off", async () => expect(await run("", "trace", "@@log:", "Off")).toBe(true)); // Becomes Global Log Level
41+
test("[trace] <empty> (global min level: Off", async () => expect(await run("", "trace", "@@log:*", "Off")).toBe(true));
42+
test("[trace] Test (source min level: false)", async () => expect(await run("Test", "trace", "@@log:Test", "false")).toBe(true));
43+
test("[trace] Test (source min level: no)", async () => expect(await run("Test", "trace", "@@log:Test", "no")).toBe(true));
44+
test("[trace] Test (source min level: 0)", async () => expect(await run("Test", "trace", "@@log:Test", "0")).toBe(true));
45+
test("[trace] Test (source min level: true)", async () => expect(await run("Test", "trace", "@@log:Test", "true")).toBe(false));
46+
test("[trace] Test (source min level: yes)", async () => expect(await run("Test", "trace", "@@log:Test", "yes")).toBe(false));
47+
test("[trace] Test (source min level: 1)", async () => expect(await run("Test", "trace", "@@log:Test", "1")).toBe(false));
48+
test("[trace] Test (source min level: debug)", async () => expect(await run("Test", "trace", "@@log:Test", "debug")).toBe(true));
49+
test("[info] Test (source min level: debug)", async () => expect(await run("Test", "info", "@@log:Test", "debug")).toBe(false));
50+
test("[trace] Test (global min level: debug)", async () => expect(await run("Test", "trace", "@@log:*", "debug")).toBe(true));
51+
test("[warn] Test (global min level: debug)", async () => expect(await run("Test", "warn", "@@log:*", "debug")).toBe(false));
5252
});
5353

5454
describe("should exclude log levels with info default", () => {
55-
const run = async (source: string | undefined, level: string | null | undefined, settingKey: string | null | undefined, settingValue: string | null | undefined): Promise<boolean> => {
55+
const run = async (source: string | undefined, level: LogLevel | null | undefined, settingKey: string | null | undefined, settingValue: string | null | undefined): Promise<boolean> => {
5656
const client = new ExceptionlessClient();
57-
client.config.settings["@@log:*"] = "Info";
57+
client.config.settings["@@log:*"] = "info";
5858
if (typeof settingKey === "string") {
5959
client.config.settings[settingKey] = settingValue as string;
6060
}
@@ -73,15 +73,15 @@ describe("EventExclusionPlugin", () => {
7373

7474
test("<null>", async () => expect(await run(undefined, null, null, null)).toBe(false));
7575
test("Test", async () => expect(await run("Test", null, null, null)).toBe(false));
76-
test("[Trace] Test", async () => expect(await run("Test", "Trace", null, null)).toBe(true));
77-
test("[Warn] Test", async () => expect(await run("Test", "Warn", null, null)).toBe(false));
78-
test("[Error] Test (source min level: Debug)", async () => expect(await run("Test", "Error", "@@log:Test", "Debug")).toBe(false));
79-
test("[Debug] Test (source min level: Debug)", async () => expect(await run("Test", "Debug", "@@log:Test", "Debug")).toBe(false));
76+
test("[trace] Test", async () => expect(await run("Test", "trace", null, null)).toBe(true));
77+
test("[warn] Test", async () => expect(await run("Test", "warn", null, null)).toBe(false));
78+
test("[error] Test (source min level: debug)", async () => expect(await run("Test", "error", "@@log:Test", "debug")).toBe(false));
79+
test("[debug] Test (source min level: debug)", async () => expect(await run("Test", "debug", "@@log:Test", "debug")).toBe(false));
8080
});
8181

8282
describe("should resolve null and undefined log source levels in reverse settings order", () => {
8383
const plugin = new EventExclusionPlugin();
84-
const settings: Record<string, string> = { "@@log:": "Info", "@@log:*": "Debug" };
84+
const settings: Record<string, string> = { "@@log:": "info", "@@log:*": "debug" };
8585

8686
test("<undefined> (global min level: info)", () => expect(plugin.getMinLogLevel(settings, undefined)).toBe(2));
8787
test("<empty> (source min level: info)", () => expect(plugin.getMinLogLevel(settings, "")).toBe(2));
@@ -90,7 +90,7 @@ describe("EventExclusionPlugin", () => {
9090

9191
describe("should resolve log source levels and respect settings order", () => {
9292
const plugin = new EventExclusionPlugin();
93-
const settings = { "@@log:*": "Debug", "@@log:": "Info" };
93+
const settings = { "@@log:*": "debug", "@@log:": "info" };
9494

9595
test("<empty> (source min level: info)", () => expect(plugin.getMinLogLevel(settings, "")).toBe(2));
9696
test("* (global min level: debug)", () => expect(plugin.getMinLogLevel(settings, "*")).toBe(1));
@@ -112,11 +112,11 @@ describe("EventExclusionPlugin", () => {
112112
const plugin = new EventExclusionPlugin();
113113
const settings = {
114114
"@@log:*": "Fatal",
115-
"@@log:": "Debug",
115+
"@@log:": "debug",
116116
"@@log:abc*": "Off",
117-
"@@log:abc.de*": "Debug",
118-
"@@log:abc.def*": "Info",
119-
"@@log:abc.def.ghi": "Trace"
117+
"@@log:abc.de*": "debug",
118+
"@@log:abc.def*": "info",
119+
"@@log:abc.def.ghi": "trace"
120120
};
121121

122122
test("<undefined> (source min level: debug)", () => expect(plugin.getMinLogLevel(settings, undefined)).toBe(1));
@@ -131,8 +131,8 @@ describe("EventExclusionPlugin", () => {
131131
describe("should respect min log levels settings order", () => {
132132
const plugin = new EventExclusionPlugin();
133133
const settings = {
134-
"@@log:abc.def.ghi": "Trace",
135-
"@@log:abc.def*": "Info",
134+
"@@log:abc.def.ghi": "trace",
135+
"@@log:abc.def*": "info",
136136
"@@log:abc*": "Off"
137137
};
138138

0 commit comments

Comments
 (0)