pino-testkit 10.4.5

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 (196) hide show
  1. package/.nojekyll +0 -0
  2. package/.prettierignore +1 -0
  3. package/CNAME +1 -0
  4. package/CONTRIBUTING.md +30 -0
  5. package/LICENSE +21 -0
  6. package/README.md +175 -0
  7. package/SECURITY.md +87 -0
  8. package/benchmarks/basic.bench.js +95 -0
  9. package/benchmarks/child-child.bench.js +52 -0
  10. package/benchmarks/child-creation.bench.js +73 -0
  11. package/benchmarks/child.bench.js +62 -0
  12. package/benchmarks/deep-object.bench.js +88 -0
  13. package/benchmarks/formatters.bench.js +50 -0
  14. package/benchmarks/internal/custom-levels.js +67 -0
  15. package/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  16. package/benchmarks/internal/just-pino.bench.js +182 -0
  17. package/benchmarks/internal/parent-vs-child.bench.js +75 -0
  18. package/benchmarks/internal/redact.bench.js +86 -0
  19. package/benchmarks/long-string.bench.js +81 -0
  20. package/benchmarks/multi-arg.bench.js +193 -0
  21. package/benchmarks/multistream.js +98 -0
  22. package/benchmarks/object.bench.js +82 -0
  23. package/benchmarks/utils/generate-benchmark-doc.js +36 -0
  24. package/benchmarks/utils/runbench.js +138 -0
  25. package/benchmarks/utils/wrap-log-level.js +55 -0
  26. package/bin.js +6 -0
  27. package/browser.js +547 -0
  28. package/build/sync-version.js +25 -0
  29. package/docs/api.md +1593 -0
  30. package/docs/asynchronous.md +40 -0
  31. package/docs/benchmarks.md +55 -0
  32. package/docs/browser.md +278 -0
  33. package/docs/bundling.md +40 -0
  34. package/docs/child-loggers.md +95 -0
  35. package/docs/diagnostics.md +16 -0
  36. package/docs/ecosystem.md +86 -0
  37. package/docs/help.md +345 -0
  38. package/docs/lts.md +64 -0
  39. package/docs/pretty.md +35 -0
  40. package/docs/redaction.md +135 -0
  41. package/docs/transports.md +1376 -0
  42. package/docs/web.md +309 -0
  43. package/eslint.config.js +28 -0
  44. package/examples/basic.js +43 -0
  45. package/examples/transport.js +68 -0
  46. package/favicon.ico +0 -0
  47. package/file.js +12 -0
  48. package/inc-version.sh +42 -0
  49. package/index.html +55 -0
  50. package/lib/caller.js +30 -0
  51. package/lib/constants.js +28 -0
  52. package/lib/contract.js +8 -0
  53. package/lib/deprecations.js +8 -0
  54. package/lib/levels.js +241 -0
  55. package/lib/meta.js +3 -0
  56. package/lib/multistream.js +203 -0
  57. package/lib/proto.js +256 -0
  58. package/lib/redaction.js +114 -0
  59. package/lib/symbols.js +74 -0
  60. package/lib/time.js +39 -0
  61. package/lib/tools.js +427 -0
  62. package/lib/transport-stream.js +56 -0
  63. package/lib/transport.js +289 -0
  64. package/lib/worker.js +194 -0
  65. package/package.json +119 -0
  66. package/pino.d.ts +908 -0
  67. package/pino.js +240 -0
  68. package/test/basic.test.js +886 -0
  69. package/test/broken-pipe.test.js +59 -0
  70. package/test/browser-child.test.js +132 -0
  71. package/test/browser-disabled.test.js +87 -0
  72. package/test/browser-early-console-freeze.test.js +12 -0
  73. package/test/browser-is-level-enabled.test.js +101 -0
  74. package/test/browser-levels.test.js +241 -0
  75. package/test/browser-serializers.test.js +352 -0
  76. package/test/browser-timestamp.test.js +88 -0
  77. package/test/browser-transmit.test.js +417 -0
  78. package/test/browser.test.js +698 -0
  79. package/test/complex-objects.test.js +36 -0
  80. package/test/crlf.test.js +34 -0
  81. package/test/custom-levels.test.js +267 -0
  82. package/test/diagnostics.test.js +107 -0
  83. package/test/error-key.test.js +37 -0
  84. package/test/error.test.js +403 -0
  85. package/test/escaping.test.js +93 -0
  86. package/test/esm/esm.mjs +14 -0
  87. package/test/esm/index.test.js +21 -0
  88. package/test/esm/named-exports.mjs +29 -0
  89. package/test/exit.test.js +79 -0
  90. package/test/fixtures/broken-pipe/basic.js +9 -0
  91. package/test/fixtures/broken-pipe/destination.js +10 -0
  92. package/test/fixtures/broken-pipe/syncfalse.js +12 -0
  93. package/test/fixtures/console-transport.js +13 -0
  94. package/test/fixtures/crashing-transport.js +13 -0
  95. package/test/fixtures/default-exit.js +8 -0
  96. package/test/fixtures/destination-exit.js +8 -0
  97. package/test/fixtures/eval/index.js +13 -0
  98. package/test/fixtures/eval/node_modules/14-files.js +3 -0
  99. package/test/fixtures/eval/node_modules/2-files.js +3 -0
  100. package/test/fixtures/eval/node_modules/file1.js +5 -0
  101. package/test/fixtures/eval/node_modules/file10.js +5 -0
  102. package/test/fixtures/eval/node_modules/file11.js +5 -0
  103. package/test/fixtures/eval/node_modules/file12.js +5 -0
  104. package/test/fixtures/eval/node_modules/file13.js +5 -0
  105. package/test/fixtures/eval/node_modules/file14.js +11 -0
  106. package/test/fixtures/eval/node_modules/file2.js +5 -0
  107. package/test/fixtures/eval/node_modules/file3.js +5 -0
  108. package/test/fixtures/eval/node_modules/file4.js +5 -0
  109. package/test/fixtures/eval/node_modules/file5.js +5 -0
  110. package/test/fixtures/eval/node_modules/file6.js +5 -0
  111. package/test/fixtures/eval/node_modules/file7.js +5 -0
  112. package/test/fixtures/eval/node_modules/file8.js +5 -0
  113. package/test/fixtures/eval/node_modules/file9.js +5 -0
  114. package/test/fixtures/noop-transport.js +10 -0
  115. package/test/fixtures/pretty/null-prototype.js +8 -0
  116. package/test/fixtures/stdout-hack-protection.js +11 -0
  117. package/test/fixtures/syncfalse-child.js +6 -0
  118. package/test/fixtures/syncfalse-exit.js +9 -0
  119. package/test/fixtures/syncfalse-flush-exit.js +10 -0
  120. package/test/fixtures/syncfalse.js +6 -0
  121. package/test/fixtures/syntax-error-esm.mjs +2 -0
  122. package/test/fixtures/to-file-transport-with-transform.js +20 -0
  123. package/test/fixtures/to-file-transport.js +13 -0
  124. package/test/fixtures/to-file-transport.mjs +8 -0
  125. package/test/fixtures/transport/index.js +12 -0
  126. package/test/fixtures/transport/package.json +5 -0
  127. package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  128. package/test/fixtures/transport-exit-immediately.js +11 -0
  129. package/test/fixtures/transport-exit-on-ready.js +12 -0
  130. package/test/fixtures/transport-invalid-node-options.js +26 -0
  131. package/test/fixtures/transport-main.js +9 -0
  132. package/test/fixtures/transport-many-lines.js +29 -0
  133. package/test/fixtures/transport-preload-main.mjs +13 -0
  134. package/test/fixtures/transport-preload.mjs +13 -0
  135. package/test/fixtures/transport-string-stdout.js +9 -0
  136. package/test/fixtures/transport-transform.js +21 -0
  137. package/test/fixtures/transport-uses-pino-config.js +33 -0
  138. package/test/fixtures/transport-with-on-exit.js +12 -0
  139. package/test/fixtures/transport-worker-data.js +19 -0
  140. package/test/fixtures/transport-worker-name.js +24 -0
  141. package/test/fixtures/transport-worker.js +15 -0
  142. package/test/fixtures/transport-wrong-export-type.js +3 -0
  143. package/test/fixtures/ts/to-file-transport-native.mts +15 -0
  144. package/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  145. package/test/fixtures/ts/to-file-transport.ts +11 -0
  146. package/test/fixtures/ts/transpile.cjs +36 -0
  147. package/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  148. package/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  149. package/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  150. package/test/fixtures/ts/transport-main.ts +8 -0
  151. package/test/fixtures/ts/transport-string-stdout.ts +8 -0
  152. package/test/fixtures/ts/transport-worker.ts +14 -0
  153. package/test/formatters.test.js +364 -0
  154. package/test/helper.d.ts +4 -0
  155. package/test/helper.js +155 -0
  156. package/test/hooks.test.js +114 -0
  157. package/test/http.test.js +214 -0
  158. package/test/internals/version.test.js +17 -0
  159. package/test/is-level-enabled.test.js +179 -0
  160. package/test/jest/basic.spec.js +10 -0
  161. package/test/levels.test.js +810 -0
  162. package/test/metadata.test.js +120 -0
  163. package/test/mixin-merge-strategy.test.js +57 -0
  164. package/test/mixin.test.js +241 -0
  165. package/test/multistream.test.js +729 -0
  166. package/test/redact.test.js +893 -0
  167. package/test/serializers.test.js +257 -0
  168. package/test/stdout-protection.test.js +41 -0
  169. package/test/syncfalse.test.js +186 -0
  170. package/test/timestamp-nano.test.js +37 -0
  171. package/test/timestamp.test.js +124 -0
  172. package/test/transport/big.test.js +42 -0
  173. package/test/transport/bundlers-support.test.js +99 -0
  174. package/test/transport/caller.test.js +24 -0
  175. package/test/transport/core.test.js +733 -0
  176. package/test/transport/core.transpiled.test.ts +114 -0
  177. package/test/transport/crash.test.js +36 -0
  178. package/test/transport/module-link.test.js +241 -0
  179. package/test/transport/native-type-stripping.test.mjs +151 -0
  180. package/test/transport/node-options.test.js +116 -0
  181. package/test/transport/pipeline.test.js +137 -0
  182. package/test/transport/preload.test.js +54 -0
  183. package/test/transport/repl.test.js +15 -0
  184. package/test/transport/sync-false.test.js +67 -0
  185. package/test/transport/sync-true.test.js +57 -0
  186. package/test/transport/targets.test.js +48 -0
  187. package/test/transport/uses-pino-config.test.js +166 -0
  188. package/test/transport-stream.test.js +40 -0
  189. package/test/types/pino-import.test-d.cts +30 -0
  190. package/test/types/pino-multistream.test-d.ts +28 -0
  191. package/test/types/pino-top-export.test-d.ts +34 -0
  192. package/test/types/pino-transport.test-d.ts +156 -0
  193. package/test/types/pino-type-only.test-d.ts +75 -0
  194. package/test/types/pino.test-d.ts +683 -0
  195. package/test/types/pino.ts +91 -0
  196. package/tsconfig.json +14 -0
@@ -0,0 +1,114 @@
1
+ 'use strict'
2
+
3
+ const { describe, test } = require('node:test')
4
+ const tspl = require('@matteo.collina/tspl')
5
+
6
+ const { sink, match, once } = require('./helper')
7
+ const pino = require('../')
8
+
9
+ describe('log method hook', () => {
10
+ test('gets invoked', async t => {
11
+ const plan = tspl(t, { plan: 7 })
12
+
13
+ const stream = sink()
14
+ const logger = pino({
15
+ hooks: {
16
+ logMethod (args, method, level) {
17
+ plan.equal(Array.isArray(args), true)
18
+ plan.equal(typeof level, 'number')
19
+ plan.equal(args.length, 3)
20
+ plan.equal(level, this.levels.values.info)
21
+ plan.deepEqual(args, ['a', 'b', 'c'])
22
+
23
+ plan.equal(typeof method, 'function')
24
+ plan.equal(method.name, 'LOG')
25
+
26
+ method.apply(this, [args.join('-')])
27
+ }
28
+ }
29
+ }, stream)
30
+
31
+ const o = once(stream, 'data')
32
+ logger.info('a', 'b', 'c')
33
+ match(await o, { msg: 'a-b-c' })
34
+ })
35
+
36
+ test('fatal method invokes hook', async t => {
37
+ const plan = tspl(t, { plan: 1 })
38
+
39
+ const stream = sink()
40
+ const logger = pino({
41
+ hooks: {
42
+ logMethod (args, method) {
43
+ plan.ok(true)
44
+ method.apply(this, [args.join('-')])
45
+ }
46
+ }
47
+ }, stream)
48
+
49
+ const o = once(stream, 'data')
50
+ logger.fatal('a')
51
+ match(await o, { msg: 'a' })
52
+ })
53
+
54
+ test('children get the hook', async t => {
55
+ const plan = tspl(t, { plan: 2 })
56
+
57
+ const stream = sink()
58
+ const root = pino({
59
+ hooks: {
60
+ logMethod (args, method) {
61
+ plan.ok(true)
62
+ method.apply(this, [args.join('-')])
63
+ }
64
+ }
65
+ }, stream)
66
+ const child = root.child({ child: 'one' })
67
+ const grandchild = child.child({ child: 'two' })
68
+
69
+ let o = once(stream, 'data')
70
+ child.info('a', 'b')
71
+ match(await o, { msg: 'a-b' })
72
+
73
+ o = once(stream, 'data')
74
+ grandchild.info('c', 'd')
75
+ match(await o, { msg: 'c-d' })
76
+ })
77
+
78
+ test('get log level', async t => {
79
+ const plan = tspl(t, { plan: 2 })
80
+
81
+ const stream = sink()
82
+ const logger = pino({
83
+ hooks: {
84
+ logMethod (args, method, level) {
85
+ plan.equal(typeof level, 'number')
86
+ plan.equal(level, this.levels.values.error)
87
+
88
+ method.apply(this, [args.join('-')])
89
+ }
90
+ }
91
+ }, stream)
92
+
93
+ const o = once(stream, 'data')
94
+ logger.error('a')
95
+ match(await o, { msg: 'a' })
96
+ })
97
+ })
98
+
99
+ describe('streamWrite hook', () => {
100
+ test('gets invoked', async () => {
101
+ const stream = sink()
102
+ const logger = pino({
103
+ hooks: {
104
+ streamWrite (s) {
105
+ return s.replaceAll('redact-me', 'XXX')
106
+ }
107
+ }
108
+ }, stream)
109
+
110
+ const o = once(stream, 'data')
111
+ logger.info('hide redact-me in this string')
112
+ match(await o, { msg: 'hide XXX in this string' })
113
+ })
114
+ })
@@ -0,0 +1,214 @@
1
+ 'use strict'
2
+
3
+ const test = require('node:test')
4
+ const http = require('node:http')
5
+ const os = require('node:os')
6
+ const tspl = require('@matteo.collina/tspl')
7
+
8
+ const { sink, once } = require('./helper')
9
+ const pino = require('../')
10
+
11
+ const { pid } = process
12
+ const hostname = os.hostname()
13
+
14
+ test('http request support', async (t) => {
15
+ const plan = tspl(t, { plan: 3 })
16
+ let originalReq
17
+ const instance = pino(sink((chunk, enc) => {
18
+ plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
19
+ delete chunk.time
20
+ plan.deepEqual(chunk, {
21
+ pid,
22
+ hostname,
23
+ level: 30,
24
+ msg: 'my request',
25
+ req: {
26
+ method: originalReq.method,
27
+ url: originalReq.url,
28
+ headers: originalReq.headers,
29
+ remoteAddress: originalReq.socket.remoteAddress,
30
+ remotePort: originalReq.socket.remotePort
31
+ }
32
+ })
33
+ }))
34
+
35
+ const server = http.createServer((req, res) => {
36
+ originalReq = req
37
+ instance.info(req, 'my request')
38
+ res.end('hello')
39
+ })
40
+ server.unref()
41
+ server.listen()
42
+ const err = await once(server, 'listening')
43
+ plan.equal(err, undefined)
44
+ const res = await once(http.get('http://localhost:' + server.address().port), 'response')
45
+ res.resume()
46
+ server.close()
47
+
48
+ await plan
49
+ })
50
+
51
+ test('http request support via serializer', async (t) => {
52
+ const plan = tspl(t, { plan: 3 })
53
+ let originalReq
54
+ const instance = pino({
55
+ serializers: {
56
+ req: pino.stdSerializers.req
57
+ }
58
+ }, sink((chunk, enc) => {
59
+ plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
60
+ delete chunk.time
61
+ plan.deepEqual(chunk, {
62
+ pid,
63
+ hostname,
64
+ level: 30,
65
+ msg: 'my request',
66
+ req: {
67
+ method: originalReq.method,
68
+ url: originalReq.url,
69
+ headers: originalReq.headers,
70
+ remoteAddress: originalReq.socket.remoteAddress,
71
+ remotePort: originalReq.socket.remotePort
72
+ }
73
+ })
74
+ }))
75
+
76
+ const server = http.createServer(function (req, res) {
77
+ originalReq = req
78
+ instance.info({ req }, 'my request')
79
+ res.end('hello')
80
+ })
81
+ server.unref()
82
+ server.listen()
83
+ const err = await once(server, 'listening')
84
+ plan.equal(err, undefined)
85
+
86
+ const res = await once(http.get('http://localhost:' + server.address().port), 'response')
87
+ res.resume()
88
+ server.close()
89
+
90
+ await plan
91
+ })
92
+
93
+ test('http response support', async (t) => {
94
+ const plan = tspl(t, { plan: 3 })
95
+ let originalRes
96
+ const instance = pino(sink((chunk, enc) => {
97
+ plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
98
+ delete chunk.time
99
+ plan.deepEqual(chunk, {
100
+ pid,
101
+ hostname,
102
+ level: 30,
103
+ msg: 'my response',
104
+ res: {
105
+ statusCode: originalRes.statusCode,
106
+ headers: originalRes.getHeaders()
107
+ }
108
+ })
109
+ }))
110
+
111
+ const server = http.createServer(function (req, res) {
112
+ originalRes = res
113
+ res.end('hello')
114
+ instance.info(res, 'my response')
115
+ })
116
+ server.unref()
117
+ server.listen()
118
+ const err = await once(server, 'listening')
119
+
120
+ plan.equal(err, undefined)
121
+
122
+ const res = await once(http.get('http://localhost:' + server.address().port), 'response')
123
+ res.resume()
124
+ server.close()
125
+
126
+ await plan
127
+ })
128
+
129
+ test('http response support via a serializer', async (t) => {
130
+ const plan = tspl(t, { plan: 3 })
131
+ const instance = pino({
132
+ serializers: {
133
+ res: pino.stdSerializers.res
134
+ }
135
+ }, sink((chunk, enc) => {
136
+ plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
137
+ delete chunk.time
138
+ plan.deepEqual(chunk, {
139
+ pid,
140
+ hostname,
141
+ level: 30,
142
+ msg: 'my response',
143
+ res: {
144
+ statusCode: 200,
145
+ headers: {
146
+ 'x-single': 'y',
147
+ 'x-multi': [1, 2]
148
+ }
149
+ }
150
+ })
151
+ }))
152
+
153
+ const server = http.createServer(function (req, res) {
154
+ res.setHeader('x-single', 'y')
155
+ res.setHeader('x-multi', [1, 2])
156
+ res.end('hello')
157
+ instance.info({ res }, 'my response')
158
+ })
159
+
160
+ server.unref()
161
+ server.listen()
162
+ const err = await once(server, 'listening')
163
+ plan.equal(err, undefined)
164
+
165
+ const res = await once(http.get('http://localhost:' + server.address().port), 'response')
166
+ res.resume()
167
+ server.close()
168
+
169
+ await plan
170
+ })
171
+
172
+ test('http request support via serializer in a child', async (t) => {
173
+ const plan = tspl(t, { plan: 3 })
174
+ let originalReq
175
+ const instance = pino({
176
+ serializers: {
177
+ req: pino.stdSerializers.req
178
+ }
179
+ }, sink((chunk, enc) => {
180
+ plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
181
+ delete chunk.time
182
+ plan.deepEqual(chunk, {
183
+ pid,
184
+ hostname,
185
+ level: 30,
186
+ msg: 'my request',
187
+ req: {
188
+ method: originalReq.method,
189
+ url: originalReq.url,
190
+ headers: originalReq.headers,
191
+ remoteAddress: originalReq.socket.remoteAddress,
192
+ remotePort: originalReq.socket.remotePort
193
+ }
194
+ })
195
+ }))
196
+
197
+ const server = http.createServer(function (req, res) {
198
+ originalReq = req
199
+ const child = instance.child({ req })
200
+ child.info('my request')
201
+ res.end('hello')
202
+ })
203
+
204
+ server.unref()
205
+ server.listen()
206
+ const err = await once(server, 'listening')
207
+ plan.equal(err, undefined)
208
+
209
+ const res = await once(http.get('http://localhost:' + server.address().port), 'response')
210
+ res.resume()
211
+ server.close()
212
+
213
+ await plan
214
+ })
@@ -0,0 +1,17 @@
1
+ 'use strict'
2
+
3
+ const test = require('node:test')
4
+ const assert = require('node:assert')
5
+ const fs = require('node:fs')
6
+ const path = require('node:path')
7
+
8
+ const pino = require('../..')()
9
+
10
+ test('should be the same as package.json', () => {
11
+ const json = JSON.parse(
12
+ fs.readFileSync(path.join(__dirname, '..', '..', 'package.json'))
13
+ .toString('utf8')
14
+ )
15
+
16
+ assert.equal(pino.version, json.version)
17
+ })
@@ -0,0 +1,179 @@
1
+ 'use strict'
2
+
3
+ const { describe, test } = require('node:test')
4
+ const assert = require('node:assert')
5
+
6
+ const pino = require('../')
7
+
8
+ const descLevels = {
9
+ trace: 60,
10
+ debug: 50,
11
+ info: 40,
12
+ warn: 30,
13
+ error: 20,
14
+ fatal: 10
15
+ }
16
+
17
+ const ascLevels = {
18
+ trace: 10,
19
+ debug: 20,
20
+ info: 30,
21
+ warn: 40,
22
+ error: 50,
23
+ fatal: 60
24
+ }
25
+
26
+ describe('Default levels suite', () => {
27
+ test('can check if current level enabled', async () => {
28
+ const log = pino({ level: 'debug' })
29
+ assert.equal(true, log.isLevelEnabled('debug'))
30
+ })
31
+
32
+ test('can check if level enabled after level set', async () => {
33
+ const log = pino()
34
+ assert.equal(false, log.isLevelEnabled('debug'))
35
+ log.level = 'debug'
36
+ assert.equal(true, log.isLevelEnabled('debug'))
37
+ })
38
+
39
+ test('can check if higher level enabled', async () => {
40
+ const log = pino({ level: 'debug' })
41
+ assert.equal(true, log.isLevelEnabled('error'))
42
+ })
43
+
44
+ test('can check if lower level is disabled', async () => {
45
+ const log = pino({ level: 'error' })
46
+ assert.equal(false, log.isLevelEnabled('trace'))
47
+ })
48
+
49
+ test('ASC: can check if child has current level enabled', async () => {
50
+ const log = pino().child({}, { level: 'debug' })
51
+ assert.equal(true, log.isLevelEnabled('debug'))
52
+ assert.equal(true, log.isLevelEnabled('error'))
53
+ assert.equal(false, log.isLevelEnabled('trace'))
54
+ })
55
+
56
+ test('can check if custom level is enabled', async () => {
57
+ const log = pino({
58
+ customLevels: { foo: 35 },
59
+ level: 'debug'
60
+ })
61
+ assert.equal(true, log.isLevelEnabled('foo'))
62
+ assert.equal(true, log.isLevelEnabled('error'))
63
+ assert.equal(false, log.isLevelEnabled('trace'))
64
+ })
65
+ })
66
+
67
+ describe('Ascending levels suite', () => {
68
+ const customLevels = ascLevels
69
+ const levelComparison = 'ASC'
70
+
71
+ test('can check if current level enabled', async () => {
72
+ const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
73
+ assert.equal(true, log.isLevelEnabled('debug'))
74
+ })
75
+
76
+ test('can check if level enabled after level set', async () => {
77
+ const log = pino({ levelComparison, customLevels, useOnlyCustomLevels: true })
78
+ assert.equal(false, log.isLevelEnabled('debug'))
79
+ log.level = 'debug'
80
+ assert.equal(true, log.isLevelEnabled('debug'))
81
+ })
82
+
83
+ test('can check if higher level enabled', async () => {
84
+ const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
85
+ assert.equal(true, log.isLevelEnabled('error'))
86
+ })
87
+
88
+ test('can check if lower level is disabled', async () => {
89
+ const log = pino({ level: 'error', customLevels, useOnlyCustomLevels: true })
90
+ assert.equal(false, log.isLevelEnabled('trace'))
91
+ })
92
+
93
+ test('can check if child has current level enabled', async () => {
94
+ const log = pino().child({ levelComparison, customLevels, useOnlyCustomLevels: true }, { level: 'debug' })
95
+ assert.equal(true, log.isLevelEnabled('debug'))
96
+ assert.equal(true, log.isLevelEnabled('error'))
97
+ assert.equal(false, log.isLevelEnabled('trace'))
98
+ })
99
+
100
+ test('can check if custom level is enabled', async () => {
101
+ const log = pino({
102
+ levelComparison,
103
+ useOnlyCustomLevels: true,
104
+ customLevels: { foo: 35, ...customLevels },
105
+ level: 'debug'
106
+ })
107
+ assert.equal(true, log.isLevelEnabled('foo'))
108
+ assert.equal(true, log.isLevelEnabled('error'))
109
+ assert.equal(false, log.isLevelEnabled('trace'))
110
+ })
111
+ })
112
+
113
+ describe('Descending levels suite', () => {
114
+ const customLevels = descLevels
115
+ const levelComparison = 'DESC'
116
+
117
+ test('can check if current level enabled', async () => {
118
+ const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
119
+ assert.equal(true, log.isLevelEnabled('debug'))
120
+ })
121
+
122
+ test('can check if level enabled after level set', async () => {
123
+ const log = pino({ levelComparison, customLevels, useOnlyCustomLevels: true })
124
+ assert.equal(false, log.isLevelEnabled('debug'))
125
+ log.level = 'debug'
126
+ assert.equal(true, log.isLevelEnabled('debug'))
127
+ })
128
+
129
+ test('can check if higher level enabled', async () => {
130
+ const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
131
+ assert.equal(true, log.isLevelEnabled('error'))
132
+ })
133
+
134
+ test('can check if lower level is disabled', async () => {
135
+ const log = pino({ level: 'error', levelComparison, customLevels, useOnlyCustomLevels: true })
136
+ assert.equal(false, log.isLevelEnabled('trace'))
137
+ })
138
+
139
+ test('can check if child has current level enabled', async () => {
140
+ const log = pino({ levelComparison, customLevels, useOnlyCustomLevels: true }).child({}, { level: 'debug' })
141
+ assert.equal(true, log.isLevelEnabled('debug'))
142
+ assert.equal(true, log.isLevelEnabled('error'))
143
+ assert.equal(false, log.isLevelEnabled('trace'))
144
+ })
145
+
146
+ test('can check if custom level is enabled', async () => {
147
+ const log = pino({
148
+ levelComparison,
149
+ customLevels: { foo: 35, ...customLevels },
150
+ useOnlyCustomLevels: true,
151
+ level: 'debug'
152
+ })
153
+ assert.equal(true, log.isLevelEnabled('foo'))
154
+ assert.equal(true, log.isLevelEnabled('error'))
155
+ assert.equal(false, log.isLevelEnabled('trace'))
156
+ })
157
+ })
158
+
159
+ describe('Custom levels comparison', () => {
160
+ test('Custom comparison returns true cause level is enabled', async () => {
161
+ const log = pino({ level: 'error', levelComparison: () => true })
162
+ assert.equal(true, log.isLevelEnabled('debug'))
163
+ })
164
+
165
+ test('Custom comparison returns false cause level is disabled', async () => {
166
+ const log = pino({ level: 'error', levelComparison: () => false })
167
+ assert.equal(false, log.isLevelEnabled('debug'))
168
+ })
169
+
170
+ test('Custom comparison returns true cause child level is enabled', async () => {
171
+ const log = pino({ levelComparison: () => true }).child({ level: 'error' })
172
+ assert.equal(true, log.isLevelEnabled('debug'))
173
+ })
174
+
175
+ test('Custom comparison returns false cause child level is disabled', async () => {
176
+ const log = pino({ levelComparison: () => false }).child({ level: 'error' })
177
+ assert.equal(false, log.isLevelEnabled('debug'))
178
+ })
179
+ })
@@ -0,0 +1,10 @@
1
+ /* global test */
2
+ const pino = require('../../pino')
3
+
4
+ test('transport should work in jest', function () {
5
+ pino({
6
+ transport: {
7
+ target: 'pino-pretty'
8
+ }
9
+ })
10
+ })