@herdctl/core 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +3 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/fleet-manager/__tests__/coverage.test.js +8 -0
- package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/discord-manager.test.js +2 -2
- package/dist/fleet-manager/__tests__/discord-manager.test.js.map +1 -1
- package/dist/fleet-manager/__tests__/slack-manager.test.d.ts +2 -2
- package/dist/fleet-manager/__tests__/slack-manager.test.js +125 -164
- package/dist/fleet-manager/__tests__/slack-manager.test.js.map +1 -1
- package/dist/fleet-manager/discord-manager.js +7 -7
- package/dist/fleet-manager/discord-manager.js.map +1 -1
- package/dist/fleet-manager/event-types.d.ts +10 -4
- package/dist/fleet-manager/event-types.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
- package/dist/fleet-manager/fleet-manager.js +5 -9
- package/dist/fleet-manager/fleet-manager.js.map +1 -1
- package/dist/fleet-manager/job-control.js +1 -1
- package/dist/fleet-manager/job-control.js.map +1 -1
- package/dist/fleet-manager/job-queue.d.ts.map +1 -1
- package/dist/fleet-manager/job-queue.js +2 -6
- package/dist/fleet-manager/job-queue.js.map +1 -1
- package/dist/fleet-manager/slack-manager.d.ts +72 -29
- package/dist/fleet-manager/slack-manager.d.ts.map +1 -1
- package/dist/fleet-manager/slack-manager.js +153 -147
- package/dist/fleet-manager/slack-manager.js.map +1 -1
- package/dist/fleet-manager/status-queries.js +1 -1
- package/dist/fleet-manager/status-queries.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runner/job-executor.d.ts +1 -0
- package/dist/runner/job-executor.d.ts.map +1 -1
- package/dist/runner/job-executor.js +4 -7
- package/dist/runner/job-executor.js.map +1 -1
- package/dist/runner/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runner/runtime/cli-runtime.js +29 -27
- package/dist/runner/runtime/cli-runtime.js.map +1 -1
- package/dist/runner/runtime/cli-session-watcher.d.ts.map +1 -1
- package/dist/runner/runtime/cli-session-watcher.js +20 -18
- package/dist/runner/runtime/cli-session-watcher.js.map +1 -1
- package/dist/runner/runtime/container-manager.d.ts.map +1 -1
- package/dist/runner/runtime/container-manager.js +7 -5
- package/dist/runner/runtime/container-manager.js.map +1 -1
- package/dist/runner/runtime/container-runner.d.ts.map +1 -1
- package/dist/runner/runtime/container-runner.js +12 -10
- package/dist/runner/runtime/container-runner.js.map +1 -1
- package/dist/scheduler/__tests__/scheduler.test.js +2 -2
- package/dist/scheduler/__tests__/scheduler.test.js.map +1 -1
- package/dist/scheduler/schedule-runner.d.ts.map +1 -1
- package/dist/scheduler/schedule-runner.js +2 -6
- package/dist/scheduler/schedule-runner.js.map +1 -1
- package/dist/scheduler/schedule-state.d.ts.map +1 -1
- package/dist/scheduler/schedule-state.js +2 -3
- package/dist/scheduler/schedule-state.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/dist/scheduler/scheduler.js +3 -7
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/state/fleet-state.d.ts.map +1 -1
- package/dist/state/fleet-state.js +2 -3
- package/dist/state/fleet-state.js.map +1 -1
- package/dist/state/schemas/job-output.d.ts +2 -2
- package/dist/utils/__tests__/logger.test.d.ts +2 -0
- package/dist/utils/__tests__/logger.test.d.ts.map +1 -0
- package/dist/utils/__tests__/logger.test.js +360 -0
- package/dist/utils/__tests__/logger.test.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +72 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +117 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fleet-state.js","sourceRoot":"","sources":["../../src/state/fleet-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GAGxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"fleet-state.js","sourceRoot":"","sources":["../../src/state/fleet-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GAGxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD;;GAEG;AACH,MAAM,aAAa,GAAgB,YAAY,CAAC,aAAa,CAAC,CAAC;AAwB/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,aAAqB,EACrB,UAAiC,EAAE;IAEnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAE/C,2BAA2B;IAC3B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAU,aAAa,CAAC,CAAC;IAE9D,+CAA+C;IAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,uBAAuB,EAAE,CAAC;QACnC,CAAC;QACD,gDAAgD;QAChD,MAAM,CAAC,IAAI,CACT,8BAA8B,aAAa,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAClG,CAAC;QACF,OAAO,uBAAuB,EAAE,CAAC;IACnC,CAAC;IAED,2CAA2C;IAC3C,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,uBAAuB,EAAE,CAAC;IACnC,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CACT,yBAAyB,aAAa,MAAM,MAAM,wBAAwB,CAC3E,CAAC;YACF,OAAO,uBAAuB,EAAE,CAAC;QACnC,CAAC;QACD,4CAA4C;QAC5C,MAAM,CAAC,IAAI,CACT,wCAAwC,aAAa,MAAO,KAAe,CAAC,OAAO,wBAAwB,CAC5G,CAAC;QACF,OAAO,uBAAuB,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,KAAiB,EACjB,UAAkC,EAAE;IAEpC,0BAA0B;IAC1B,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,aAAa,EAAE,cAAc,EAAE;YACnD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,cAAc,CACtB,+BAA+B,aAAa,MAAO,KAAe,CAAC,OAAO,EAAE,EAC5E,aAAa,EACb,OAAO,EACP,KAAc,CACf,CAAC;IACJ,CAAC;AACH,CAAC;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,SAAiB,EACjB,OAA0B,EAC1B,UAA0D,EAAE;IAE5D,qBAAqB;IACrB,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAElE,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAE/E,gBAAgB;IAChB,MAAM,iBAAiB,GAAe;QACpC,GAAG,iBAAiB;QACpB,GAAG,OAAO;KACX,CAAC;IAEF,mBAAmB;IACnB,MAAM,YAAY,GAAe;QAC/B,GAAG,YAAY;QACf,MAAM,EAAE;YACN,GAAG,YAAY,CAAC,MAAM;YACtB,CAAC,SAAS,CAAC,EAAE,iBAAiB;SAC/B;KACF,CAAC;IAEF,aAAa;IACb,MAAM,eAAe,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAE5D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAqB,EACrB,UAA0D,EAAE;IAE5D,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAElE,yCAAyC;IACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,YAAY,GAAe;YAC/B,GAAG,YAAY;YACf,KAAK,EAAE;gBACL,GAAG,YAAY,CAAC,KAAK;gBACrB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC;SACF,CAAC;QACF,MAAM,eAAe,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,SAAiB,EACjB,UAA0D,EAAE;IAE5D,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAElE,oDAAoD;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,GAAG,eAAe,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC;IAEnE,MAAM,YAAY,GAAe;QAC/B,GAAG,YAAY;QACf,MAAM,EAAE,eAAe;KACxB,CAAC;IAEF,MAAM,eAAe,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -18,10 +18,10 @@ export declare const JobOutputBaseSchema: z.ZodObject<{
|
|
|
18
18
|
/** ISO timestamp when message was recorded */
|
|
19
19
|
timestamp: z.ZodString;
|
|
20
20
|
}, "strip", z.ZodTypeAny, {
|
|
21
|
-
type: "error" | "
|
|
21
|
+
type: "error" | "assistant" | "system" | "tool_use" | "tool_result";
|
|
22
22
|
timestamp: string;
|
|
23
23
|
}, {
|
|
24
|
-
type: "error" | "
|
|
24
|
+
type: "error" | "assistant" | "system" | "tool_use" | "tool_result";
|
|
25
25
|
timestamp: string;
|
|
26
26
|
}>;
|
|
27
27
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/logger.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import { LOG_LEVEL_ORDER, getLogLevel, shouldLog, createLogger, } from "../logger.js";
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// getLogLevel
|
|
5
|
+
// =============================================================================
|
|
6
|
+
describe("getLogLevel", () => {
|
|
7
|
+
let originalEnv;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
// Save original environment
|
|
10
|
+
originalEnv = { ...process.env };
|
|
11
|
+
// Clear relevant env vars
|
|
12
|
+
delete process.env.HERDCTL_LOG_LEVEL;
|
|
13
|
+
delete process.env.DEBUG;
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
// Restore original environment
|
|
17
|
+
process.env = originalEnv;
|
|
18
|
+
});
|
|
19
|
+
it("returns 'info' by default when no env vars are set", () => {
|
|
20
|
+
expect(getLogLevel()).toBe("info");
|
|
21
|
+
});
|
|
22
|
+
it("returns value from HERDCTL_LOG_LEVEL when set to 'debug'", () => {
|
|
23
|
+
process.env.HERDCTL_LOG_LEVEL = "debug";
|
|
24
|
+
expect(getLogLevel()).toBe("debug");
|
|
25
|
+
});
|
|
26
|
+
it("returns value from HERDCTL_LOG_LEVEL when set to 'info'", () => {
|
|
27
|
+
process.env.HERDCTL_LOG_LEVEL = "info";
|
|
28
|
+
expect(getLogLevel()).toBe("info");
|
|
29
|
+
});
|
|
30
|
+
it("returns value from HERDCTL_LOG_LEVEL when set to 'warn'", () => {
|
|
31
|
+
process.env.HERDCTL_LOG_LEVEL = "warn";
|
|
32
|
+
expect(getLogLevel()).toBe("warn");
|
|
33
|
+
});
|
|
34
|
+
it("returns value from HERDCTL_LOG_LEVEL when set to 'error'", () => {
|
|
35
|
+
process.env.HERDCTL_LOG_LEVEL = "error";
|
|
36
|
+
expect(getLogLevel()).toBe("error");
|
|
37
|
+
});
|
|
38
|
+
it("handles uppercase HERDCTL_LOG_LEVEL (case-insensitive)", () => {
|
|
39
|
+
process.env.HERDCTL_LOG_LEVEL = "DEBUG";
|
|
40
|
+
expect(getLogLevel()).toBe("debug");
|
|
41
|
+
});
|
|
42
|
+
it("handles mixed case HERDCTL_LOG_LEVEL", () => {
|
|
43
|
+
process.env.HERDCTL_LOG_LEVEL = "WaRn";
|
|
44
|
+
expect(getLogLevel()).toBe("warn");
|
|
45
|
+
});
|
|
46
|
+
it("returns 'debug' when DEBUG=1", () => {
|
|
47
|
+
process.env.DEBUG = "1";
|
|
48
|
+
expect(getLogLevel()).toBe("debug");
|
|
49
|
+
});
|
|
50
|
+
it("returns 'debug' when DEBUG=true", () => {
|
|
51
|
+
process.env.DEBUG = "true";
|
|
52
|
+
expect(getLogLevel()).toBe("debug");
|
|
53
|
+
});
|
|
54
|
+
it("returns 'info' when DEBUG has other values", () => {
|
|
55
|
+
process.env.DEBUG = "false";
|
|
56
|
+
expect(getLogLevel()).toBe("info");
|
|
57
|
+
});
|
|
58
|
+
it("returns 'info' when DEBUG is empty string", () => {
|
|
59
|
+
process.env.DEBUG = "";
|
|
60
|
+
expect(getLogLevel()).toBe("info");
|
|
61
|
+
});
|
|
62
|
+
it("HERDCTL_LOG_LEVEL takes precedence over DEBUG", () => {
|
|
63
|
+
process.env.HERDCTL_LOG_LEVEL = "error";
|
|
64
|
+
process.env.DEBUG = "1";
|
|
65
|
+
expect(getLogLevel()).toBe("error");
|
|
66
|
+
});
|
|
67
|
+
it("HERDCTL_LOG_LEVEL=warn takes precedence over DEBUG=true", () => {
|
|
68
|
+
process.env.HERDCTL_LOG_LEVEL = "warn";
|
|
69
|
+
process.env.DEBUG = "true";
|
|
70
|
+
expect(getLogLevel()).toBe("warn");
|
|
71
|
+
});
|
|
72
|
+
it("falls back to DEBUG when HERDCTL_LOG_LEVEL is invalid", () => {
|
|
73
|
+
process.env.HERDCTL_LOG_LEVEL = "invalid";
|
|
74
|
+
process.env.DEBUG = "1";
|
|
75
|
+
expect(getLogLevel()).toBe("debug");
|
|
76
|
+
});
|
|
77
|
+
it("returns 'info' when HERDCTL_LOG_LEVEL is invalid and DEBUG is not set", () => {
|
|
78
|
+
process.env.HERDCTL_LOG_LEVEL = "invalid";
|
|
79
|
+
expect(getLogLevel()).toBe("info");
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
// =============================================================================
|
|
83
|
+
// LOG_LEVEL_ORDER
|
|
84
|
+
// =============================================================================
|
|
85
|
+
describe("LOG_LEVEL_ORDER", () => {
|
|
86
|
+
it("has debug as lowest (most verbose)", () => {
|
|
87
|
+
expect(LOG_LEVEL_ORDER.debug).toBe(0);
|
|
88
|
+
});
|
|
89
|
+
it("has info as second level", () => {
|
|
90
|
+
expect(LOG_LEVEL_ORDER.info).toBe(1);
|
|
91
|
+
});
|
|
92
|
+
it("has warn as third level", () => {
|
|
93
|
+
expect(LOG_LEVEL_ORDER.warn).toBe(2);
|
|
94
|
+
});
|
|
95
|
+
it("has error as highest (least verbose)", () => {
|
|
96
|
+
expect(LOG_LEVEL_ORDER.error).toBe(3);
|
|
97
|
+
});
|
|
98
|
+
it("maintains proper ordering (debug < info < warn < error)", () => {
|
|
99
|
+
expect(LOG_LEVEL_ORDER.debug).toBeLessThan(LOG_LEVEL_ORDER.info);
|
|
100
|
+
expect(LOG_LEVEL_ORDER.info).toBeLessThan(LOG_LEVEL_ORDER.warn);
|
|
101
|
+
expect(LOG_LEVEL_ORDER.warn).toBeLessThan(LOG_LEVEL_ORDER.error);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
// =============================================================================
|
|
105
|
+
// shouldLog
|
|
106
|
+
// =============================================================================
|
|
107
|
+
describe("shouldLog", () => {
|
|
108
|
+
let originalEnv;
|
|
109
|
+
beforeEach(() => {
|
|
110
|
+
originalEnv = { ...process.env };
|
|
111
|
+
delete process.env.HERDCTL_LOG_LEVEL;
|
|
112
|
+
delete process.env.DEBUG;
|
|
113
|
+
});
|
|
114
|
+
afterEach(() => {
|
|
115
|
+
process.env = originalEnv;
|
|
116
|
+
});
|
|
117
|
+
describe("at default level (info)", () => {
|
|
118
|
+
it("returns false for debug", () => {
|
|
119
|
+
expect(shouldLog("debug")).toBe(false);
|
|
120
|
+
});
|
|
121
|
+
it("returns true for info", () => {
|
|
122
|
+
expect(shouldLog("info")).toBe(true);
|
|
123
|
+
});
|
|
124
|
+
it("returns true for warn", () => {
|
|
125
|
+
expect(shouldLog("warn")).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
it("returns true for error", () => {
|
|
128
|
+
expect(shouldLog("error")).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe("at debug level", () => {
|
|
132
|
+
beforeEach(() => {
|
|
133
|
+
process.env.HERDCTL_LOG_LEVEL = "debug";
|
|
134
|
+
});
|
|
135
|
+
it("returns true for debug", () => {
|
|
136
|
+
expect(shouldLog("debug")).toBe(true);
|
|
137
|
+
});
|
|
138
|
+
it("returns true for info", () => {
|
|
139
|
+
expect(shouldLog("info")).toBe(true);
|
|
140
|
+
});
|
|
141
|
+
it("returns true for warn", () => {
|
|
142
|
+
expect(shouldLog("warn")).toBe(true);
|
|
143
|
+
});
|
|
144
|
+
it("returns true for error", () => {
|
|
145
|
+
expect(shouldLog("error")).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe("at warn level", () => {
|
|
149
|
+
beforeEach(() => {
|
|
150
|
+
process.env.HERDCTL_LOG_LEVEL = "warn";
|
|
151
|
+
});
|
|
152
|
+
it("returns false for debug", () => {
|
|
153
|
+
expect(shouldLog("debug")).toBe(false);
|
|
154
|
+
});
|
|
155
|
+
it("returns false for info", () => {
|
|
156
|
+
expect(shouldLog("info")).toBe(false);
|
|
157
|
+
});
|
|
158
|
+
it("returns true for warn", () => {
|
|
159
|
+
expect(shouldLog("warn")).toBe(true);
|
|
160
|
+
});
|
|
161
|
+
it("returns true for error", () => {
|
|
162
|
+
expect(shouldLog("error")).toBe(true);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
describe("at error level", () => {
|
|
166
|
+
beforeEach(() => {
|
|
167
|
+
process.env.HERDCTL_LOG_LEVEL = "error";
|
|
168
|
+
});
|
|
169
|
+
it("returns false for debug", () => {
|
|
170
|
+
expect(shouldLog("debug")).toBe(false);
|
|
171
|
+
});
|
|
172
|
+
it("returns false for info", () => {
|
|
173
|
+
expect(shouldLog("info")).toBe(false);
|
|
174
|
+
});
|
|
175
|
+
it("returns false for warn", () => {
|
|
176
|
+
expect(shouldLog("warn")).toBe(false);
|
|
177
|
+
});
|
|
178
|
+
it("returns true for error", () => {
|
|
179
|
+
expect(shouldLog("error")).toBe(true);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
// =============================================================================
|
|
184
|
+
// createLogger
|
|
185
|
+
// =============================================================================
|
|
186
|
+
describe("createLogger", () => {
|
|
187
|
+
let originalEnv;
|
|
188
|
+
let debugSpy;
|
|
189
|
+
let infoSpy;
|
|
190
|
+
let warnSpy;
|
|
191
|
+
let errorSpy;
|
|
192
|
+
beforeEach(() => {
|
|
193
|
+
originalEnv = { ...process.env };
|
|
194
|
+
delete process.env.HERDCTL_LOG_LEVEL;
|
|
195
|
+
delete process.env.DEBUG;
|
|
196
|
+
// Spy on console methods
|
|
197
|
+
debugSpy = vi.spyOn(console, "debug").mockImplementation(() => { });
|
|
198
|
+
infoSpy = vi.spyOn(console, "info").mockImplementation(() => { });
|
|
199
|
+
warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
200
|
+
errorSpy = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
201
|
+
});
|
|
202
|
+
afterEach(() => {
|
|
203
|
+
process.env = originalEnv;
|
|
204
|
+
vi.restoreAllMocks();
|
|
205
|
+
});
|
|
206
|
+
describe("logger creation", () => {
|
|
207
|
+
it("creates a logger with all methods", () => {
|
|
208
|
+
const logger = createLogger("TestPrefix");
|
|
209
|
+
expect(logger).toHaveProperty("debug");
|
|
210
|
+
expect(logger).toHaveProperty("info");
|
|
211
|
+
expect(logger).toHaveProperty("warn");
|
|
212
|
+
expect(logger).toHaveProperty("error");
|
|
213
|
+
});
|
|
214
|
+
it("all methods are functions", () => {
|
|
215
|
+
const logger = createLogger("TestPrefix");
|
|
216
|
+
expect(typeof logger.debug).toBe("function");
|
|
217
|
+
expect(typeof logger.info).toBe("function");
|
|
218
|
+
expect(typeof logger.warn).toBe("function");
|
|
219
|
+
expect(typeof logger.error).toBe("function");
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
describe("message prefixing", () => {
|
|
223
|
+
beforeEach(() => {
|
|
224
|
+
process.env.HERDCTL_LOG_LEVEL = "debug";
|
|
225
|
+
});
|
|
226
|
+
it("prefixes debug messages with logger name", () => {
|
|
227
|
+
const logger = createLogger("MyComponent");
|
|
228
|
+
logger.debug("test message");
|
|
229
|
+
expect(debugSpy).toHaveBeenCalledWith("[MyComponent] test message");
|
|
230
|
+
});
|
|
231
|
+
it("prefixes info messages with logger name", () => {
|
|
232
|
+
const logger = createLogger("MyComponent");
|
|
233
|
+
logger.info("test message");
|
|
234
|
+
expect(infoSpy).toHaveBeenCalledWith("[MyComponent] test message");
|
|
235
|
+
});
|
|
236
|
+
it("prefixes warn messages with logger name", () => {
|
|
237
|
+
const logger = createLogger("MyComponent");
|
|
238
|
+
logger.warn("test message");
|
|
239
|
+
expect(warnSpy).toHaveBeenCalledWith("[MyComponent] test message");
|
|
240
|
+
});
|
|
241
|
+
it("prefixes error messages with logger name", () => {
|
|
242
|
+
const logger = createLogger("MyComponent");
|
|
243
|
+
logger.error("test message");
|
|
244
|
+
expect(errorSpy).toHaveBeenCalledWith("[MyComponent] test message");
|
|
245
|
+
});
|
|
246
|
+
it("uses exact prefix provided", () => {
|
|
247
|
+
const logger = createLogger("CLIRuntime");
|
|
248
|
+
logger.info("Starting process...");
|
|
249
|
+
expect(infoSpy).toHaveBeenCalledWith("[CLIRuntime] Starting process...");
|
|
250
|
+
});
|
|
251
|
+
it("handles prefix with special characters", () => {
|
|
252
|
+
const logger = createLogger("Module-A::Sub");
|
|
253
|
+
logger.info("message");
|
|
254
|
+
expect(infoSpy).toHaveBeenCalledWith("[Module-A::Sub] message");
|
|
255
|
+
});
|
|
256
|
+
it("handles empty prefix", () => {
|
|
257
|
+
const logger = createLogger("");
|
|
258
|
+
logger.info("message");
|
|
259
|
+
expect(infoSpy).toHaveBeenCalledWith("[] message");
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
describe("log level filtering at default level (info)", () => {
|
|
263
|
+
it("does not log debug messages", () => {
|
|
264
|
+
const logger = createLogger("Test");
|
|
265
|
+
logger.debug("debug message");
|
|
266
|
+
expect(debugSpy).not.toHaveBeenCalled();
|
|
267
|
+
});
|
|
268
|
+
it("logs info messages", () => {
|
|
269
|
+
const logger = createLogger("Test");
|
|
270
|
+
logger.info("info message");
|
|
271
|
+
expect(infoSpy).toHaveBeenCalledWith("[Test] info message");
|
|
272
|
+
});
|
|
273
|
+
it("logs warn messages", () => {
|
|
274
|
+
const logger = createLogger("Test");
|
|
275
|
+
logger.warn("warn message");
|
|
276
|
+
expect(warnSpy).toHaveBeenCalledWith("[Test] warn message");
|
|
277
|
+
});
|
|
278
|
+
it("logs error messages", () => {
|
|
279
|
+
const logger = createLogger("Test");
|
|
280
|
+
logger.error("error message");
|
|
281
|
+
expect(errorSpy).toHaveBeenCalledWith("[Test] error message");
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
describe("log level filtering at debug level", () => {
|
|
285
|
+
beforeEach(() => {
|
|
286
|
+
process.env.HERDCTL_LOG_LEVEL = "debug";
|
|
287
|
+
});
|
|
288
|
+
it("logs debug messages", () => {
|
|
289
|
+
const logger = createLogger("Test");
|
|
290
|
+
logger.debug("debug message");
|
|
291
|
+
expect(debugSpy).toHaveBeenCalledWith("[Test] debug message");
|
|
292
|
+
});
|
|
293
|
+
it("logs info messages", () => {
|
|
294
|
+
const logger = createLogger("Test");
|
|
295
|
+
logger.info("info message");
|
|
296
|
+
expect(infoSpy).toHaveBeenCalledWith("[Test] info message");
|
|
297
|
+
});
|
|
298
|
+
it("logs warn messages", () => {
|
|
299
|
+
const logger = createLogger("Test");
|
|
300
|
+
logger.warn("warn message");
|
|
301
|
+
expect(warnSpy).toHaveBeenCalledWith("[Test] warn message");
|
|
302
|
+
});
|
|
303
|
+
it("logs error messages", () => {
|
|
304
|
+
const logger = createLogger("Test");
|
|
305
|
+
logger.error("error message");
|
|
306
|
+
expect(errorSpy).toHaveBeenCalledWith("[Test] error message");
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
describe("log level filtering at error level", () => {
|
|
310
|
+
beforeEach(() => {
|
|
311
|
+
process.env.HERDCTL_LOG_LEVEL = "error";
|
|
312
|
+
});
|
|
313
|
+
it("does not log debug messages", () => {
|
|
314
|
+
const logger = createLogger("Test");
|
|
315
|
+
logger.debug("debug message");
|
|
316
|
+
expect(debugSpy).not.toHaveBeenCalled();
|
|
317
|
+
});
|
|
318
|
+
it("does not log info messages", () => {
|
|
319
|
+
const logger = createLogger("Test");
|
|
320
|
+
logger.info("info message");
|
|
321
|
+
expect(infoSpy).not.toHaveBeenCalled();
|
|
322
|
+
});
|
|
323
|
+
it("does not log warn messages", () => {
|
|
324
|
+
const logger = createLogger("Test");
|
|
325
|
+
logger.warn("warn message");
|
|
326
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
327
|
+
});
|
|
328
|
+
it("logs error messages", () => {
|
|
329
|
+
const logger = createLogger("Test");
|
|
330
|
+
logger.error("error message");
|
|
331
|
+
expect(errorSpy).toHaveBeenCalledWith("[Test] error message");
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
describe("DEBUG environment variable", () => {
|
|
335
|
+
it("enables debug logging when DEBUG=1", () => {
|
|
336
|
+
process.env.DEBUG = "1";
|
|
337
|
+
const logger = createLogger("Test");
|
|
338
|
+
logger.debug("debug message");
|
|
339
|
+
expect(debugSpy).toHaveBeenCalledWith("[Test] debug message");
|
|
340
|
+
});
|
|
341
|
+
it("enables debug logging when DEBUG=true", () => {
|
|
342
|
+
process.env.DEBUG = "true";
|
|
343
|
+
const logger = createLogger("Test");
|
|
344
|
+
logger.debug("debug message");
|
|
345
|
+
expect(debugSpy).toHaveBeenCalledWith("[Test] debug message");
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
describe("multiple loggers", () => {
|
|
349
|
+
it("different loggers have independent prefixes", () => {
|
|
350
|
+
process.env.HERDCTL_LOG_LEVEL = "debug";
|
|
351
|
+
const loggerA = createLogger("ComponentA");
|
|
352
|
+
const loggerB = createLogger("ComponentB");
|
|
353
|
+
loggerA.info("message from A");
|
|
354
|
+
loggerB.info("message from B");
|
|
355
|
+
expect(infoSpy).toHaveBeenCalledWith("[ComponentA] message from A");
|
|
356
|
+
expect(infoSpy).toHaveBeenCalledWith("[ComponentB] message from B");
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
//# sourceMappingURL=logger.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/logger.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized logger utility for herdctl
|
|
3
|
+
*
|
|
4
|
+
* Provides environment-aware logging that respects HERDCTL_LOG_LEVEL
|
|
5
|
+
* and DEBUG environment variables.
|
|
6
|
+
*
|
|
7
|
+
* Supports a global log handler so consumers (e.g. the CLI) can install
|
|
8
|
+
* colorized or otherwise customized output formatting for all loggers.
|
|
9
|
+
*/
|
|
10
|
+
import type { LogLevel } from "../fleet-manager/types.js";
|
|
11
|
+
export type { LogLevel };
|
|
12
|
+
/**
|
|
13
|
+
* Numeric order for log level comparison
|
|
14
|
+
* Lower numbers = more verbose
|
|
15
|
+
*/
|
|
16
|
+
export declare const LOG_LEVEL_ORDER: Record<LogLevel, number>;
|
|
17
|
+
/**
|
|
18
|
+
* Global log handler function type
|
|
19
|
+
*
|
|
20
|
+
* When set, all loggers created by `createLogger` will delegate to this
|
|
21
|
+
* handler instead of calling `console.*` directly. The handler is
|
|
22
|
+
* responsible for its own level filtering (use `shouldLog` if needed).
|
|
23
|
+
*/
|
|
24
|
+
export type LogHandler = (level: LogLevel, prefix: string, message: string, data?: Record<string, unknown>) => void;
|
|
25
|
+
/**
|
|
26
|
+
* Set a global log handler for all `createLogger` instances
|
|
27
|
+
*
|
|
28
|
+
* Pass `null` to revert to default `console.*` output.
|
|
29
|
+
*/
|
|
30
|
+
export declare function setLogHandler(handler: LogHandler | null): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get the current log level from environment
|
|
33
|
+
*
|
|
34
|
+
* Priority:
|
|
35
|
+
* 1. HERDCTL_LOG_LEVEL environment variable (debug/info/warn/error)
|
|
36
|
+
* 2. DEBUG=1 or DEBUG=true enables debug level
|
|
37
|
+
* 3. Default: 'info'
|
|
38
|
+
*/
|
|
39
|
+
export declare function getLogLevel(): LogLevel;
|
|
40
|
+
/**
|
|
41
|
+
* Check if a log level should be displayed based on current settings
|
|
42
|
+
*
|
|
43
|
+
* @param level - The level to check
|
|
44
|
+
* @returns true if the level should be logged
|
|
45
|
+
*/
|
|
46
|
+
export declare function shouldLog(level: LogLevel): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Create a logger with a specific prefix
|
|
49
|
+
*
|
|
50
|
+
* Returns a logger object that respects the HERDCTL_LOG_LEVEL
|
|
51
|
+
* environment variable. Each method accepts an optional data
|
|
52
|
+
* parameter that is JSON-serialized into the log output.
|
|
53
|
+
*
|
|
54
|
+
* @param prefix - The prefix to use for log messages (e.g., 'CLIRuntime')
|
|
55
|
+
* @returns A logger object with debug/info/warn/error methods
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const logger = createLogger('CLIRuntime');
|
|
60
|
+
* logger.debug('Starting process...'); // Only shown if HERDCTL_LOG_LEVEL=debug
|
|
61
|
+
* logger.info('Process started'); // Shown at info level and below
|
|
62
|
+
* logger.info('Connected', { host: 'localhost' }); // With structured data
|
|
63
|
+
* logger.error('Process failed'); // Always shown
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function createLogger(prefix: string): {
|
|
67
|
+
debug: (message: string, data?: Record<string, unknown>) => void;
|
|
68
|
+
info: (message: string, data?: Record<string, unknown>) => void;
|
|
69
|
+
warn: (message: string, data?: Record<string, unknown>) => void;
|
|
70
|
+
error: (message: string, data?: Record<string, unknown>) => void;
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAKpD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,IAAI,CAAC;AAKV;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAUtC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAGlD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM;qBAOtB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAOvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAOtC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAOrC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAQ1D"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized logger utility for herdctl
|
|
3
|
+
*
|
|
4
|
+
* Provides environment-aware logging that respects HERDCTL_LOG_LEVEL
|
|
5
|
+
* and DEBUG environment variables.
|
|
6
|
+
*
|
|
7
|
+
* Supports a global log handler so consumers (e.g. the CLI) can install
|
|
8
|
+
* colorized or otherwise customized output formatting for all loggers.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Numeric order for log level comparison
|
|
12
|
+
* Lower numbers = more verbose
|
|
13
|
+
*/
|
|
14
|
+
export const LOG_LEVEL_ORDER = {
|
|
15
|
+
debug: 0,
|
|
16
|
+
info: 1,
|
|
17
|
+
warn: 2,
|
|
18
|
+
error: 3,
|
|
19
|
+
};
|
|
20
|
+
/** Global log handler — null means use default console output */
|
|
21
|
+
let logHandler = null;
|
|
22
|
+
/**
|
|
23
|
+
* Set a global log handler for all `createLogger` instances
|
|
24
|
+
*
|
|
25
|
+
* Pass `null` to revert to default `console.*` output.
|
|
26
|
+
*/
|
|
27
|
+
export function setLogHandler(handler) {
|
|
28
|
+
logHandler = handler;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the current log level from environment
|
|
32
|
+
*
|
|
33
|
+
* Priority:
|
|
34
|
+
* 1. HERDCTL_LOG_LEVEL environment variable (debug/info/warn/error)
|
|
35
|
+
* 2. DEBUG=1 or DEBUG=true enables debug level
|
|
36
|
+
* 3. Default: 'info'
|
|
37
|
+
*/
|
|
38
|
+
export function getLogLevel() {
|
|
39
|
+
const envLevel = process.env.HERDCTL_LOG_LEVEL?.toLowerCase();
|
|
40
|
+
if (envLevel && envLevel in LOG_LEVEL_ORDER) {
|
|
41
|
+
return envLevel;
|
|
42
|
+
}
|
|
43
|
+
// Also support DEBUG=1 or DEBUG=true for debug level
|
|
44
|
+
if (process.env.DEBUG === "1" || process.env.DEBUG === "true") {
|
|
45
|
+
return "debug";
|
|
46
|
+
}
|
|
47
|
+
return "info"; // Default
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if a log level should be displayed based on current settings
|
|
51
|
+
*
|
|
52
|
+
* @param level - The level to check
|
|
53
|
+
* @returns true if the level should be logged
|
|
54
|
+
*/
|
|
55
|
+
export function shouldLog(level) {
|
|
56
|
+
const currentLevel = getLogLevel();
|
|
57
|
+
return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[currentLevel];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a logger with a specific prefix
|
|
61
|
+
*
|
|
62
|
+
* Returns a logger object that respects the HERDCTL_LOG_LEVEL
|
|
63
|
+
* environment variable. Each method accepts an optional data
|
|
64
|
+
* parameter that is JSON-serialized into the log output.
|
|
65
|
+
*
|
|
66
|
+
* @param prefix - The prefix to use for log messages (e.g., 'CLIRuntime')
|
|
67
|
+
* @returns A logger object with debug/info/warn/error methods
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const logger = createLogger('CLIRuntime');
|
|
72
|
+
* logger.debug('Starting process...'); // Only shown if HERDCTL_LOG_LEVEL=debug
|
|
73
|
+
* logger.info('Process started'); // Shown at info level and below
|
|
74
|
+
* logger.info('Connected', { host: 'localhost' }); // With structured data
|
|
75
|
+
* logger.error('Process failed'); // Always shown
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export function createLogger(prefix) {
|
|
79
|
+
const fmt = (message, data) => data
|
|
80
|
+
? `[${prefix}] ${message} ${JSON.stringify(data)}`
|
|
81
|
+
: `[${prefix}] ${message}`;
|
|
82
|
+
return {
|
|
83
|
+
debug: (message, data) => {
|
|
84
|
+
if (logHandler) {
|
|
85
|
+
logHandler("debug", prefix, message, data);
|
|
86
|
+
}
|
|
87
|
+
else if (shouldLog("debug")) {
|
|
88
|
+
console.debug(fmt(message, data));
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
info: (message, data) => {
|
|
92
|
+
if (logHandler) {
|
|
93
|
+
logHandler("info", prefix, message, data);
|
|
94
|
+
}
|
|
95
|
+
else if (shouldLog("info")) {
|
|
96
|
+
console.info(fmt(message, data));
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
warn: (message, data) => {
|
|
100
|
+
if (logHandler) {
|
|
101
|
+
logHandler("warn", prefix, message, data);
|
|
102
|
+
}
|
|
103
|
+
else if (shouldLog("warn")) {
|
|
104
|
+
console.warn(fmt(message, data));
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
error: (message, data) => {
|
|
108
|
+
if (logHandler) {
|
|
109
|
+
logHandler("error", prefix, message, data);
|
|
110
|
+
}
|
|
111
|
+
else if (shouldLog("error")) {
|
|
112
|
+
console.error(fmt(message, data));
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|