@miketako3/cloki 0.1.20 → 0.1.21

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/README.md CHANGED
@@ -75,23 +75,89 @@ You can pass a string directly as a message. It will be converted to `{"message"
75
75
  await logger.info("Hello World!");
76
76
  ```
77
77
 
78
- #### 3. Cloudflare Workers `ctx.waitUntil`
78
+ #### 3. Cloudflare Workers `ctx.waitUntil` and `cf` properties
79
79
 
80
- To prevent the log sending from being cancelled when the worker returns a response, you can pass the `ExecutionContext`.
80
+ To prevent the log sending from being cancelled when the worker returns a response, you can pass the `ExecutionContext` to `getLokiLogger` or to each log method. You can also automatically add labels from `request.cf`.
81
81
 
82
82
  ```typescript
83
83
  export default {
84
84
  async fetch(request, env, ctx) {
85
- const logger = getLokiLogger({ ... });
85
+ const logger = getLokiLogger({
86
+ cf: request.cf, // Automatically add cf_colo, cf_country, etc.
87
+ ctx: ctx // Use ctx.waitUntil internally for all logs
88
+ });
86
89
 
87
90
  // This will use ctx.waitUntil internally and won't block the response
88
- logger.info("Request received", { path: new URL(request.url).pathname }, ctx);
91
+ logger.info("Request received", { path: new URL(request.url).pathname });
89
92
 
90
93
  return new Response("OK");
91
94
  }
92
95
  }
93
96
  ```
94
97
 
98
+ #### 4. Zero Configuration (Environment Variables)
99
+
100
+ If you set the following environment variables, you can initialize the logger without any arguments:
101
+
102
+ - `LOKI_HOST` (e.g., `logs-prod-us-central1.grafana.net`)
103
+ - `LOKI_USER`
104
+ - `LOKI_TOKEN`
105
+
106
+ Standard usage for Cloudflare Workers:
107
+
108
+ ```typescript
109
+ export default {
110
+ async fetch(request, env, ctx) {
111
+ const logger = getLokiLogger({ cf: request.cf, ctx });
112
+ // ...
113
+ }
114
+ }
115
+ ```
116
+
117
+ #### 5. Retries and Error Handling
118
+
119
+ You can configure retries and a callback for when sending fails.
120
+
121
+ ```typescript
122
+ const logger = getLokiLogger({
123
+ retries: 3,
124
+ onSendError: (err, msg) => {
125
+ console.error("Failed to send to Loki after retries", err);
126
+ }
127
+ });
128
+ ```
129
+
130
+ #### 6. Custom Formatter and Silent Mode
131
+
132
+ ```typescript
133
+ const logger = getLokiLogger({
134
+ silent: process.env.NODE_ENV === 'development',
135
+ format: (level, msg, labels) => {
136
+ // Return custom LokiMessage structure
137
+ return {
138
+ streams: [{
139
+ stream: { ...labels, level, custom: 'label' },
140
+ values: [[Date.now().toString() + "000000", JSON.stringify(msg)]]
141
+ }]
142
+ };
143
+ }
144
+ });
145
+ ```
146
+
147
+ #### 7. TypeScript Type Safety for Labels
148
+
149
+ You can define the allowed label keys using Generics.
150
+
151
+ ```typescript
152
+ type MyLabels = 'env' | 'service' | 'version';
153
+ const logger = getLokiLogger<MyLabels>({
154
+ defaultLabels: { env: 'prod' } // Type checked
155
+ });
156
+
157
+ await logger.info("Hello", { service: 'api' }); // Type checked
158
+ // await logger.info("Hello", { unknown: 'label' }); // TypeScript Error
159
+ ```
160
+
95
161
  ## Contributing
96
162
 
97
163
  Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
package/dist/logger.d.ts CHANGED
@@ -1,18 +1,42 @@
1
1
  /**
2
2
  * Loki config
3
3
  */
4
- export type LokiConfig = {
5
- lokiHost: string;
6
- lokiToken: string;
7
- lokiUser: string;
4
+ export type LokiConfig<T extends string = string> = {
5
+ lokiHost?: string;
6
+ lokiToken?: string;
7
+ lokiUser?: string;
8
8
  /**
9
9
  * Default labels added to all logs
10
10
  */
11
- defaultLabels?: LokiLabels;
11
+ defaultLabels?: LokiLabels<T>;
12
12
  /**
13
13
  * Minimum log level to send to Loki
14
14
  */
15
15
  minLevel?: LogLevel;
16
+ /**
17
+ * Number of retries for fetch (default: 0)
18
+ */
19
+ retries?: number;
20
+ /**
21
+ * Callback when fetch fails
22
+ */
23
+ onSendError?: (error: unknown, message: LokiMessage<T>) => void;
24
+ /**
25
+ * Custom formatter for Loki message
26
+ */
27
+ format?: (logLevel: LogLevel, message: object, labels: LokiLabels<T>) => LokiMessage<T>;
28
+ /**
29
+ * If true, don't send to Loki (just console.log)
30
+ */
31
+ silent?: boolean;
32
+ /**
33
+ * Automatically add labels from request.cf
34
+ */
35
+ cf?: CfProperties;
36
+ /**
37
+ * Default ExecutionContext for ctx.waitUntil
38
+ */
39
+ ctx?: ExecutionContext;
16
40
  };
17
41
  /**
18
42
  * Log levels
@@ -21,20 +45,32 @@ export type LogLevel = "debug" | "info" | "warn" | "error";
21
45
  /**
22
46
  * Loki labels
23
47
  */
24
- export type LokiLabels = {
48
+ export type LokiLabels<T extends string = string> = {
49
+ [key in T]?: string;
50
+ } & {
25
51
  [key: string]: string;
26
52
  };
27
53
  /**
28
54
  * Loki message
29
55
  */
30
- export type LokiMessage = {
56
+ export type LokiMessage<T extends string = string> = {
31
57
  streams: [
32
58
  {
33
- stream: LokiLabels;
59
+ stream: LokiLabels<T>;
34
60
  values: [string[]];
35
61
  }
36
62
  ];
37
63
  };
64
+ /**
65
+ * Cloudflare Workers IncomingRequestCfProperties
66
+ */
67
+ export type CfProperties = {
68
+ colo?: string;
69
+ country?: string;
70
+ city?: string;
71
+ asn?: number;
72
+ [key: string]: unknown;
73
+ };
38
74
  /**
39
75
  * Cloudflare Workers ExecutionContext
40
76
  */
@@ -51,9 +87,9 @@ export type LogMessage = string | object;
51
87
  *
52
88
  * @param config
53
89
  */
54
- export declare const getLokiLogger: (config: LokiConfig) => {
55
- info: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
56
- warn: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
57
- error: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
58
- debug: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
90
+ export declare const getLokiLogger: <T extends string = string>(config?: LokiConfig<T>) => {
91
+ info: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
92
+ warn: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
93
+ error: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
94
+ debug: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
59
95
  };
package/dist/logger.js CHANGED
@@ -22,15 +22,37 @@ const LOG_LEVEL_PRIORITY = {
22
22
  *
23
23
  * @param config
24
24
  */
25
- const getLokiLogger = (config) => {
25
+ const getLokiLogger = (config = {}) => {
26
+ var _a;
27
+ const mergedConfig = Object.assign(Object.assign({}, config), { lokiHost: config.lokiHost ||
28
+ getEnv("LOKI_HOST") ||
29
+ ((_a = getEnv("LOKI_URL")) === null || _a === void 0 ? void 0 : _a.replace(/^https?:\/\//, "")), lokiToken: config.lokiToken || getEnv("LOKI_TOKEN"), lokiUser: config.lokiUser || getEnv("LOKI_USER") });
26
30
  return {
27
- info: lokiInfo(config),
28
- warn: lokiWarn(config),
29
- error: lokiError(config),
30
- debug: lokiDebug(config),
31
+ info: lokiInfo(mergedConfig),
32
+ warn: lokiWarn(mergedConfig),
33
+ error: lokiError(mergedConfig),
34
+ debug: lokiDebug(mergedConfig),
31
35
  };
32
36
  };
33
37
  exports.getLokiLogger = getLokiLogger;
38
+ /**
39
+ * Get environment variable from various sources
40
+ */
41
+ function getEnv(name) {
42
+ try {
43
+ // Node.js
44
+ if (typeof process !== "undefined" && process.env) {
45
+ return process.env[name];
46
+ }
47
+ // Global
48
+ if (typeof globalThis !== "undefined") {
49
+ const global = globalThis;
50
+ return global[name];
51
+ }
52
+ }
53
+ catch (_e) { }
54
+ return undefined;
55
+ }
34
56
  /**
35
57
  * Log info to Loki curried
36
58
  *
@@ -80,10 +102,16 @@ function log(config, logLevel, message, labels, ctx) {
80
102
  }
81
103
  const normalizedMessage = typeof message === "string" ? { message } : message;
82
104
  console.log(JSON.stringify(normalizedMessage));
83
- const lokiMessage = generateLokiMessage(config, logLevel, normalizedMessage, labels);
84
- const promise = sendToLoki(config, lokiMessage);
85
- if (ctx) {
86
- ctx.waitUntil(promise);
105
+ if (config.silent) {
106
+ return;
107
+ }
108
+ const lokiMessage = config.format
109
+ ? config.format(logLevel, normalizedMessage, labels)
110
+ : generateLokiMessage(config, logLevel, normalizedMessage, labels);
111
+ const promise = sendWithRetry(config, lokiMessage);
112
+ const effectiveCtx = ctx || config.ctx;
113
+ if (effectiveCtx) {
114
+ effectiveCtx.waitUntil(promise);
87
115
  }
88
116
  else {
89
117
  yield promise;
@@ -99,15 +127,54 @@ function log(config, logLevel, message, labels, ctx) {
99
127
  * @param labels
100
128
  */
101
129
  function generateLokiMessage(config, logLevel, message, labels) {
130
+ const cfLabels = {};
131
+ if (config.cf) {
132
+ if (config.cf.colo)
133
+ cfLabels.cf_colo = config.cf.colo;
134
+ if (config.cf.country)
135
+ cfLabels.cf_country = config.cf.country;
136
+ if (config.cf.city)
137
+ cfLabels.cf_city = config.cf.city;
138
+ if (config.cf.asn)
139
+ cfLabels.cf_asn = config.cf.asn.toString();
140
+ }
102
141
  return {
103
142
  streams: [
104
143
  {
105
- stream: Object.assign(Object.assign({ level: logLevel }, config.defaultLabels), labels),
144
+ stream: Object.assign(Object.assign(Object.assign({ level: logLevel }, config.defaultLabels), cfLabels), labels),
106
145
  values: [[`${Date.now().toString()}000000`, JSON.stringify(message)]],
107
146
  },
108
147
  ],
109
148
  };
110
149
  }
150
+ /**
151
+ * Send with retry
152
+ */
153
+ function sendWithRetry(config, lokiMessage) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const retries = config.retries || 0;
156
+ let lastError;
157
+ for (let i = 0; i <= retries; i++) {
158
+ try {
159
+ yield sendToLoki(config, lokiMessage);
160
+ return; // Success
161
+ }
162
+ catch (e) {
163
+ lastError = e;
164
+ if (i < retries) {
165
+ // Simple backoff: 100ms, 200ms, 400ms...
166
+ yield new Promise((resolve) => setTimeout(resolve, 100 * 2 ** i));
167
+ }
168
+ }
169
+ }
170
+ if (config.onSendError) {
171
+ config.onSendError(lastError, lokiMessage);
172
+ }
173
+ else {
174
+ console.error("Loki logging failed after retries:", lastError);
175
+ }
176
+ });
177
+ }
111
178
  /**
112
179
  * Send a message to Loki
113
180
  *
@@ -116,22 +183,20 @@ function generateLokiMessage(config, logLevel, message, labels) {
116
183
  */
117
184
  function sendToLoki(config, lokiMessage) {
118
185
  return __awaiter(this, void 0, void 0, function* () {
119
- yield fetch(`https://${config.lokiHost}/loki/api/v1/push`, {
186
+ if (!config.lokiHost || !config.lokiUser || !config.lokiToken) {
187
+ throw new Error("Loki configuration missing (host, user, or token)");
188
+ }
189
+ const response = yield fetch(`https://${config.lokiHost}/loki/api/v1/push`, {
120
190
  method: "POST",
121
191
  headers: {
122
192
  "Content-Type": "application/json",
123
193
  Authorization: `Basic ${btoa(`${config.lokiUser}:${config.lokiToken}`)}`,
124
194
  },
125
195
  body: JSON.stringify(lokiMessage),
126
- })
127
- .then((r) => {
128
- if (!r.ok) {
129
- throw new Error(r.statusText);
130
- }
131
- })
132
- .catch((e) => {
133
- console.error("Error:", e);
134
196
  });
197
+ if (!response.ok) {
198
+ throw new Error(`Loki push failed: ${response.status} ${response.statusText}`);
199
+ }
135
200
  });
136
201
  }
137
202
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -76,62 +76,129 @@ Date.now = vitest_1.vi.fn(() => 1482363367071);
76
76
  },
77
77
  body: `{"streams":[{"stream":{"level":"${method}","hoge":"huga"},"values":[["1482363367071000000","{\\"test\\":\\"message\\"}"]]}]}`,
78
78
  });
79
- // Reset the spy
80
79
  consoleSpy.mockRestore();
81
80
  }));
82
81
  });
83
- (0, vitest_1.describe)("New Features", () => {
84
- (0, vitest_1.it)("should support string messages", () => __awaiter(void 0, void 0, void 0, function* () {
85
- const logger = (0, logger_1.getLokiLogger)(mockConfig);
86
- const message = "string message";
87
- const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
88
- yield logger.info(message);
89
- (0, vitest_1.expect)(consoleSpy).toHaveBeenCalledWith(JSON.stringify({ message }));
90
- (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
91
- body: vitest_1.expect.stringContaining(JSON.stringify({ message }).replace(/"/g, '\\"')),
92
- }));
93
- consoleSpy.mockRestore();
82
+ });
83
+ (0, vitest_1.describe)("Advanced Features", () => {
84
+ const mockConfig = {
85
+ lokiHost: "testhost",
86
+ lokiToken: "token123",
87
+ lokiUser: "user",
88
+ };
89
+ (0, vitest_1.beforeEach)(() => {
90
+ vitest_1.vi.clearAllMocks();
91
+ });
92
+ (0, vitest_1.it)("should support zero config from env", () => __awaiter(void 0, void 0, void 0, function* () {
93
+ // Mock environment variables
94
+ process.env.LOKI_HOST = "env-host";
95
+ process.env.LOKI_TOKEN = "env-token";
96
+ process.env.LOKI_USER = "env-user";
97
+ const logger = (0, logger_1.getLokiLogger)();
98
+ yield logger.info({ msg: "test" });
99
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.stringContaining("env-host"), vitest_1.expect.objectContaining({
100
+ headers: vitest_1.expect.objectContaining({
101
+ Authorization: `Basic ${btoa("env-user:env-token")}`,
102
+ }),
94
103
  }));
95
- (0, vitest_1.it)("should apply default labels", () => __awaiter(void 0, void 0, void 0, function* () {
96
- const configWithLabels = Object.assign(Object.assign({}, mockConfig), { defaultLabels: { env: "prod", app: "test" } });
97
- const logger = (0, logger_1.getLokiLogger)(configWithLabels);
98
- const mockMessage = { test: "message" };
99
- const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
100
- yield logger.info(mockMessage);
101
- (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
102
- body: vitest_1.expect.stringContaining('"env":"prod"'),
103
- }));
104
- (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
105
- body: vitest_1.expect.stringContaining('"app":"test"'),
106
- }));
107
- consoleSpy.mockRestore();
104
+ // Cleanup
105
+ delete process.env.LOKI_HOST;
106
+ delete process.env.LOKI_TOKEN;
107
+ delete process.env.LOKI_USER;
108
+ }));
109
+ (0, vitest_1.it)("should not send when silent: true", () => __awaiter(void 0, void 0, void 0, function* () {
110
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { silent: true }));
111
+ yield logger.info({ msg: "test" });
112
+ (0, vitest_1.expect)(fetch).not.toHaveBeenCalled();
113
+ }));
114
+ (0, vitest_1.it)("should retry on failure", () => __awaiter(void 0, void 0, void 0, function* () {
115
+ let callCount = 0;
116
+ global.fetch = vitest_1.vi.fn(() => __awaiter(void 0, void 0, void 0, function* () {
117
+ callCount++;
118
+ if (callCount < 3) {
119
+ return { ok: false, status: 500, statusText: "Error" };
120
+ }
121
+ return { ok: true };
108
122
  }));
109
- (0, vitest_1.it)("should respect minLevel", () => __awaiter(void 0, void 0, void 0, function* () {
110
- const configWithMinLevel = Object.assign(Object.assign({}, mockConfig), { minLevel: "warn" });
111
- const logger = (0, logger_1.getLokiLogger)(configWithMinLevel);
112
- const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
113
- yield logger.debug({ msg: "debug" });
114
- yield logger.info({ msg: "info" });
115
- (0, vitest_1.expect)(fetch).not.toHaveBeenCalled();
116
- yield logger.warn({ msg: "warn" });
117
- (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(1);
118
- yield logger.error({ msg: "error" });
119
- (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(2);
120
- consoleSpy.mockRestore();
123
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { retries: 3 }));
124
+ yield logger.info({ msg: "test" });
125
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(3);
126
+ }));
127
+ (0, vitest_1.it)("should call onSendError after retries fail", () => __awaiter(void 0, void 0, void 0, function* () {
128
+ global.fetch = vitest_1.vi.fn(() => __awaiter(void 0, void 0, void 0, function* () {
129
+ return ({
130
+ ok: false,
131
+ status: 500,
132
+ statusText: "Fatal",
133
+ });
121
134
  }));
122
- (0, vitest_1.it)("should use ctx.waitUntil when provided", () => __awaiter(void 0, void 0, void 0, function* () {
123
- const logger = (0, logger_1.getLokiLogger)(mockConfig);
124
- const mockCtx = {
125
- waitUntil: vitest_1.vi.fn(),
126
- };
127
- const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
128
- yield logger.info({ msg: "test" }, {}, mockCtx);
129
- (0, vitest_1.expect)(mockCtx.waitUntil).toHaveBeenCalled();
130
- // In case of waitUntil, the logger shouldn't await the fetch promise internally
131
- // but we can't easily check that without complex mocking.
132
- // At least we verify waitUntil was called.
133
- consoleSpy.mockRestore();
135
+ const onSendError = vitest_1.vi.fn();
136
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { retries: 1, onSendError }));
137
+ yield logger.info({ msg: "test" });
138
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(2);
139
+ (0, vitest_1.expect)(onSendError).toHaveBeenCalled();
140
+ }));
141
+ (0, vitest_1.it)("should support custom format", () => __awaiter(void 0, void 0, void 0, function* () {
142
+ const format = vitest_1.vi.fn((_level, _msg, _labels) => ({
143
+ streams: [
144
+ {
145
+ stream: { custom: "label" },
146
+ values: [["123456", "custom-body"]],
147
+ },
148
+ ],
134
149
  }));
135
- });
150
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { format: format }));
151
+ yield logger.info({ msg: "test" });
152
+ const fetchMock = fetch;
153
+ const _body = JSON.parse(fetchMock.mock.calls[0][1].body);
154
+ (0, vitest_1.expect)(format).toHaveBeenCalled();
155
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
156
+ body: vitest_1.expect.stringContaining("custom-body"),
157
+ }));
158
+ }));
159
+ (0, vitest_1.it)("should add labels from cf properties", () => __awaiter(void 0, void 0, void 0, function* () {
160
+ const cf = {
161
+ colo: "KIX",
162
+ country: "JP",
163
+ city: "Osaka",
164
+ asn: 12345,
165
+ };
166
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { cf }));
167
+ yield logger.info({ msg: "test" });
168
+ const fetchMock = fetch;
169
+ const body = JSON.parse(fetchMock.mock.calls[0][1].body);
170
+ const stream = body.streams[0].stream;
171
+ (0, vitest_1.expect)(stream.cf_colo).toBe("KIX");
172
+ (0, vitest_1.expect)(stream.cf_country).toBe("JP");
173
+ (0, vitest_1.expect)(stream.cf_city).toBe("Osaka");
174
+ (0, vitest_1.expect)(stream.cf_asn).toBe("12345");
175
+ }));
176
+ });
177
+ (0, vitest_1.describe)("Cloudflare Workers context", () => {
178
+ const mockConfig = {
179
+ lokiHost: "testhost",
180
+ lokiToken: "token123",
181
+ lokiUser: "user",
182
+ };
183
+ (0, vitest_1.it)("should use ctx from getLokiLogger", () => __awaiter(void 0, void 0, void 0, function* () {
184
+ const ctx = {
185
+ waitUntil: vitest_1.vi.fn(),
186
+ };
187
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { ctx }));
188
+ yield logger.info("test");
189
+ (0, vitest_1.expect)(ctx.waitUntil).toHaveBeenCalled();
190
+ }));
191
+ (0, vitest_1.it)("should use ctx from method call even if getLokiLogger has one", () => __awaiter(void 0, void 0, void 0, function* () {
192
+ const ctx1 = {
193
+ waitUntil: vitest_1.vi.fn(),
194
+ };
195
+ const ctx2 = {
196
+ waitUntil: vitest_1.vi.fn(),
197
+ };
198
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { ctx: ctx1 }));
199
+ yield logger.info("test", {}, ctx2);
200
+ (0, vitest_1.expect)(ctx2.waitUntil).toHaveBeenCalled();
201
+ (0, vitest_1.expect)(ctx1.waitUntil).not.toHaveBeenCalled();
202
+ }));
136
203
  });
137
204
  //# sourceMappingURL=logger.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mCAA8D;AAC9D,qCAAyC,CAAC,sCAAsC;AAEhF,MAAM,CAAC,KAAK,GAAG,WAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CACzB,OAAO,CAAC,OAAO,CAAC;IACf,EAAE,EAAE,IAAI;CACI,CAAC,CACa,CAAC;AAE7B,IAAI,CAAC,GAAG,GAAG,WAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;AAEtC,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;IAC5B,MAAM,UAAU,GAAG;QAClB,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,MAAM;KAChB,CAAC;IAEF,IAAA,mBAAU,EAAC,GAAG,EAAE;QACf,WAAE,CAAC,aAAa,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,EAAE;QAChC,WAAE,CAAC,IAAI,CAAC;YACP,MAAM;YACN,MAAM;YACN,OAAO;YACP,OAAO;SACP,CAAC,CAAC,+BAA+B,EAAE,CAAO,MAAM,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,MAA6B,CAAC,CAAC,WAAW,CAAC,CAAC;YAEzD,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YACrE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACvC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,mCAAmC,EAAE;gBACvE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,SAAS,IAAI,CAAC,eAAe,CAAC,EAAE;iBAC/C;gBACD,IAAI,EAAE,mCAAmC,MAAM,uEAAuE;aACtH,CAAC,CAAC;YAEH,gBAAgB;YAChB,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC,CAAA,CAAC,CAAC;QAEH,WAAE,CAAC,IAAI,CAAC;YACP,MAAM;YACN,MAAM;YACN,OAAO;YACP,OAAO;SACP,CAAC,CAAC,gDAAgD,EAAE,CAAO,MAAM,EAAE,EAAE;YACrE,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,MAA6B,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAErE,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YACrE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACvC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,mCAAmC,EAAE;gBACvE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,SAAS,IAAI,CAAC,eAAe,CAAC,EAAE;iBAC/C;gBACD,IAAI,EAAE,mCAAmC,MAAM,qFAAqF;aACpI,CAAC,CAAC;YAEH,gBAAgB;YAChB,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC,CAAA,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;QAC7B,IAAA,WAAE,EAAC,gCAAgC,EAAE,GAAS,EAAE;YAC/C,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC;YACjC,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE3B,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YACrE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,oBAAoB,CACjC,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAClB,eAAM,CAAC,gBAAgB,CAAC;gBACvB,IAAI,EAAE,eAAM,CAAC,gBAAgB,CAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAChD;aACD,CAAC,CACF,CAAC;YAEF,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC,CAAA,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAS,EAAE;YAC5C,MAAM,gBAAgB,mCAClB,UAAU,KACb,aAAa,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAC3C,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,gBAAgB,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/B,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,oBAAoB,CACjC,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAClB,eAAM,CAAC,gBAAgB,CAAC;gBACvB,IAAI,EAAE,eAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;aAC7C,CAAC,CACF,CAAC;YACF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,oBAAoB,CACjC,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAClB,eAAM,CAAC,gBAAgB,CAAC;gBACvB,IAAI,EAAE,eAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;aAC7C,CAAC,CACF,CAAC;YAEF,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC,CAAA,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,yBAAyB,EAAE,GAAS,EAAE;YACxC,MAAM,kBAAkB,mCACpB,UAAU,KACb,QAAQ,EAAE,MAAe,GACzB,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,kBAAkB,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;YACrC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACnC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAErC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACnC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;YACrC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAEvC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC,CAAA,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAS,EAAE;YACvD,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG;gBACf,SAAS,EAAE,WAAE,CAAC,EAAE,EAAE;aAClB,CAAC;YACF,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAEhD,IAAA,eAAM,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC7C,gFAAgF;YAChF,0DAA0D;YAC1D,2CAA2C;YAE3C,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC,CAAA,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miketako3/cloki",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "cloki is zero dependency and simple logger library for Loki and Cloudflare Workers.",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -13,7 +13,8 @@
13
13
  "build": "tsc",
14
14
  "format": "bunx @biomejs/biome check . --write",
15
15
  "lint": "bunx @biomejs/biome check .",
16
- "test": "vitest run"
16
+ "test": "vitest run",
17
+ "typecheck": "tsc --noEmit"
17
18
  },
18
19
  "repository": {
19
20
  "type": "git",