UNPKG

11.1 kBJavaScriptView Raw
1"use strict";
2/* eslint-disable max-nested-callbacks */
3/* eslint-disable ava/use-test */
4var __importDefault = (this && this.__importDefault) || function (mod) {
5 return (mod && mod.__esModule) ? mod : { "default": mod };
6};
7Object.defineProperty(exports, "__esModule", { value: true });
8const ava_1 = require("ava");
9const delay_1 = __importDefault(require("delay"));
10const globalthis_1 = __importDefault(require("globalthis"));
11const createLogger_1 = require("../../src/factories/createLogger");
12const createRoarrInitialGlobalState_1 = require("../../src/factories/createRoarrInitialGlobalState");
13const time = -1;
14const version = '2.0.0';
15(0, ava_1.beforeEach)(() => {
16 const globalThis = (0, globalthis_1.default)();
17 globalThis.ROARR = null;
18 globalThis.ROARR = (0, createRoarrInitialGlobalState_1.createRoarrInitialGlobalState)({});
19});
20const createLoggerWithHistory = () => {
21 const messages = [];
22 const log = (0, createLogger_1.createLogger)((message) => {
23 messages.push({
24 ...message,
25 time,
26 });
27 });
28 log.messages = messages;
29 return log;
30};
31(0, ava_1.serial)('warns if async_hooks are unavailable', async (t) => {
32 const firstLog = createLoggerWithHistory();
33 const log = firstLog.child({
34 // Ensure that we are not adding context to the internal warning.
35 foo: 'bar',
36 });
37 globalThis.ROARR.asyncLocalStorage = null;
38 await log.adopt(
39 // eslint-disable-next-line @typescript-eslint/no-empty-function
40 () => { });
41 // Ensure that we log only once.
42 await log.adopt(
43 // eslint-disable-next-line @typescript-eslint/no-empty-function
44 () => { });
45 t.deepEqual(firstLog.messages, [
46 {
47 context: {
48 logLevel: 40,
49 package: 'roarr',
50 },
51 message: 'async_hooks are unavailable; Roarr.adopt will not function as expected',
52 sequence: '0',
53 time,
54 version,
55 },
56 ]);
57});
58(0, ava_1.serial)('inherits context from async local scope', async (t) => {
59 t.plan(1);
60 const log = createLoggerWithHistory();
61 await log.adopt(() => {
62 t.deepEqual(log.getContext(), {
63 bar: 'bar',
64 });
65 log('foo');
66 }, {
67 bar: 'bar',
68 });
69});
70(0, ava_1.serial)('inherits context from parent async local scope', async (t) => {
71 t.plan(2);
72 const log = createLoggerWithHistory();
73 await log.adopt(async () => {
74 t.deepEqual(log.getContext(), {
75 bar: 'bar 0',
76 }, 'first-level');
77 log('foo 0');
78 await log.adopt(() => {
79 t.deepEqual(log.getContext(), {
80 bar: 'bar 0',
81 baz: 'baz 1',
82 }, 'second-level');
83 log('foo 1');
84 }, {
85 baz: 'baz 1',
86 });
87 }, {
88 bar: 'bar 0',
89 });
90});
91(0, ava_1.serial)('inherits message transformer from async local scope', async (t) => {
92 const log = createLoggerWithHistory();
93 await log.adopt(() => {
94 log('foo');
95 }, (message) => {
96 return {
97 ...message,
98 context: {
99 bar: 'bar',
100 ...message.context,
101 },
102 };
103 });
104 t.deepEqual(log.messages, [
105 {
106 context: {
107 bar: 'bar',
108 },
109 message: 'foo',
110 sequence: '0.0',
111 time,
112 version,
113 },
114 ]);
115});
116(0, ava_1.serial)('inherits message transformer from parent async local scope', async (t) => {
117 const log = createLoggerWithHistory();
118 await log.adopt(async () => {
119 log('foo 0');
120 await log.adopt(() => {
121 log('foo 1');
122 }, (message) => {
123 return {
124 ...message,
125 context: {
126 baz: 'baz',
127 ...message.context,
128 },
129 };
130 });
131 }, (message) => {
132 return {
133 ...message,
134 context: {
135 bar: 'bar',
136 ...message.context,
137 },
138 };
139 });
140 t.deepEqual(log.messages, [
141 {
142 context: {
143 bar: 'bar',
144 },
145 message: 'foo 0',
146 sequence: '0.0',
147 time,
148 version,
149 },
150 {
151 context: {
152 bar: 'bar',
153 baz: 'baz',
154 },
155 message: 'foo 1',
156 sequence: '0.1.0',
157 time,
158 version,
159 },
160 ]);
161});
162(0, ava_1.serial)('top-level adopt increments global sequence', async (t) => {
163 const log = createLoggerWithHistory();
164 void log.adopt(() => {
165 log('foo');
166 });
167 void log.adopt(() => {
168 log('bar');
169 });
170 t.deepEqual(log.messages, [
171 {
172 context: {},
173 message: 'foo',
174 sequence: '0.0',
175 time,
176 version,
177 },
178 {
179 context: {},
180 message: 'bar',
181 sequence: '1.0',
182 time,
183 version,
184 },
185 ]);
186});
187(0, ava_1.serial)('top-level adopt increments global sequence (async)', async (t) => {
188 const log = createLoggerWithHistory();
189 void log.adopt(async () => {
190 log('foo');
191 });
192 void log.adopt(async () => {
193 log('bar');
194 });
195 t.deepEqual(log.messages, [
196 {
197 context: {},
198 message: 'foo',
199 sequence: '0.0',
200 time,
201 version,
202 },
203 {
204 context: {},
205 message: 'bar',
206 sequence: '1.0',
207 time,
208 version,
209 },
210 ]);
211});
212(0, ava_1.serial)('logs within adopt increment local sequence', async (t) => {
213 const log = createLoggerWithHistory();
214 void log.adopt(() => {
215 log('foo');
216 log('bar');
217 });
218 void log.adopt(() => {
219 log('baz');
220 log('qux');
221 });
222 t.deepEqual(log.messages, [
223 {
224 context: {},
225 message: 'foo',
226 sequence: '0.0',
227 time,
228 version,
229 },
230 {
231 context: {},
232 message: 'bar',
233 sequence: '0.1',
234 time,
235 version,
236 },
237 {
238 context: {},
239 message: 'baz',
240 sequence: '1.0',
241 time,
242 version,
243 },
244 {
245 context: {},
246 message: 'qux',
247 sequence: '1.1',
248 time,
249 version,
250 },
251 ]);
252});
253(0, ava_1.serial)('logs within adopt increment local sequence (async)', async (t) => {
254 const log = createLoggerWithHistory();
255 void log.adopt(async () => {
256 log('foo');
257 log('bar');
258 });
259 void log.adopt(async () => {
260 log('baz');
261 log('qux');
262 });
263 t.deepEqual(log.messages, [
264 {
265 context: {},
266 message: 'foo',
267 sequence: '0.0',
268 time,
269 version,
270 },
271 {
272 context: {},
273 message: 'bar',
274 sequence: '0.1',
275 time,
276 version,
277 },
278 {
279 context: {},
280 message: 'baz',
281 sequence: '1.0',
282 time,
283 version,
284 },
285 {
286 context: {},
287 message: 'qux',
288 sequence: '1.1',
289 time,
290 version,
291 },
292 ]);
293});
294(0, ava_1.serial)('nested adopt increment local sequence', async (t) => {
295 const log = createLoggerWithHistory();
296 void log.adopt(() => {
297 log('foo');
298 void log.adopt(() => {
299 log('bar');
300 });
301 });
302 t.deepEqual(log.messages, [
303 {
304 context: {},
305 message: 'foo',
306 sequence: '0.0',
307 time,
308 version,
309 },
310 {
311 context: {},
312 message: 'bar',
313 sequence: '0.1.0',
314 time,
315 version,
316 },
317 ]);
318});
319(0, ava_1.serial)('nested adopt increment local sequence (async)', async (t) => {
320 const log = createLoggerWithHistory();
321 void log.adopt(async () => {
322 log('foo');
323 await log.adopt(async () => {
324 log('bar');
325 });
326 });
327 t.deepEqual(log.messages, [
328 {
329 context: {},
330 message: 'foo',
331 sequence: '0.0',
332 time,
333 version,
334 },
335 {
336 context: {},
337 message: 'bar',
338 sequence: '0.1.0',
339 time,
340 version,
341 },
342 ]);
343});
344(0, ava_1.serial)('adopted scope maintains reference to local sequence', async (t) => {
345 const log = createLoggerWithHistory();
346 void log.adopt(() => {
347 log('foo');
348 void log.adopt(() => {
349 log('bar 0');
350 log('bar 1');
351 log('bar 2');
352 });
353 log('baz');
354 });
355 t.deepEqual(log.messages, [
356 {
357 context: {},
358 message: 'foo',
359 sequence: '0.0',
360 time,
361 version,
362 },
363 {
364 context: {},
365 message: 'bar 0',
366 sequence: '0.1.0',
367 time,
368 version,
369 },
370 {
371 context: {},
372 message: 'bar 1',
373 sequence: '0.1.1',
374 time,
375 version,
376 },
377 {
378 context: {},
379 message: 'bar 2',
380 sequence: '0.1.2',
381 time,
382 version,
383 },
384 {
385 context: {},
386 message: 'baz',
387 sequence: '0.2',
388 time,
389 version,
390 },
391 ]);
392});
393(0, ava_1.serial)('maintains correct local reference in an async scope', async (t) => {
394 const log = createLoggerWithHistory();
395 void log.adopt(() => {
396 log('foo 0');
397 void log.adopt(() => {
398 log('bar 0');
399 void log.adopt(() => {
400 log('baz 0');
401 setTimeout(() => {
402 log('baz 1');
403 }, 10);
404 });
405 log('bar 1');
406 });
407 });
408 await (0, delay_1.default)(20);
409 t.deepEqual(log.messages, [
410 {
411 context: {},
412 message: 'foo 0',
413 sequence: '0.0',
414 time: -1,
415 version: '2.0.0',
416 },
417 {
418 context: {},
419 message: 'bar 0',
420 sequence: '0.1.0',
421 time: -1,
422 version: '2.0.0',
423 },
424 {
425 context: {},
426 message: 'baz 0',
427 sequence: '0.1.1.0',
428 time: -1,
429 version: '2.0.0',
430 },
431 {
432 context: {},
433 message: 'bar 1',
434 sequence: '0.1.2',
435 time: -1,
436 version: '2.0.0',
437 },
438 {
439 context: {},
440 message: 'baz 1',
441 sequence: '0.1.1.1',
442 time: -1,
443 version: '2.0.0',
444 },
445 ]);
446});