Create tagged template for error messages
This commit is contained in:
37
extensions/ql-vscode/src/common/errors.ts
Normal file
37
extensions/ql-vscode/src/common/errors.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
export class RedactableErrorMessage {
|
||||
constructor(
|
||||
private readonly strings: TemplateStringsArray,
|
||||
private readonly values: unknown[],
|
||||
) {}
|
||||
|
||||
public toString(): string {
|
||||
return this.fullMessage;
|
||||
}
|
||||
|
||||
public get fullMessage(): string {
|
||||
return this.strings
|
||||
.map((s, i) => s + (this.hasValue(i) ? this.getValue(i) : ""))
|
||||
.join("");
|
||||
}
|
||||
|
||||
public get redactedMessage(): string {
|
||||
return this.strings
|
||||
.map((s, i) => s + (this.hasValue(i) ? "[REDACTED]" : ""))
|
||||
.join("");
|
||||
}
|
||||
|
||||
private getValue(index: number): unknown {
|
||||
return this.values[index];
|
||||
}
|
||||
|
||||
private hasValue(index: number): boolean {
|
||||
return index < this.values.length;
|
||||
}
|
||||
}
|
||||
|
||||
export function errorMessage(
|
||||
strings: TemplateStringsArray,
|
||||
...values: unknown[]
|
||||
): RedactableErrorMessage {
|
||||
return new RedactableErrorMessage(strings, values);
|
||||
}
|
||||
30
extensions/ql-vscode/test/unit-tests/common/errors.test.ts
Normal file
30
extensions/ql-vscode/test/unit-tests/common/errors.test.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import {
|
||||
errorMessage,
|
||||
RedactableErrorMessage,
|
||||
} from "../../../src/common/errors";
|
||||
|
||||
describe("errorMessage", () => {
|
||||
it("creates a RedactableErrorMessage", () => {
|
||||
expect(errorMessage`Failed to create database ${"foo"}`).toBeInstanceOf(
|
||||
RedactableErrorMessage,
|
||||
);
|
||||
});
|
||||
|
||||
it("toString() matches the given message", () => {
|
||||
expect(errorMessage`Failed to create database ${"foo"}`.toString()).toEqual(
|
||||
"Failed to create database foo",
|
||||
);
|
||||
});
|
||||
|
||||
it("fullMessage matches the given message", () => {
|
||||
expect(
|
||||
errorMessage`Failed to create database ${"foo"}`.fullMessage,
|
||||
).toEqual("Failed to create database foo");
|
||||
});
|
||||
|
||||
it("redactedMessage redacts the given message", () => {
|
||||
expect(
|
||||
errorMessage`Failed to create database ${"foo"}`.redactedMessage,
|
||||
).toEqual("Failed to create database [REDACTED]");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user