UNPKG

11.7 kBJavaScriptView Raw
1"use strict";
2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3 if (k2 === undefined) k2 = k;
4 var desc = Object.getOwnPropertyDescriptor(m, k);
5 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6 desc = { enumerable: true, get: function() { return m[k]; } };
7 }
8 Object.defineProperty(o, k2, desc);
9}) : (function(o, m, k, k2) {
10 if (k2 === undefined) k2 = k;
11 o[k2] = m[k];
12}));
13var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14 Object.defineProperty(o, "default", { enumerable: true, value: v });
15}) : function(o, v) {
16 o["default"] = v;
17});
18var __importStar = (this && this.__importStar) || function (mod) {
19 if (mod && mod.__esModule) return mod;
20 var result = {};
21 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22 __setModuleDefault(result, mod);
23 return result;
24};
25var __importDefault = (this && this.__importDefault) || function (mod) {
26 return (mod && mod.__esModule) ? mod : { "default": mod };
27};
28Object.defineProperty(exports, "__esModule", { value: true });
29const ava_1 = __importStar(require("ava"));
30const globalthis_1 = __importDefault(require("globalthis"));
31const createLogger_1 = require("../../src/factories/createLogger");
32const createRoarrInitialGlobalState_1 = require("../../src/factories/createRoarrInitialGlobalState");
33const time = -1;
34const version = '2.0.0';
35(0, ava_1.beforeEach)(() => {
36 const globalThis = (0, globalthis_1.default)();
37 globalThis.ROARR = (0, createRoarrInitialGlobalState_1.createRoarrInitialGlobalState)({});
38});
39const createLoggerWithHistory = () => {
40 const messages = [];
41 const log = (0, createLogger_1.createLogger)((message) => {
42 messages.push({
43 ...message,
44 time,
45 });
46 });
47 log.messages = messages;
48 return log;
49};
50(0, ava_1.default)('creates a simple message', (t) => {
51 const log = createLoggerWithHistory();
52 log('foo');
53 t.deepEqual(log.messages, [
54 {
55 context: {},
56 message: 'foo',
57 sequence: '0',
58 time,
59 version,
60 },
61 ]);
62});
63(0, ava_1.default)('logs an empty message when first parameter is an object and the second parameter is undefined', (t) => {
64 const log = createLoggerWithHistory();
65 // @ts-expect-error Invalid invocation
66 log({});
67 t.deepEqual(log.messages, [
68 {
69 context: {},
70 message: '',
71 sequence: '0',
72 time,
73 version,
74 },
75 ]);
76});
77(0, ava_1.default)('throws in case of invalid invocation', (t) => {
78 const log = createLoggerWithHistory();
79 t.throws(() => {
80 // @ts-expect-error Invalid invocation
81 log({}, {});
82 }, {
83 message: 'Message must be a string. Received object.',
84 });
85});
86(0, ava_1.default)('throws in case of invalid invocation (2)', (t) => {
87 const log = createLoggerWithHistory();
88 t.throws(() => {
89 // @ts-expect-error Invalid invocation
90 log('test', 123);
91 });
92});
93(0, ava_1.default)('formats message using sprintf', (t) => {
94 const log = createLoggerWithHistory();
95 log('foo %s', 'bar');
96 t.deepEqual(log.messages, [
97 {
98 context: {},
99 message: 'foo bar',
100 sequence: '0',
101 time,
102 version,
103 },
104 ]);
105});
106(0, ava_1.default)('formats message using sprintf (multiple variables)', (t) => {
107 const log = createLoggerWithHistory();
108 log('foo %s %s %s', 'bar', 'baz', 'qux');
109 t.deepEqual(log.messages, [
110 {
111 context: {},
112 message: 'foo bar baz qux',
113 sequence: '0',
114 time,
115 version,
116 },
117 ]);
118});
119(0, ava_1.default)('formats message using sprintf (digit variables)', (t) => {
120 const log = createLoggerWithHistory();
121 log('foo %d %d %d', '1', '2', '3');
122 t.deepEqual(log.messages, [
123 {
124 context: {},
125 message: 'foo 1 2 3',
126 sequence: '0',
127 time,
128 version,
129 },
130 ]);
131});
132(0, ava_1.default)('creates message with a context', (t) => {
133 const log = createLoggerWithHistory();
134 log({
135 foo: 'bar',
136 }, 'baz');
137 t.deepEqual(log.messages, [
138 {
139 context: {
140 foo: 'bar',
141 },
142 message: 'baz',
143 sequence: '0',
144 time,
145 version,
146 },
147 ]);
148});
149(0, ava_1.default)('formats message using sprintf (with context)', (t) => {
150 const log = createLoggerWithHistory();
151 log({
152 foo: 'bar',
153 }, 'baz %s', 'qux');
154 t.deepEqual(log.messages, [
155 {
156 context: {
157 foo: 'bar',
158 },
159 message: 'baz qux',
160 sequence: '0',
161 time,
162 version,
163 },
164 ]);
165});
166(0, ava_1.default)('creates logger with a context', (t) => {
167 const log = createLoggerWithHistory();
168 log.child({ foo: 'bar' })('baz');
169 t.deepEqual(log.messages, [
170 {
171 context: {
172 foo: 'bar',
173 },
174 message: 'baz',
175 sequence: '0',
176 time,
177 version,
178 },
179 ]);
180});
181(0, ava_1.default)('prepends context to the message context', (t) => {
182 const log = createLoggerWithHistory();
183 log.child({ foo: 'bar' })({ baz: 'qux' }, 'quux');
184 t.deepEqual(log.messages, [
185 {
186 context: {
187 baz: 'qux',
188 foo: 'bar',
189 },
190 message: 'quux',
191 sequence: '0',
192 time,
193 version,
194 },
195 ]);
196});
197(0, ava_1.default)('prepends context to the message context (is overridden)', (t) => {
198 const log = createLoggerWithHistory();
199 log.child({ foo: 'bar 0' })({ foo: 'bar 1' }, 'quux');
200 t.deepEqual(log.messages, [
201 {
202 context: {
203 foo: 'bar 1',
204 },
205 message: 'quux',
206 sequence: '0',
207 time,
208 version,
209 },
210 ]);
211});
212(0, ava_1.default)('appends context to the previous child context', (t) => {
213 const log = createLoggerWithHistory();
214 log.child({ foo: 'bar' }).child({ baz: 'qux' })('quux');
215 t.deepEqual(log.messages, [
216 {
217 context: {
218 baz: 'qux',
219 foo: 'bar',
220 },
221 message: 'quux',
222 sequence: '0',
223 time,
224 version,
225 },
226 ]);
227});
228(0, ava_1.default)('appends context to the previous child context (overrides)', (t) => {
229 const log = createLoggerWithHistory();
230 log.child({ foo: 'bar 0' }).child({ foo: 'bar 1' })('qux');
231 t.deepEqual(log.messages, [
232 {
233 context: {
234 foo: 'bar 1',
235 },
236 message: 'qux',
237 sequence: '0',
238 time,
239 version,
240 },
241 ]);
242});
243(0, ava_1.default)('translates child message', (t) => {
244 const log = createLoggerWithHistory();
245 log
246 .child((message) => {
247 return {
248 ...message,
249 message: message.message + 'bar',
250 };
251 })('foo');
252 t.deepEqual(log.messages, [
253 {
254 context: {},
255 message: 'foobar',
256 sequence: '0',
257 time,
258 version,
259 },
260 ]);
261});
262(0, ava_1.default)('serializes context using a transformer', (t) => {
263 const log = createLoggerWithHistory();
264 const log1 = log.child((message) => {
265 if (!message.context.error1) {
266 return message;
267 }
268 return {
269 ...message,
270 context: {
271 ...message.context,
272 error1: 'log1 error',
273 },
274 };
275 });
276 log1.error({
277 error1: new Error('foo'),
278 }, 'log1');
279 // @ts-expect-error error2 is not allowed
280 log1.error({
281 error2: new Error('foo'),
282 }, 'log1');
283 const log2 = log1.child((message) => {
284 return {
285 ...message,
286 context: {
287 ...message.context,
288 error2: 'log2 error',
289 },
290 };
291 });
292 log2.error({
293 error1: new Error('foo'),
294 error2: new Error('foo'),
295 }, 'log2');
296 // @ts-expect-error error2 is not allowed
297 log2.error({
298 error3: new Error('foo'),
299 }, 'log2');
300 t.like(log.messages[0], {
301 context: {
302 error1: 'log1 error',
303 },
304 message: 'log1',
305 });
306 t.like(log.messages[1], {
307 context: {
308 error2: new Error('foo'),
309 },
310 message: 'log1',
311 });
312 t.like(log.messages[2], {
313 context: {
314 error1: 'log1 error',
315 error2: 'log2 error',
316 },
317 message: 'log2',
318 });
319 t.like(log.messages[3], {
320 context: {
321 error3: new Error('foo'),
322 },
323 message: 'log2',
324 });
325});
326(0, ava_1.default)('does not allow to extend context without a transformer', (t) => {
327 const log = createLoggerWithHistory();
328 // @ts-expect-error cannot type child without a translator
329 log.child({});
330 log.child({});
331 t.true(true);
332});
333(0, ava_1.default)('throws an error if child does not return an object', (t) => {
334 const log = createLoggerWithHistory();
335 t.throws(() => {
336 log
337 // @ts-expect-error result must be an object
338 .child(() => {
339 return '';
340 })('foo');
341 }, {
342 message: 'Message transform function must return a message object.',
343 });
344});
345(0, ava_1.default)('convenience methods trace, debug, info, warn, error and fatal prepend a logLevel property', (t) => {
346 const log = createLoggerWithHistory();
347 log.trace('foo 0');
348 log.debug('foo 1');
349 log.info('foo 2');
350 log.warn('foo 3');
351 log.error('foo 4');
352 log.fatal('foo 5');
353 t.deepEqual(log.messages, [
354 {
355 context: {
356 logLevel: 10,
357 },
358 message: 'foo 0',
359 sequence: '0',
360 time,
361 version,
362 },
363 {
364 context: {
365 logLevel: 20,
366 },
367 message: 'foo 1',
368 sequence: '1',
369 time,
370 version,
371 },
372 {
373 context: {
374 logLevel: 30,
375 },
376 message: 'foo 2',
377 sequence: '2',
378 time,
379 version,
380 },
381 {
382 context: {
383 logLevel: 40,
384 },
385 message: 'foo 3',
386 sequence: '3',
387 time,
388 version,
389 },
390 {
391 context: {
392 logLevel: 50,
393 },
394 message: 'foo 4',
395 sequence: '4',
396 time,
397 version,
398 },
399 {
400 context: {
401 logLevel: 60,
402 },
403 message: 'foo 5',
404 sequence: '5',
405 time,
406 version,
407 },
408 ]);
409});
410(0, ava_1.default)('does not produce an error when message contains % without an associated parameter', (t) => {
411 const log = createLoggerWithHistory();
412 log.trace('http://commons.wikimedia.org/wiki/Special:FilePath/Cucumis%20anguria.JPG');
413 t.deepEqual(log.messages, [
414 {
415 context: {
416 logLevel: 10,
417 },
418 message: 'http://commons.wikimedia.org/wiki/Special:FilePath/Cucumis%20anguria.JPG',
419 sequence: '0',
420 time,
421 version,
422 },
423 ]);
424});