tailwind-widgets 5.1.3

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.
Files changed (166) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +113 -0
  3. package/bin.js +6 -0
  4. package/bingo-logger.js +211 -0
  5. package/browser.js +358 -0
  6. package/docs/api.md +1352 -0
  7. package/docs/asynchronous.md +102 -0
  8. package/docs/benchmarks.md +58 -0
  9. package/docs/browser.md +199 -0
  10. package/docs/bundling.md +34 -0
  11. package/docs/child-loggers.md +95 -0
  12. package/docs/ecosystem.md +74 -0
  13. package/docs/help.md +305 -0
  14. package/docs/lts.md +62 -0
  15. package/docs/pretty.md +101 -0
  16. package/docs/redaction.md +135 -0
  17. package/docs/transports.md +792 -0
  18. package/docs/web.md +257 -0
  19. package/file.js +12 -0
  20. package/lib/caller.js +30 -0
  21. package/lib/deprecations.js +10 -0
  22. package/lib/levels.js +193 -0
  23. package/lib/meta.js +5 -0
  24. package/lib/multistream.js +156 -0
  25. package/lib/parse.js +14 -0
  26. package/lib/proto.js +216 -0
  27. package/lib/redaction.js +118 -0
  28. package/lib/symbols.js +70 -0
  29. package/lib/time.js +11 -0
  30. package/lib/tools.js +563 -0
  31. package/lib/transport-stream.js +47 -0
  32. package/lib/transport.js +157 -0
  33. package/lib/worker-pipeline.js +40 -0
  34. package/lib/worker.js +54 -0
  35. package/package.json +131 -0
  36. package/test/basic.test.js +719 -0
  37. package/test/broken-pipe.test.js +42 -0
  38. package/test/browser-levels.test.js +218 -0
  39. package/test/browser-serializers.test.js +354 -0
  40. package/test/browser-timestamp.test.js +88 -0
  41. package/test/browser-transmit.test.js +349 -0
  42. package/test/browser.test.js +547 -0
  43. package/test/complex-objects.test.js +34 -0
  44. package/test/crlf.test.js +32 -0
  45. package/test/custom-levels.test.js +294 -0
  46. package/test/error.test.js +374 -0
  47. package/test/escaping.test.js +91 -0
  48. package/test/esm/esm.mjs +12 -0
  49. package/test/esm/index.test.js +34 -0
  50. package/test/esm/named-exports.mjs +28 -0
  51. package/test/exit.test.js +85 -0
  52. package/test/final.test.js +237 -0
  53. package/test/fixtures/broken-pipe/basic.js +9 -0
  54. package/test/fixtures/broken-pipe/destination.js +10 -0
  55. package/test/fixtures/broken-pipe/syncfalse.js +12 -0
  56. package/test/fixtures/console-transport.js +13 -0
  57. package/test/fixtures/default-exit.js +8 -0
  58. package/test/fixtures/destination-exit.js +8 -0
  59. package/test/fixtures/eval/index.js +29 -0
  60. package/test/fixtures/eval/node_modules/14-files.js +3 -0
  61. package/test/fixtures/eval/node_modules/2-files.js +3 -0
  62. package/test/fixtures/eval/node_modules/file1.js +5 -0
  63. package/test/fixtures/eval/node_modules/file10.js +5 -0
  64. package/test/fixtures/eval/node_modules/file11.js +5 -0
  65. package/test/fixtures/eval/node_modules/file12.js +5 -0
  66. package/test/fixtures/eval/node_modules/file13.js +5 -0
  67. package/test/fixtures/eval/node_modules/file14.js +11 -0
  68. package/test/fixtures/eval/node_modules/file15.js +10 -0
  69. package/test/fixtures/eval/node_modules/file2.js +5 -0
  70. package/test/fixtures/eval/node_modules/file3.js +5 -0
  71. package/test/fixtures/eval/node_modules/file4.js +5 -0
  72. package/test/fixtures/eval/node_modules/file5.js +5 -0
  73. package/test/fixtures/eval/node_modules/file6.js +5 -0
  74. package/test/fixtures/eval/node_modules/file7.js +5 -0
  75. package/test/fixtures/eval/node_modules/file8.js +5 -0
  76. package/test/fixtures/eval/node_modules/file9.js +5 -0
  77. package/test/fixtures/eval/node_modules/test.list +3 -0
  78. package/test/fixtures/pretty/basic.js +6 -0
  79. package/test/fixtures/pretty/child-with-serializer.js +17 -0
  80. package/test/fixtures/pretty/child-with-updated-chindings.js +8 -0
  81. package/test/fixtures/pretty/child.js +8 -0
  82. package/test/fixtures/pretty/custom-time-label.js +9 -0
  83. package/test/fixtures/pretty/custom-time.js +9 -0
  84. package/test/fixtures/pretty/dateformat.js +10 -0
  85. package/test/fixtures/pretty/error-props.js +9 -0
  86. package/test/fixtures/pretty/error.js +7 -0
  87. package/test/fixtures/pretty/final-no-log-before.js +8 -0
  88. package/test/fixtures/pretty/final-return.js +7 -0
  89. package/test/fixtures/pretty/final.js +9 -0
  90. package/test/fixtures/pretty/formatters.js +13 -0
  91. package/test/fixtures/pretty/level-first.js +6 -0
  92. package/test/fixtures/pretty/no-time.js +9 -0
  93. package/test/fixtures/pretty/null-prototype.js +8 -0
  94. package/test/fixtures/pretty/obj-msg-prop.js +6 -0
  95. package/test/fixtures/pretty/pretty-factory.js +6 -0
  96. package/test/fixtures/pretty/redact.js +9 -0
  97. package/test/fixtures/pretty/serializers.js +17 -0
  98. package/test/fixtures/pretty/skipped-output.js +13 -0
  99. package/test/fixtures/pretty/suppress-flush-sync-warning.js +7 -0
  100. package/test/fixtures/stdout-hack-protection.js +11 -0
  101. package/test/fixtures/syncfalse-child.js +6 -0
  102. package/test/fixtures/syncfalse-exit.js +9 -0
  103. package/test/fixtures/syncfalse-flush-exit.js +10 -0
  104. package/test/fixtures/syncfalse.js +6 -0
  105. package/test/fixtures/to-file-transport-with-transform.js +20 -0
  106. package/test/fixtures/to-file-transport.js +13 -0
  107. package/test/fixtures/to-file-transport.mjs +8 -0
  108. package/test/fixtures/transport/index.js +12 -0
  109. package/test/fixtures/transport/package.json +5 -0
  110. package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  111. package/test/fixtures/transport-exit-immediately.js +11 -0
  112. package/test/fixtures/transport-exit-on-ready.js +12 -0
  113. package/test/fixtures/transport-main.js +9 -0
  114. package/test/fixtures/transport-many-lines.js +29 -0
  115. package/test/fixtures/transport-string-stdout.js +9 -0
  116. package/test/fixtures/transport-transform.js +21 -0
  117. package/test/fixtures/transport-worker.js +13 -0
  118. package/test/fixtures/transport-wrong-export-type.js +3 -0
  119. package/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  120. package/test/fixtures/ts/to-file-transport.es2017.cjs +12 -0
  121. package/test/fixtures/ts/to-file-transport.es5.cjs +58 -0
  122. package/test/fixtures/ts/to-file-transport.es6.cjs +23 -0
  123. package/test/fixtures/ts/to-file-transport.esnext.cjs +12 -0
  124. package/test/fixtures/ts/to-file-transport.ts +11 -0
  125. package/test/fixtures/ts/transpile.cjs +40 -0
  126. package/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  127. package/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  128. package/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  129. package/test/fixtures/ts/transport-main.ts +8 -0
  130. package/test/fixtures/ts/transport-string-stdout.ts +8 -0
  131. package/test/fixtures/ts/transport-worker.ts +14 -0
  132. package/test/formatters.test.js +355 -0
  133. package/test/helper.d.ts +4 -0
  134. package/test/helper.js +128 -0
  135. package/test/hooks.test.js +97 -0
  136. package/test/http.test.js +242 -0
  137. package/test/is-level-enabled.test.js +43 -0
  138. package/test/jest/basic.spec.js +10 -0
  139. package/test/levels.test.js +528 -0
  140. package/test/metadata.test.js +106 -0
  141. package/test/mixin-merge-strategy.test.js +55 -0
  142. package/test/mixin.test.js +162 -0
  143. package/test/multistream.test.js +589 -0
  144. package/test/pretty.test.js +392 -0
  145. package/test/redact.test.js +828 -0
  146. package/test/serializers.test.js +253 -0
  147. package/test/stdout-protection.test.js +19 -0
  148. package/test/syncfalse.test.js +118 -0
  149. package/test/timestamp.test.js +121 -0
  150. package/test/transport/big.test.js +41 -0
  151. package/test/transport/bundlers-support.test.js +97 -0
  152. package/test/transport/caller.test.js +23 -0
  153. package/test/transport/core.test.js +546 -0
  154. package/test/transport/core.test.ts +236 -0
  155. package/test/transport/core.transpiled.test.ts +116 -0
  156. package/test/transport/module-link.test.js +239 -0
  157. package/test/transport/pipeline.test.js +36 -0
  158. package/test/transport/syncfalse.test.js +31 -0
  159. package/test/transport/targets.test.js +28 -0
  160. package/test/types/pino-import.test-d.ts +29 -0
  161. package/test/types/pino-multistream.test-d.ts +26 -0
  162. package/test/types/pino-top-export.test-d.ts +37 -0
  163. package/test/types/pino-transport.test-d.ts +122 -0
  164. package/test/types/pino-type-only.test-d.ts +16 -0
  165. package/test/types/pino.test-d.ts +341 -0
  166. package/test/types/pino.ts +42 -0
@@ -0,0 +1,528 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('tap')
4
+ const { sink, once, check } = require('./helper')
5
+ const bingo-logger = require('../')
6
+
7
+ const levelsLib = require('../lib/levels')
8
+
9
+ // Silence all warnings for this test
10
+ process.removeAllListeners('warning')
11
+ process.on('warning', () => {})
12
+
13
+ test('set the level by string', async ({ equal }) => {
14
+ const expected = [{
15
+ level: 50,
16
+ msg: 'this is an error'
17
+ }, {
18
+ level: 60,
19
+ msg: 'this is fatal'
20
+ }]
21
+ const stream = sink()
22
+ const instance = bingo-logger(stream)
23
+ instance.level = 'error'
24
+ instance.info('hello world')
25
+ instance.error('this is an error')
26
+ instance.fatal('this is fatal')
27
+ const result = await once(stream, 'data')
28
+ const current = expected.shift()
29
+ check(equal, result, current.level, current.msg)
30
+ })
31
+
32
+ test('the wrong level throws', async ({ throws }) => {
33
+ const instance = bingo-logger()
34
+ throws(() => {
35
+ instance.level = 'kaboom'
36
+ })
37
+ })
38
+
39
+ test('set the level by number', async ({ equal }) => {
40
+ const expected = [{
41
+ level: 50,
42
+ msg: 'this is an error'
43
+ }, {
44
+ level: 60,
45
+ msg: 'this is fatal'
46
+ }]
47
+ const stream = sink()
48
+ const instance = bingo-logger(stream)
49
+
50
+ instance.level = 50
51
+ instance.info('hello world')
52
+ instance.error('this is an error')
53
+ instance.fatal('this is fatal')
54
+ const result = await once(stream, 'data')
55
+ const current = expected.shift()
56
+ check(equal, result, current.level, current.msg)
57
+ })
58
+
59
+ test('exposes level string mappings', async ({ equal }) => {
60
+ equal(bingo-logger.levels.values.error, 50)
61
+ })
62
+
63
+ test('exposes level number mappings', async ({ equal }) => {
64
+ equal(bingo-logger.levels.labels[50], 'error')
65
+ })
66
+
67
+ test('returns level integer', async ({ equal }) => {
68
+ const instance = bingo-logger({ level: 'error' })
69
+ equal(instance.levelVal, 50)
70
+ })
71
+
72
+ test('child returns level integer', async ({ equal }) => {
73
+ const parent = bingo-logger({ level: 'error' })
74
+ const child = parent.child({ foo: 'bar' })
75
+ equal(child.levelVal, 50)
76
+ })
77
+
78
+ test('set the level via exported bingo-logger function', async ({ equal }) => {
79
+ const expected = [{
80
+ level: 50,
81
+ msg: 'this is an error'
82
+ }, {
83
+ level: 60,
84
+ msg: 'this is fatal'
85
+ }]
86
+ const stream = sink()
87
+ const instance = bingo-logger({ level: 'error' }, stream)
88
+
89
+ instance.info('hello world')
90
+ instance.error('this is an error')
91
+ instance.fatal('this is fatal')
92
+ const result = await once(stream, 'data')
93
+ const current = expected.shift()
94
+ check(equal, result, current.level, current.msg)
95
+ })
96
+
97
+ test('level-change event', async ({ equal }) => {
98
+ const instance = bingo-logger()
99
+ function handle (lvl, val, prevLvl, prevVal) {
100
+ equal(lvl, 'trace')
101
+ equal(val, 10)
102
+ equal(prevLvl, 'info')
103
+ equal(prevVal, 30)
104
+ }
105
+ instance.on('level-change', handle)
106
+ instance.level = 'trace'
107
+ instance.removeListener('level-change', handle)
108
+ instance.level = 'info'
109
+
110
+ let count = 0
111
+
112
+ const l1 = () => count++
113
+ const l2 = () => count++
114
+ const l3 = () => count++
115
+ instance.on('level-change', l1)
116
+ instance.on('level-change', l2)
117
+ instance.on('level-change', l3)
118
+
119
+ instance.level = 'trace'
120
+ instance.removeListener('level-change', l3)
121
+ instance.level = 'fatal'
122
+ instance.removeListener('level-change', l1)
123
+ instance.level = 'debug'
124
+ instance.removeListener('level-change', l2)
125
+ instance.level = 'info'
126
+
127
+ equal(count, 6)
128
+ })
129
+
130
+ test('enable', async ({ fail }) => {
131
+ const instance = bingo-logger({
132
+ level: 'trace',
133
+ enabled: false
134
+ }, sink((result, enc) => {
135
+ fail('no data should be logged')
136
+ }))
137
+
138
+ Object.keys(bingo-logger.levels.values).forEach((level) => {
139
+ instance[level]('hello world')
140
+ })
141
+ })
142
+
143
+ test('silent level', async ({ fail }) => {
144
+ const instance = bingo-logger({
145
+ level: 'silent'
146
+ }, sink((result, enc) => {
147
+ fail('no data should be logged')
148
+ }))
149
+
150
+ Object.keys(bingo-logger.levels.values).forEach((level) => {
151
+ instance[level]('hello world')
152
+ })
153
+ })
154
+
155
+ test('set silent via Infinity', async ({ fail }) => {
156
+ const instance = bingo-logger({
157
+ level: Infinity
158
+ }, sink((result, enc) => {
159
+ fail('no data should be logged')
160
+ }))
161
+
162
+ Object.keys(bingo-logger.levels.values).forEach((level) => {
163
+ instance[level]('hello world')
164
+ })
165
+ })
166
+
167
+ test('exposed levels', async ({ same }) => {
168
+ same(Object.keys(bingo-logger.levels.values), [
169
+ 'trace',
170
+ 'debug',
171
+ 'info',
172
+ 'warn',
173
+ 'error',
174
+ 'fatal'
175
+ ])
176
+ })
177
+
178
+ test('exposed labels', async ({ same }) => {
179
+ same(Object.keys(bingo-logger.levels.labels), [
180
+ '10',
181
+ '20',
182
+ '30',
183
+ '40',
184
+ '50',
185
+ '60'
186
+ ])
187
+ })
188
+
189
+ test('setting level in child', async ({ equal }) => {
190
+ const expected = [{
191
+ level: 50,
192
+ msg: 'this is an error'
193
+ }, {
194
+ level: 60,
195
+ msg: 'this is fatal'
196
+ }]
197
+ const instance = bingo-logger(sink((result, enc, cb) => {
198
+ const current = expected.shift()
199
+ check(equal, result, current.level, current.msg)
200
+ cb()
201
+ })).child({ level: 30 })
202
+
203
+ instance.level = 'error'
204
+ instance.info('hello world')
205
+ instance.error('this is an error')
206
+ instance.fatal('this is fatal')
207
+ })
208
+
209
+ test('setting level by assigning a number to level', async ({ equal }) => {
210
+ const instance = bingo-logger()
211
+ equal(instance.levelVal, 30)
212
+ equal(instance.level, 'info')
213
+ instance.level = 50
214
+ equal(instance.levelVal, 50)
215
+ equal(instance.level, 'error')
216
+ })
217
+
218
+ test('setting level by number to unknown value results in a throw', async ({ throws }) => {
219
+ const instance = bingo-logger()
220
+ throws(() => { instance.level = 973 })
221
+ })
222
+
223
+ test('setting level by assigning a known label to level', async ({ equal }) => {
224
+ const instance = bingo-logger()
225
+ equal(instance.levelVal, 30)
226
+ equal(instance.level, 'info')
227
+ instance.level = 'error'
228
+ equal(instance.levelVal, 50)
229
+ equal(instance.level, 'error')
230
+ })
231
+
232
+ test('levelVal is read only', async ({ throws }) => {
233
+ const instance = bingo-logger()
234
+ throws(() => { instance.levelVal = 20 })
235
+ })
236
+
237
+ test('produces labels when told to', async ({ equal }) => {
238
+ const expected = [{
239
+ level: 'info',
240
+ msg: 'hello world'
241
+ }]
242
+ const instance = bingo-logger({
243
+ formatters: {
244
+ level (label, number) {
245
+ return { level: label }
246
+ }
247
+ }
248
+ }, sink((result, enc, cb) => {
249
+ const current = expected.shift()
250
+ check(equal, result, current.level, current.msg)
251
+ cb()
252
+ }))
253
+
254
+ instance.info('hello world')
255
+ })
256
+
257
+ test('resets levels from labels to numbers', async ({ equal }) => {
258
+ const expected = [{
259
+ level: 30,
260
+ msg: 'hello world'
261
+ }]
262
+ bingo-logger({ useLevelLabels: true })
263
+ const instance = bingo-logger({ useLevelLabels: false }, sink((result, enc, cb) => {
264
+ const current = expected.shift()
265
+ check(equal, result, current.level, current.msg)
266
+ cb()
267
+ }))
268
+
269
+ instance.info('hello world')
270
+ })
271
+
272
+ test('changes label naming when told to', async ({ equal }) => {
273
+ const expected = [{
274
+ priority: 30,
275
+ msg: 'hello world'
276
+ }]
277
+ const instance = bingo-logger({
278
+ formatters: {
279
+ level (label, number) {
280
+ return { priority: number }
281
+ }
282
+ }
283
+ }, sink((result, enc, cb) => {
284
+ const current = expected.shift()
285
+ equal(result.priority, current.priority)
286
+ equal(result.msg, current.msg)
287
+ cb()
288
+ }))
289
+
290
+ instance.info('hello world')
291
+ })
292
+
293
+ test('children produce labels when told to', async ({ equal }) => {
294
+ const expected = [
295
+ {
296
+ level: 'info',
297
+ msg: 'child 1'
298
+ },
299
+ {
300
+ level: 'info',
301
+ msg: 'child 2'
302
+ }
303
+ ]
304
+ const instance = bingo-logger({
305
+ formatters: {
306
+ level (label, number) {
307
+ return { level: label }
308
+ }
309
+ }
310
+ }, sink((result, enc, cb) => {
311
+ const current = expected.shift()
312
+ check(equal, result, current.level, current.msg)
313
+ cb()
314
+ }))
315
+
316
+ const child1 = instance.child({ name: 'child1' })
317
+ const child2 = child1.child({ name: 'child2' })
318
+
319
+ child1.info('child 1')
320
+ child2.info('child 2')
321
+ })
322
+
323
+ test('produces labels for custom levels', async ({ equal }) => {
324
+ const expected = [
325
+ {
326
+ level: 'info',
327
+ msg: 'hello world'
328
+ },
329
+ {
330
+ level: 'foo',
331
+ msg: 'foobar'
332
+ }
333
+ ]
334
+ const opts = {
335
+ formatters: {
336
+ level (label, number) {
337
+ return { level: label }
338
+ }
339
+ },
340
+ customLevels: {
341
+ foo: 35
342
+ }
343
+ }
344
+ const instance = bingo-logger(opts, sink((result, enc, cb) => {
345
+ const current = expected.shift()
346
+ check(equal, result, current.level, current.msg)
347
+ cb()
348
+ }))
349
+
350
+ instance.info('hello world')
351
+ instance.foo('foobar')
352
+ })
353
+
354
+ test('setting levelKey does not affect labels when told to', async ({ equal }) => {
355
+ const instance = bingo-logger(
356
+ {
357
+ formatters: {
358
+ level (label, number) {
359
+ return { priority: label }
360
+ }
361
+ }
362
+ },
363
+ sink((result, enc, cb) => {
364
+ equal(result.priority, 'info')
365
+ cb()
366
+ })
367
+ )
368
+
369
+ instance.info('hello world')
370
+ })
371
+
372
+ test('throws when creating a default label that does not exist in logger levels', async ({ throws }) => {
373
+ const defaultLevel = 'foo'
374
+ throws(() => {
375
+ bingo-logger({
376
+ customLevels: {
377
+ bar: 5
378
+ },
379
+ level: defaultLevel
380
+ })
381
+ }, `default level:${defaultLevel} must be included in custom levels`)
382
+ })
383
+
384
+ test('throws when creating a default value that does not exist in logger levels', async ({ throws }) => {
385
+ const defaultLevel = 15
386
+ throws(() => {
387
+ bingo-logger({
388
+ customLevels: {
389
+ bar: 5
390
+ },
391
+ level: defaultLevel
392
+ })
393
+ }, `default level:${defaultLevel} must be included in custom levels`)
394
+ })
395
+
396
+ test('throws when creating a default value that does not exist in logger levels', async ({ equal, throws }) => {
397
+ throws(() => {
398
+ bingo-logger({
399
+ customLevels: {
400
+ foo: 5
401
+ },
402
+ useOnlyCustomLevels: true
403
+ })
404
+ }, 'default level:info must be included in custom levels')
405
+ })
406
+
407
+ test('passes when creating a default value that exists in logger levels', async ({ equal, throws }) => {
408
+ bingo-logger({
409
+ level: 30
410
+ })
411
+ })
412
+
413
+ test('log null value when message is null', async ({ equal }) => {
414
+ const expected = {
415
+ msg: null,
416
+ level: 30
417
+ }
418
+
419
+ const stream = sink()
420
+ const instance = bingo-logger(stream)
421
+ instance.level = 'info'
422
+ instance.info(null)
423
+
424
+ const result = await once(stream, 'data')
425
+ check(equal, result, expected.level, expected.msg)
426
+ })
427
+
428
+ test('formats when base param is null', async ({ equal }) => {
429
+ const expected = {
430
+ msg: 'a string',
431
+ level: 30
432
+ }
433
+
434
+ const stream = sink()
435
+ const instance = bingo-logger(stream)
436
+ instance.level = 'info'
437
+ instance.info(null, 'a %s', 'string')
438
+
439
+ const result = await once(stream, 'data')
440
+ check(equal, result, expected.level, expected.msg)
441
+ })
442
+
443
+ test('fatal method sync-flushes the destination if sync flushing is available', async ({ pass, doesNotThrow, plan }) => {
444
+ plan(2)
445
+ const stream = sink()
446
+ stream.flushSync = () => {
447
+ pass('destination flushed')
448
+ }
449
+ const instance = bingo-logger(stream)
450
+ instance.fatal('this is fatal')
451
+ await once(stream, 'data')
452
+ doesNotThrow(() => {
453
+ stream.flushSync = undefined
454
+ instance.fatal('this is fatal')
455
+ })
456
+ })
457
+
458
+ test('fatal method should call async when sync-flushing fails', ({ equal, fail, doesNotThrow, plan }) => {
459
+ plan(2)
460
+ const messages = [
461
+ 'this is fatal 1'
462
+ ]
463
+ const stream = sink((result) => equal(result.msg, messages.shift()))
464
+ stream.flushSync = () => { throw new Error('Error') }
465
+ stream.flush = () => fail('flush should be called')
466
+
467
+ const instance = bingo-logger(stream)
468
+ doesNotThrow(() => instance.fatal(messages[0]))
469
+ })
470
+
471
+ test('calling silent method on logger instance', async ({ fail }) => {
472
+ const instance = bingo-logger({ level: 'silent' }, sink((result, enc) => {
473
+ fail('no data should be logged')
474
+ }))
475
+ instance.silent('hello world')
476
+ })
477
+
478
+ test('calling silent method on child logger', async ({ fail }) => {
479
+ const child = bingo-logger({ level: 'silent' }, sink((result, enc) => {
480
+ fail('no data should be logged')
481
+ })).child({})
482
+ child.silent('hello world')
483
+ })
484
+
485
+ test('changing level from info to silent and back to info', async ({ equal }) => {
486
+ const expected = {
487
+ level: 30,
488
+ msg: 'hello world'
489
+ }
490
+ const stream = sink()
491
+ const instance = bingo-logger({ level: 'info' }, stream)
492
+
493
+ instance.level = 'silent'
494
+ instance.info('hello world')
495
+ let result = stream.read()
496
+ equal(result, null)
497
+
498
+ instance.level = 'info'
499
+ instance.info('hello world')
500
+ result = await once(stream, 'data')
501
+ check(equal, result, expected.level, expected.msg)
502
+ })
503
+
504
+ test('changing level from info to silent and back to info in child logger', async ({ equal }) => {
505
+ const expected = {
506
+ level: 30,
507
+ msg: 'hello world'
508
+ }
509
+ const stream = sink()
510
+ const child = bingo-logger({ level: 'info' }, stream).child({})
511
+
512
+ child.level = 'silent'
513
+ child.info('hello world')
514
+ let result = stream.read()
515
+ equal(result, null)
516
+
517
+ child.level = 'info'
518
+ child.info('hello world')
519
+ result = await once(stream, 'data')
520
+ check(equal, result, expected.level, expected.msg)
521
+ })
522
+
523
+ // testing for potential loss of Pino constructor scope from serializers - an edge case with circular refs see: https://github.com/bingo-loggerjs/bingo-logger/issues/833
524
+ test('trying to get levels when `this` is no longer a Pino instance returns an empty string', async ({ equal }) => {
525
+ const notPinoInstance = { some: 'object', getLevel: levelsLib.getLevel }
526
+ const blankedLevelValue = notPinoInstance.getLevel()
527
+ equal(blankedLevelValue, '')
528
+ })
@@ -0,0 +1,106 @@
1
+ 'use strict'
2
+
3
+ const os = require('os')
4
+ const { test } = require('tap')
5
+ const bingo-logger = require('../')
6
+
7
+ const { pid } = process
8
+ const hostname = os.hostname()
9
+
10
+ test('metadata works', async ({ ok, same, equal }) => {
11
+ const now = Date.now()
12
+ const instance = bingo-logger({}, {
13
+ [Symbol.for('bingo-logger.metadata')]: true,
14
+ write (chunk) {
15
+ equal(instance, this.lastLogger)
16
+ equal(30, this.lastLevel)
17
+ equal('a msg', this.lastMsg)
18
+ ok(Number(this.lastTime) >= now)
19
+ same(this.lastObj, { hello: 'world' })
20
+ const result = JSON.parse(chunk)
21
+ ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
22
+ delete result.time
23
+ same(result, {
24
+ pid,
25
+ hostname,
26
+ level: 30,
27
+ hello: 'world',
28
+ msg: 'a msg'
29
+ })
30
+ }
31
+ })
32
+
33
+ instance.info({ hello: 'world' }, 'a msg')
34
+ })
35
+
36
+ test('child loggers works', async ({ ok, same, equal }) => {
37
+ const instance = bingo-logger({}, {
38
+ [Symbol.for('bingo-logger.metadata')]: true,
39
+ write (chunk) {
40
+ equal(child, this.lastLogger)
41
+ equal(30, this.lastLevel)
42
+ equal('a msg', this.lastMsg)
43
+ same(this.lastObj, { from: 'child' })
44
+ const result = JSON.parse(chunk)
45
+ ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
46
+ delete result.time
47
+ same(result, {
48
+ pid,
49
+ hostname,
50
+ level: 30,
51
+ hello: 'world',
52
+ from: 'child',
53
+ msg: 'a msg'
54
+ })
55
+ }
56
+ })
57
+
58
+ const child = instance.child({ hello: 'world' })
59
+ child.info({ from: 'child' }, 'a msg')
60
+ })
61
+
62
+ test('without object', async ({ ok, same, equal }) => {
63
+ const instance = bingo-logger({}, {
64
+ [Symbol.for('bingo-logger.metadata')]: true,
65
+ write (chunk) {
66
+ equal(instance, this.lastLogger)
67
+ equal(30, this.lastLevel)
68
+ equal('a msg', this.lastMsg)
69
+ same({ }, this.lastObj)
70
+ const result = JSON.parse(chunk)
71
+ ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
72
+ delete result.time
73
+ same(result, {
74
+ pid,
75
+ hostname,
76
+ level: 30,
77
+ msg: 'a msg'
78
+ })
79
+ }
80
+ })
81
+
82
+ instance.info('a msg')
83
+ })
84
+
85
+ test('without msg', async ({ ok, same, equal }) => {
86
+ const instance = bingo-logger({}, {
87
+ [Symbol.for('bingo-logger.metadata')]: true,
88
+ write (chunk) {
89
+ equal(instance, this.lastLogger)
90
+ equal(30, this.lastLevel)
91
+ equal(undefined, this.lastMsg)
92
+ same({ hello: 'world' }, this.lastObj)
93
+ const result = JSON.parse(chunk)
94
+ ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
95
+ delete result.time
96
+ same(result, {
97
+ pid,
98
+ hostname,
99
+ level: 30,
100
+ hello: 'world'
101
+ })
102
+ }
103
+ })
104
+
105
+ instance.info({ hello: 'world' })
106
+ })
@@ -0,0 +1,55 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('tap')
4
+ const { sink, once } = require('./helper')
5
+ const bingo-logger = require('../')
6
+
7
+ const level = 50
8
+ const name = 'error'
9
+
10
+ test('default merge strategy', async ({ ok, same }) => {
11
+ const stream = sink()
12
+ const instance = bingo-logger({
13
+ base: {},
14
+ mixin () {
15
+ return { tag: 'k8s' }
16
+ }
17
+ }, stream)
18
+ instance.level = name
19
+ instance[name]({
20
+ tag: 'local'
21
+ }, 'test')
22
+ const result = await once(stream, 'data')
23
+ ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
24
+ delete result.time
25
+ same(result, {
26
+ level,
27
+ msg: 'test',
28
+ tag: 'local'
29
+ })
30
+ })
31
+
32
+ test('custom merge strategy with mixin priority', async ({ ok, same }) => {
33
+ const stream = sink()
34
+ const instance = bingo-logger({
35
+ base: {},
36
+ mixin () {
37
+ return { tag: 'k8s' }
38
+ },
39
+ mixinMergeStrategy (mergeObject, mixinObject) {
40
+ return Object.assign(mergeObject, mixinObject)
41
+ }
42
+ }, stream)
43
+ instance.level = name
44
+ instance[name]({
45
+ tag: 'local'
46
+ }, 'test')
47
+ const result = await once(stream, 'data')
48
+ ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
49
+ delete result.time
50
+ same(result, {
51
+ level,
52
+ msg: 'test',
53
+ tag: 'k8s'
54
+ })
55
+ })