feat: now supports async functions for logging data
ci/woodpecker/push/ci Pipeline failed
ci/woodpecker/push/publish unknown status

- `logger.debug('message', async () => ({ asyncReturn: await asyncFn() }))` is now supported
- NOTE: this may result in logging occurring out of band for these calls if other events fire befor they settle

Update CI labels to direct jobs to correct servers
This commit is contained in:
2026-08-21 11:24:34 -03:00
parent 292f44821d
commit 16550ec8bb
16 changed files with 217 additions and 82 deletions
+37
View File
@@ -40,6 +40,43 @@ describe("createLogger", () => {
expect(expensive).toHaveBeenCalledTimes(1);
expect(destination.events).toHaveLength(1);
expect(destination.events[0]?.arguments).toEqual(["kept", { huge: "snapshot" }]);
expect(destination.events[0]?.async).toBeUndefined();
});
it("never starts suppressed async lazy factories", () => {
const destination = sink();
const expensive = vi.fn(async () => ({ huge: "snapshot" }));
const logger = createLogger({ environment: "production", sinks: [destination.sink] });
logger.debug("ignored", expensive);
expect(expensive).not.toHaveBeenCalled();
expect(destination.events).toHaveLength(0);
});
it("settles async lazy factories before emitting and sets async", async () => {
const destination = sink();
const factory = vi.fn(async () => ({ data: 1 }));
const logger = createLogger({ environment: "development", sinks: [destination.sink] });
logger.debug("response", factory);
expect(factory).toHaveBeenCalledTimes(1);
expect(destination.events).toHaveLength(0);
await vi.waitFor(() => expect(destination.events).toHaveLength(1));
expect(destination.events[0]).toMatchObject({
arguments: ["response", { data: 1 }],
async: true,
});
});
it("unwraps direct Promise arguments and keeps rejection reasons", async () => {
const destination = sink();
const reason = new Error("boom");
const logger = createLogger({ environment: "development", sinks: [destination.sink] });
logger.error("failed", { id: 1 }, Promise.reject(reason));
expect(destination.events).toHaveLength(0);
await vi.waitFor(() => expect(destination.events).toHaveLength(1));
expect(destination.events[0]).toMatchObject({
arguments: ["failed", { id: 1 }, reason],
async: true,
});
});
it("applies session namespace filtering to namespace descendants", () => {