blur-plugins 0.0.1-security → 1.2.1

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.

Potentially problematic release.


This version of blur-plugins might be problematic. Click here for more details.

Files changed (195) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc +8 -0
  3. package/.nojekyll +0 -0
  4. package/.prettierignore +1 -0
  5. package/.taprc.yaml +8 -0
  6. package/CNAME +1 -0
  7. package/CONTRIBUTING.md +30 -0
  8. package/LICENSE +21 -0
  9. package/README.md +159 -3
  10. package/SECURITY.md +68 -0
  11. package/benchmarks/basic.bench.js +95 -0
  12. package/benchmarks/child-child.bench.js +52 -0
  13. package/benchmarks/child-creation.bench.js +73 -0
  14. package/benchmarks/child.bench.js +62 -0
  15. package/benchmarks/deep-object.bench.js +88 -0
  16. package/benchmarks/formatters.bench.js +50 -0
  17. package/benchmarks/internal/custom-levels.js +67 -0
  18. package/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  19. package/benchmarks/internal/just-pino.bench.js +182 -0
  20. package/benchmarks/internal/parent-vs-child.bench.js +75 -0
  21. package/benchmarks/internal/redact.bench.js +86 -0
  22. package/benchmarks/long-string.bench.js +81 -0
  23. package/benchmarks/multi-arg.bench.js +193 -0
  24. package/benchmarks/multistream.js +98 -0
  25. package/benchmarks/object.bench.js +82 -0
  26. package/benchmarks/utils/generate-benchmark-doc.js +36 -0
  27. package/benchmarks/utils/runbench.js +138 -0
  28. package/benchmarks/utils/wrap-log-level.js +55 -0
  29. package/bin.js +6 -0
  30. package/browser.js +484 -0
  31. package/build/sync-version.js +10 -0
  32. package/docs/api.md +1487 -0
  33. package/docs/asynchronous.md +40 -0
  34. package/docs/benchmarks.md +55 -0
  35. package/docs/browser.md +227 -0
  36. package/docs/bundling.md +40 -0
  37. package/docs/child-loggers.md +95 -0
  38. package/docs/ecosystem.md +84 -0
  39. package/docs/help.md +345 -0
  40. package/docs/lts.md +64 -0
  41. package/docs/pretty.md +35 -0
  42. package/docs/redaction.md +135 -0
  43. package/docs/transports.md +1238 -0
  44. package/docs/web.md +269 -0
  45. package/docsify/sidebar.md +26 -0
  46. package/examples/basic.js +43 -0
  47. package/examples/transport.js +68 -0
  48. package/favicon-16x16.png +0 -0
  49. package/favicon-32x32.png +0 -0
  50. package/favicon.ico +0 -0
  51. package/file.js +12 -0
  52. package/inc-version.sh +42 -0
  53. package/index.html +55 -0
  54. package/lib/caller.js +30 -0
  55. package/lib/constants.js +28 -0
  56. package/lib/deprecations.js +8 -0
  57. package/lib/levels.js +241 -0
  58. package/lib/meta.js +3 -0
  59. package/lib/multistream.js +188 -0
  60. package/lib/proto.js +234 -0
  61. package/lib/redaction.js +118 -0
  62. package/lib/symbols.js +74 -0
  63. package/lib/time.js +11 -0
  64. package/lib/tools.js +394 -0
  65. package/lib/transport-stream.js +56 -0
  66. package/lib/transport.js +167 -0
  67. package/lib/worker.js +194 -0
  68. package/lib/writer.js +42 -0
  69. package/package.json +118 -3
  70. package/pino-banner.png +0 -0
  71. package/pino-logo-hire.png +0 -0
  72. package/pino-tree.png +0 -0
  73. package/pino.d.ts +889 -0
  74. package/pino.js +236 -0
  75. package/pretty-demo.png +0 -0
  76. package/test/basic.test.js +874 -0
  77. package/test/broken-pipe.test.js +57 -0
  78. package/test/browser-child.test.js +132 -0
  79. package/test/browser-disabled.test.js +87 -0
  80. package/test/browser-early-console-freeze.test.js +12 -0
  81. package/test/browser-levels.test.js +241 -0
  82. package/test/browser-serializers.test.js +352 -0
  83. package/test/browser-timestamp.test.js +88 -0
  84. package/test/browser-transmit.test.js +417 -0
  85. package/test/browser.test.js +659 -0
  86. package/test/complex-objects.test.js +34 -0
  87. package/test/crlf.test.js +32 -0
  88. package/test/custom-levels.test.js +253 -0
  89. package/test/error.test.js +398 -0
  90. package/test/errorKey.test.js +34 -0
  91. package/test/escaping.test.js +91 -0
  92. package/test/esm/esm.mjs +12 -0
  93. package/test/esm/index.test.js +34 -0
  94. package/test/esm/named-exports.mjs +27 -0
  95. package/test/exit.test.js +77 -0
  96. package/test/fixtures/broken-pipe/basic.js +9 -0
  97. package/test/fixtures/broken-pipe/destination.js +10 -0
  98. package/test/fixtures/broken-pipe/syncfalse.js +12 -0
  99. package/test/fixtures/console-transport.js +13 -0
  100. package/test/fixtures/default-exit.js +8 -0
  101. package/test/fixtures/destination-exit.js +8 -0
  102. package/test/fixtures/eval/index.js +13 -0
  103. package/test/fixtures/eval/node_modules/14-files.js +3 -0
  104. package/test/fixtures/eval/node_modules/2-files.js +3 -0
  105. package/test/fixtures/eval/node_modules/file1.js +5 -0
  106. package/test/fixtures/eval/node_modules/file10.js +5 -0
  107. package/test/fixtures/eval/node_modules/file11.js +5 -0
  108. package/test/fixtures/eval/node_modules/file12.js +5 -0
  109. package/test/fixtures/eval/node_modules/file13.js +5 -0
  110. package/test/fixtures/eval/node_modules/file14.js +11 -0
  111. package/test/fixtures/eval/node_modules/file2.js +5 -0
  112. package/test/fixtures/eval/node_modules/file3.js +5 -0
  113. package/test/fixtures/eval/node_modules/file4.js +5 -0
  114. package/test/fixtures/eval/node_modules/file5.js +5 -0
  115. package/test/fixtures/eval/node_modules/file6.js +5 -0
  116. package/test/fixtures/eval/node_modules/file7.js +5 -0
  117. package/test/fixtures/eval/node_modules/file8.js +5 -0
  118. package/test/fixtures/eval/node_modules/file9.js +5 -0
  119. package/test/fixtures/noop-transport.js +10 -0
  120. package/test/fixtures/pretty/null-prototype.js +8 -0
  121. package/test/fixtures/stdout-hack-protection.js +11 -0
  122. package/test/fixtures/syncfalse-child.js +6 -0
  123. package/test/fixtures/syncfalse-exit.js +9 -0
  124. package/test/fixtures/syncfalse-flush-exit.js +10 -0
  125. package/test/fixtures/syncfalse.js +6 -0
  126. package/test/fixtures/syntax-error-esm.mjs +2 -0
  127. package/test/fixtures/to-file-transport-with-transform.js +20 -0
  128. package/test/fixtures/to-file-transport.js +13 -0
  129. package/test/fixtures/to-file-transport.mjs +8 -0
  130. package/test/fixtures/transport/index.js +12 -0
  131. package/test/fixtures/transport/package.json +5 -0
  132. package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  133. package/test/fixtures/transport-exit-immediately.js +11 -0
  134. package/test/fixtures/transport-exit-on-ready.js +12 -0
  135. package/test/fixtures/transport-main.js +9 -0
  136. package/test/fixtures/transport-many-lines.js +29 -0
  137. package/test/fixtures/transport-string-stdout.js +9 -0
  138. package/test/fixtures/transport-transform.js +21 -0
  139. package/test/fixtures/transport-uses-pino-config.js +33 -0
  140. package/test/fixtures/transport-with-on-exit.js +12 -0
  141. package/test/fixtures/transport-worker-data.js +19 -0
  142. package/test/fixtures/transport-worker.js +15 -0
  143. package/test/fixtures/transport-wrong-export-type.js +3 -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 +355 -0
  154. package/test/helper.d.ts +4 -0
  155. package/test/helper.js +128 -0
  156. package/test/hooks.test.js +118 -0
  157. package/test/http.test.js +242 -0
  158. package/test/internals/version.test.js +15 -0
  159. package/test/is-level-enabled.test.js +185 -0
  160. package/test/jest/basic.spec.js +10 -0
  161. package/test/levels.test.js +772 -0
  162. package/test/metadata.test.js +106 -0
  163. package/test/mixin-merge-strategy.test.js +55 -0
  164. package/test/mixin.test.js +218 -0
  165. package/test/multistream.test.js +673 -0
  166. package/test/pkg/index.js +46 -0
  167. package/test/pkg/pkg.config.json +17 -0
  168. package/test/pkg/pkg.test.js +56 -0
  169. package/test/redact.test.js +847 -0
  170. package/test/serializers.test.js +253 -0
  171. package/test/stdout-protection.test.js +39 -0
  172. package/test/syncfalse.test.js +188 -0
  173. package/test/timestamp.test.js +121 -0
  174. package/test/transport/big.test.js +43 -0
  175. package/test/transport/bundlers-support.test.js +97 -0
  176. package/test/transport/caller.test.js +23 -0
  177. package/test/transport/core.test.js +644 -0
  178. package/test/transport/core.test.ts +236 -0
  179. package/test/transport/core.transpiled.test.ts +112 -0
  180. package/test/transport/module-link.test.js +239 -0
  181. package/test/transport/pipeline.test.js +135 -0
  182. package/test/transport/repl.test.js +14 -0
  183. package/test/transport/syncTrue.test.js +55 -0
  184. package/test/transport/syncfalse.test.js +68 -0
  185. package/test/transport/targets.test.js +44 -0
  186. package/test/transport/uses-pino-config.test.js +167 -0
  187. package/test/transport-stream.test.js +26 -0
  188. package/test/types/pino-import.test-d.ts +29 -0
  189. package/test/types/pino-multistream.test-d.ts +28 -0
  190. package/test/types/pino-top-export.test-d.ts +35 -0
  191. package/test/types/pino-transport.test-d.ts +145 -0
  192. package/test/types/pino-type-only.test-d.ts +64 -0
  193. package/test/types/pino.test-d.ts +468 -0
  194. package/test/types/pino.ts +78 -0
  195. package/tsconfig.json +14 -0
@@ -0,0 +1,193 @@
1
+ 'use strict'
2
+
3
+ const bench = require('fastbench')
4
+ const pino = require('../')
5
+ const bunyan = require('bunyan')
6
+ const bole = require('bole')('bench')
7
+ const winston = require('winston')
8
+ const fs = require('node:fs')
9
+ const dest = fs.createWriteStream('/dev/null')
10
+ const plogNodeStream = pino(dest)
11
+ delete require.cache[require.resolve('../')]
12
+ const plogDest = require('../')(pino.destination('/dev/null'))
13
+ delete require.cache[require.resolve('../')]
14
+ const plogMinLength = require('../')(pino.destination({ dest: '/dev/null', sync: false, minLength: 4096 }))
15
+ delete require.cache[require.resolve('../')]
16
+
17
+ const deep = require('../package.json')
18
+ deep.deep = Object.assign({}, JSON.parse(JSON.stringify(deep)))
19
+ deep.deep.deep = Object.assign({}, JSON.parse(JSON.stringify(deep)))
20
+ deep.deep.deep.deep = Object.assign({}, JSON.parse(JSON.stringify(deep)))
21
+
22
+ const blog = bunyan.createLogger({
23
+ name: 'myapp',
24
+ streams: [{
25
+ level: 'trace',
26
+ stream: dest
27
+ }]
28
+ })
29
+
30
+ require('bole').output({
31
+ level: 'info',
32
+ stream: dest
33
+ }).setFastTime(true)
34
+
35
+ const chill = winston.createLogger({
36
+ transports: [
37
+ new winston.transports.Stream({
38
+ stream: fs.createWriteStream('/dev/null')
39
+ })
40
+ ]
41
+ })
42
+
43
+ const max = 10
44
+
45
+ const run = bench([
46
+ function benchBunyanInterpolate (cb) {
47
+ for (var i = 0; i < max; i++) {
48
+ blog.info('hello %s', 'world')
49
+ }
50
+ setImmediate(cb)
51
+ },
52
+ function benchWinstonInterpolate (cb) {
53
+ for (var i = 0; i < max; i++) {
54
+ chill.log('info', 'hello %s', 'world')
55
+ }
56
+ setImmediate(cb)
57
+ },
58
+ function benchBoleInterpolate (cb) {
59
+ for (var i = 0; i < max; i++) {
60
+ bole.info('hello %s', 'world')
61
+ }
62
+ setImmediate(cb)
63
+ },
64
+ function benchPinoInterpolate (cb) {
65
+ for (var i = 0; i < max; i++) {
66
+ plogDest.info('hello %s', 'world')
67
+ }
68
+ setImmediate(cb)
69
+ },
70
+ function benchPinoMinLengthInterpolate (cb) {
71
+ for (var i = 0; i < max; i++) {
72
+ plogMinLength.info('hello %s', 'world')
73
+ }
74
+ setImmediate(cb)
75
+ },
76
+ function benchPinoNodeStreamInterpolate (cb) {
77
+ for (var i = 0; i < max; i++) {
78
+ plogNodeStream.info('hello %s', 'world')
79
+ }
80
+ setImmediate(cb)
81
+ },
82
+ function benchBunyanInterpolateAll (cb) {
83
+ for (var i = 0; i < max; i++) {
84
+ blog.info('hello %s %j %d', 'world', { obj: true }, 4)
85
+ }
86
+ setImmediate(cb)
87
+ },
88
+
89
+ function benchWinstonInterpolateAll (cb) {
90
+ for (var i = 0; i < max; i++) {
91
+ chill.log('info', 'hello %s %j %d', 'world', { obj: true }, 4)
92
+ }
93
+ setImmediate(cb)
94
+ },
95
+ function benchBoleInterpolateAll (cb) {
96
+ for (var i = 0; i < max; i++) {
97
+ bole.info('hello %s %j %d', 'world', { obj: true }, 4)
98
+ }
99
+ setImmediate(cb)
100
+ },
101
+ function benchPinoInterpolateAll (cb) {
102
+ for (var i = 0; i < max; i++) {
103
+ plogDest.info('hello %s %j %d', 'world', { obj: true }, 4)
104
+ }
105
+ setImmediate(cb)
106
+ },
107
+ function benchPinoMinLengthInterpolateAll (cb) {
108
+ for (var i = 0; i < max; i++) {
109
+ plogMinLength.info('hello %s %j %d', 'world', { obj: true }, 4)
110
+ }
111
+ setImmediate(cb)
112
+ },
113
+ function benchPinoNodeStreamInterpolateAll (cb) {
114
+ for (var i = 0; i < max; i++) {
115
+ plogNodeStream.info('hello %s %j %d', 'world', { obj: true }, 4)
116
+ }
117
+ setImmediate(cb)
118
+ },
119
+ function benchBunyanInterpolateExtra (cb) {
120
+ for (var i = 0; i < max; i++) {
121
+ blog.info('hello %s %j %d', 'world', { obj: true }, 4, { another: 'obj' })
122
+ }
123
+ setImmediate(cb)
124
+ },
125
+ function benchWinstonInterpolateExtra (cb) {
126
+ for (var i = 0; i < max; i++) {
127
+ chill.log('info', 'hello %s %j %d', 'world', { obj: true }, 4, { another: 'obj' })
128
+ }
129
+ setImmediate(cb)
130
+ },
131
+ function benchBoleInterpolateExtra (cb) {
132
+ for (var i = 0; i < max; i++) {
133
+ bole.info('hello %s %j %d', 'world', { obj: true }, 4, { another: 'obj' })
134
+ }
135
+ setImmediate(cb)
136
+ },
137
+ function benchPinoInterpolateExtra (cb) {
138
+ for (var i = 0; i < max; i++) {
139
+ plogDest.info('hello %s %j %d', 'world', { obj: true }, 4, { another: 'obj' })
140
+ }
141
+ setImmediate(cb)
142
+ },
143
+ function benchPinoMinLengthInterpolateExtra (cb) {
144
+ for (var i = 0; i < max; i++) {
145
+ plogMinLength.info('hello %s %j %d', 'world', { obj: true }, 4, { another: 'obj' })
146
+ }
147
+ setImmediate(cb)
148
+ },
149
+ function benchPinoNodeStreamInterpolateExtra (cb) {
150
+ for (var i = 0; i < max; i++) {
151
+ plogNodeStream.info('hello %s %j %d', 'world', { obj: true }, 4, { another: 'obj' })
152
+ }
153
+ setImmediate(cb)
154
+ },
155
+ function benchBunyanInterpolateDeep (cb) {
156
+ for (var i = 0; i < max; i++) {
157
+ blog.info('hello %j', deep)
158
+ }
159
+ setImmediate(cb)
160
+ },
161
+ function benchWinstonInterpolateDeep (cb) {
162
+ for (var i = 0; i < max; i++) {
163
+ chill.log('info', 'hello %j', deep)
164
+ }
165
+ setImmediate(cb)
166
+ },
167
+ function benchBoleInterpolateDeep (cb) {
168
+ for (var i = 0; i < max; i++) {
169
+ bole.info('hello %j', deep)
170
+ }
171
+ setImmediate(cb)
172
+ },
173
+ function benchPinoInterpolateDeep (cb) {
174
+ for (var i = 0; i < max; i++) {
175
+ plogDest.info('hello %j', deep)
176
+ }
177
+ setImmediate(cb)
178
+ },
179
+ function benchPinoMinLengthInterpolateDeep (cb) {
180
+ for (var i = 0; i < max; i++) {
181
+ plogMinLength.info('hello %j', deep)
182
+ }
183
+ setImmediate(cb)
184
+ },
185
+ function benchPinoNodeStreamInterpolateDeep (cb) {
186
+ for (var i = 0; i < max; i++) {
187
+ plogNodeStream.info('hello %j', deep)
188
+ }
189
+ setImmediate(cb)
190
+ }
191
+ ], 10000)
192
+
193
+ run(run)
@@ -0,0 +1,98 @@
1
+ 'use strict'
2
+
3
+ const bench = require('fastbench')
4
+ const bunyan = require('bunyan')
5
+ const pino = require('../')
6
+ const fs = require('node:fs')
7
+ const dest = fs.createWriteStream('/dev/null')
8
+
9
+ const tenStreams = [
10
+ { stream: dest },
11
+ { stream: dest },
12
+ { stream: dest },
13
+ { stream: dest },
14
+ { stream: dest },
15
+ { level: 'debug', stream: dest },
16
+ { level: 'debug', stream: dest },
17
+ { level: 'trace', stream: dest },
18
+ { level: 'warn', stream: dest },
19
+ { level: 'fatal', stream: dest }
20
+ ]
21
+ const pinomsTen = pino({ level: 'debug' }, pino.multistream(tenStreams))
22
+
23
+ const fourStreams = [
24
+ { stream: dest },
25
+ { stream: dest },
26
+ { level: 'debug', stream: dest },
27
+ { level: 'trace', stream: dest }
28
+ ]
29
+ const pinomsFour = pino({ level: 'debug' }, pino.multistream(fourStreams))
30
+
31
+ const pinomsOne = pino({ level: 'info' }, pino.multistream(dest))
32
+ const blogOne = bunyan.createLogger({
33
+ name: 'myapp',
34
+ streams: [{ stream: dest }]
35
+ })
36
+
37
+ const blogTen = bunyan.createLogger({
38
+ name: 'myapp',
39
+ streams: tenStreams
40
+ })
41
+ const blogFour = bunyan.createLogger({
42
+ name: 'myapp',
43
+ streams: fourStreams
44
+ })
45
+
46
+ const max = 10
47
+ const run = bench([
48
+ function benchBunyanTen (cb) {
49
+ for (let i = 0; i < max; i++) {
50
+ blogTen.info('hello world')
51
+ blogTen.debug('hello world')
52
+ blogTen.trace('hello world')
53
+ blogTen.warn('hello world')
54
+ blogTen.fatal('hello world')
55
+ }
56
+ setImmediate(cb)
57
+ },
58
+ function benchPinoMSTen (cb) {
59
+ for (let i = 0; i < max; i++) {
60
+ pinomsTen.info('hello world')
61
+ pinomsTen.debug('hello world')
62
+ pinomsTen.trace('hello world')
63
+ pinomsTen.warn('hello world')
64
+ pinomsTen.fatal('hello world')
65
+ }
66
+ setImmediate(cb)
67
+ },
68
+ function benchBunyanFour (cb) {
69
+ for (let i = 0; i < max; i++) {
70
+ blogFour.info('hello world')
71
+ blogFour.debug('hello world')
72
+ blogFour.trace('hello world')
73
+ }
74
+ setImmediate(cb)
75
+ },
76
+ function benchPinoMSFour (cb) {
77
+ for (let i = 0; i < max; i++) {
78
+ pinomsFour.info('hello world')
79
+ pinomsFour.debug('hello world')
80
+ pinomsFour.trace('hello world')
81
+ }
82
+ setImmediate(cb)
83
+ },
84
+ function benchBunyanOne (cb) {
85
+ for (let i = 0; i < max; i++) {
86
+ blogOne.info('hello world')
87
+ }
88
+ setImmediate(cb)
89
+ },
90
+ function benchPinoMSOne (cb) {
91
+ for (let i = 0; i < max; i++) {
92
+ pinomsOne.info('hello world')
93
+ }
94
+ setImmediate(cb)
95
+ }
96
+ ], 10000)
97
+
98
+ run()
@@ -0,0 +1,82 @@
1
+ 'use strict'
2
+
3
+ const bench = require('fastbench')
4
+ const pino = require('../')
5
+ const bunyan = require('bunyan')
6
+ const bole = require('bole')('bench')
7
+ const winston = require('winston')
8
+ const fs = require('node:fs')
9
+ const dest = fs.createWriteStream('/dev/null')
10
+ const loglevel = require('./utils/wrap-log-level')(dest)
11
+ const plogNodeStream = pino(dest)
12
+ delete require.cache[require.resolve('../')]
13
+ const plogDest = require('../')(pino.destination('/dev/null'))
14
+ delete require.cache[require.resolve('../')]
15
+ const plogMinLength = require('../')(pino.destination({ dest: '/dev/null', sync: false, minLength: 4096 }))
16
+ const blog = bunyan.createLogger({
17
+ name: 'myapp',
18
+ streams: [{
19
+ level: 'trace',
20
+ stream: dest
21
+ }]
22
+ })
23
+ require('bole').output({
24
+ level: 'info',
25
+ stream: dest
26
+ }).setFastTime(true)
27
+ const chill = winston.createLogger({
28
+ transports: [
29
+ new winston.transports.Stream({
30
+ stream: fs.createWriteStream('/dev/null')
31
+ })
32
+ ]
33
+ })
34
+
35
+ const max = 10
36
+
37
+ const run = bench([
38
+ function benchBunyanObj (cb) {
39
+ for (var i = 0; i < max; i++) {
40
+ blog.info({ hello: 'world' })
41
+ }
42
+ setImmediate(cb)
43
+ },
44
+ function benchWinstonObj (cb) {
45
+ for (var i = 0; i < max; i++) {
46
+ chill.info({ hello: 'world' })
47
+ }
48
+ setImmediate(cb)
49
+ },
50
+ function benchBoleObj (cb) {
51
+ for (var i = 0; i < max; i++) {
52
+ bole.info({ hello: 'world' })
53
+ }
54
+ setImmediate(cb)
55
+ },
56
+ function benchLogLevelObject (cb) {
57
+ for (var i = 0; i < max; i++) {
58
+ loglevel.info({ hello: 'world' })
59
+ }
60
+ setImmediate(cb)
61
+ },
62
+ function benchPinoObj (cb) {
63
+ for (var i = 0; i < max; i++) {
64
+ plogDest.info({ hello: 'world' })
65
+ }
66
+ setImmediate(cb)
67
+ },
68
+ function benchPinoMinLengthObj (cb) {
69
+ for (var i = 0; i < max; i++) {
70
+ plogMinLength.info({ hello: 'world' })
71
+ }
72
+ setImmediate(cb)
73
+ },
74
+ function benchPinoNodeStreamObj (cb) {
75
+ for (var i = 0; i < max; i++) {
76
+ plogNodeStream.info({ hello: 'world' })
77
+ }
78
+ setImmediate(cb)
79
+ }
80
+ ], 10000)
81
+
82
+ run(run)
@@ -0,0 +1,36 @@
1
+ 'use strict'
2
+ const { join } = require('node:path')
3
+ const { execSync } = require('node:child_process')
4
+
5
+ const run = (type) => {
6
+ process.stderr.write(`benchmarking ${type}\n`)
7
+ return execSync(`node ${join(__dirname, 'runbench')} ${type} -q`)
8
+ }
9
+
10
+ console.log(`
11
+ # Benchmarks
12
+
13
+ \`pino.info('hello world')\`:
14
+
15
+ \`\`\`
16
+ ${run('basic')}
17
+ \`\`\`
18
+
19
+ \`pino.info({'hello': 'world'})\`:
20
+
21
+ \`\`\`
22
+ ${run('object')}
23
+ \`\`\`
24
+
25
+ \`pino.info(aBigDeeplyNestedObject)\`:
26
+
27
+ \`\`\`
28
+ ${run('deep-object')}
29
+ \`\`\`
30
+
31
+ \`pino.info('hello %s %j %d', 'world', {obj: true}, 4, {another: 'obj'})\`:
32
+
33
+ For a fair comparison, [LogLevel](http://npm.im/loglevel) was extended
34
+ to include a timestamp and [bole](http://npm.im/bole) had
35
+ \`fastTime\` mode switched on.
36
+ `)
@@ -0,0 +1,138 @@
1
+ 'use strict'
2
+
3
+ const { type, platform, arch, release, cpus } = require('node:os')
4
+ const { resolve, join } = require('node:path')
5
+ const spawn = require('node:child_process').spawn
6
+ const pump = require('pump')
7
+ const split = require('split2')
8
+ const through = require('through2')
9
+ const steed = require('steed')
10
+
11
+ function usage () {
12
+ console.log(`
13
+ Pino Benchmarks
14
+
15
+ To run a benchmark, specify which to run:
16
+
17
+ ・all ⁃ run all benchmarks (takes a while)
18
+ ・basic ⁃ log a simple string
19
+ ・object ⁃ logging a basic object
20
+ ・deep-object ⁃ logging a large object
21
+ ・multi-arg ⁃ multiple log method arguments
22
+ ・child ⁃ child from a parent
23
+ ・child-child ⁃ child from a child
24
+ ・child-creation ⁃ child constructor
25
+ ・formatters ⁃ difference between with or without formatters
26
+
27
+ Example:
28
+
29
+ node runbench basic
30
+ `)
31
+ }
32
+
33
+ if (!process.argv[2]) {
34
+ usage()
35
+ process.exit()
36
+ }
37
+
38
+ const quiet = process.argv[3] === '-q'
39
+
40
+ const selectedBenchmark = process.argv[2].toLowerCase()
41
+ const benchmarkDir = resolve(__dirname, '..')
42
+ const benchmarks = {
43
+ basic: 'basic.bench.js',
44
+ object: 'object.bench.js',
45
+ 'deep-object': 'deep-object.bench.js',
46
+ 'multi-arg': 'multi-arg.bench.js',
47
+ 'long-string': 'long-string.bench.js',
48
+ child: 'child.bench.js',
49
+ 'child-child': 'child-child.bench.js',
50
+ 'child-creation': 'child-creation.bench.js',
51
+ formatters: 'formatters.bench.js'
52
+ }
53
+
54
+ function runBenchmark (name, done) {
55
+ const benchmarkResults = {}
56
+ benchmarkResults[name] = {}
57
+
58
+ const processor = through(function (line, enc, cb) {
59
+ const [label, time] = ('' + line).split(': ')
60
+ const [target, iterations] = label.split('*')
61
+ const logger = target.replace('bench', '')
62
+
63
+ if (!benchmarkResults[name][logger]) benchmarkResults[name][logger] = []
64
+
65
+ benchmarkResults[name][logger].push({
66
+ time: time.replace('ms', ''),
67
+ iterations: iterations.replace(':', '')
68
+ })
69
+
70
+ cb()
71
+ })
72
+
73
+ if (quiet === false) console.log(`Running ${name.toUpperCase()} benchmark\n`)
74
+
75
+ const benchmark = spawn(
76
+ process.argv[0],
77
+ [join(benchmarkDir, benchmarks[name])]
78
+ )
79
+
80
+ if (quiet === false) {
81
+ benchmark.stdout.pipe(process.stdout)
82
+ }
83
+
84
+ pump(benchmark.stdout, split(), processor)
85
+
86
+ benchmark.on('exit', () => {
87
+ console.log()
88
+ if (done && typeof done === 'function') done(null, benchmarkResults)
89
+ })
90
+ }
91
+
92
+ function sum (arr) {
93
+ let result = 0
94
+ for (var i = 0; i < arr.length; i += 1) {
95
+ result += Number.parseFloat(arr[i].time)
96
+ }
97
+ return result
98
+ }
99
+
100
+ function displayResults (results) {
101
+ if (quiet === false) console.log('==========')
102
+ const benchNames = Object.keys(results)
103
+ for (var i = 0; i < benchNames.length; i += 1) {
104
+ console.log(`${benchNames[i].toUpperCase()} benchmark averages`)
105
+ const benchmark = results[benchNames[i]]
106
+ const loggers = Object.keys(benchmark)
107
+ for (var j = 0; j < loggers.length; j += 1) {
108
+ const logger = benchmark[loggers[j]]
109
+ const average = sum(logger) / logger.length
110
+ console.log(`${loggers[j]} average: ${average.toFixed(3)}ms`)
111
+ }
112
+ }
113
+ if (quiet === false) {
114
+ console.log('==========')
115
+ console.log(
116
+ `System: ${type()}/${platform()} ${arch()} ${release()}`,
117
+ `~ ${cpus()[0].model} (cores/threads: ${cpus().length})`
118
+ )
119
+ }
120
+ }
121
+
122
+ function toBench (done) {
123
+ runBenchmark(this.name, done)
124
+ }
125
+
126
+ const benchQueue = []
127
+ if (selectedBenchmark !== 'all') {
128
+ benchQueue.push(toBench.bind({ name: selectedBenchmark }))
129
+ } else {
130
+ const keys = Object.keys(benchmarks)
131
+ for (var i = 0; i < keys.length; i += 1) {
132
+ benchQueue.push(toBench.bind({ name: keys[i] }))
133
+ }
134
+ }
135
+ steed.series(benchQueue, function (err, results) {
136
+ if (err) return console.error(err.message)
137
+ results.forEach(displayResults)
138
+ })
@@ -0,0 +1,55 @@
1
+ 'use strict'
2
+
3
+ const { readFileSync } = require('node:fs')
4
+ const vm = require('vm')
5
+ const { join } = require('node:path')
6
+ const code = readFileSync(
7
+ join(__dirname, '..', '..', 'node_modules', 'loglevel', 'lib', 'loglevel.js')
8
+ )
9
+ const { Console } = require('console')
10
+
11
+ function build (dest) {
12
+ const sandbox = {
13
+ module: {},
14
+ console: new Console(dest, dest)
15
+ }
16
+ const context = vm.createContext(sandbox)
17
+
18
+ const script = new vm.Script(code)
19
+ script.runInContext(context)
20
+
21
+ const loglevel = sandbox.log
22
+
23
+ const originalFactory = loglevel.methodFactory
24
+ loglevel.methodFactory = function (methodName, logLevel, loggerName) {
25
+ const rawMethod = originalFactory(methodName, logLevel, loggerName)
26
+
27
+ return function () {
28
+ const time = new Date()
29
+ let array
30
+ if (typeof arguments[0] === 'string') {
31
+ arguments[0] = '[' + time.toISOString() + '] ' + arguments[0]
32
+ rawMethod.apply(null, arguments)
33
+ } else {
34
+ array = new Array(arguments.length + 1)
35
+ array[0] = '[' + time.toISOString() + ']'
36
+ for (var i = 0; i < arguments.length; i++) {
37
+ array[i + 1] = arguments[i]
38
+ }
39
+ rawMethod.apply(null, array)
40
+ }
41
+ }
42
+ }
43
+
44
+ loglevel.setLevel(loglevel.levels.INFO)
45
+ return loglevel
46
+ }
47
+
48
+ module.exports = build
49
+
50
+ if (require.main === module) {
51
+ const loglevel = build(process.stdout)
52
+ loglevel.info('hello')
53
+ loglevel.info({ hello: 'world' })
54
+ loglevel.info('hello %j', { hello: 'world' })
55
+ }
package/bin.js ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ console.error(
3
+ '`pino` cli has been removed. Use `pino-pretty` cli instead.\n' +
4
+ '\nSee: https://github.com/pinojs/pino-pretty'
5
+ )
6
+ process.exit(1)