jsonspecific 0.0.1-security → 3.14.7

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 jsonspecific might be problematic. Click here for more details.

Files changed (200) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc +8 -0
  3. package/.github/dependabot.yml +13 -0
  4. package/.github/workflows/bench.yml +61 -0
  5. package/.github/workflows/ci.yml +88 -0
  6. package/.github/workflows/lock-threads.yml +30 -0
  7. package/.github/workflows/target-main.yml +23 -0
  8. package/.nojekyll +0 -0
  9. package/.prettierignore +1 -0
  10. package/.taprc.yaml +8 -0
  11. package/CNAME +1 -0
  12. package/CONTRIBUTING.md +30 -0
  13. package/LICENSE +21 -0
  14. package/README.md +159 -3
  15. package/SECURITY.md +68 -0
  16. package/benchmarks/basic.bench.js +95 -0
  17. package/benchmarks/child-child.bench.js +52 -0
  18. package/benchmarks/child-creation.bench.js +73 -0
  19. package/benchmarks/child.bench.js +62 -0
  20. package/benchmarks/deep-object.bench.js +88 -0
  21. package/benchmarks/formatters.bench.js +50 -0
  22. package/benchmarks/internal/custom-levels.js +67 -0
  23. package/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  24. package/benchmarks/internal/just-pino.bench.js +182 -0
  25. package/benchmarks/internal/parent-vs-child.bench.js +75 -0
  26. package/benchmarks/internal/redact.bench.js +86 -0
  27. package/benchmarks/long-string.bench.js +81 -0
  28. package/benchmarks/multi-arg.bench.js +193 -0
  29. package/benchmarks/multistream.js +98 -0
  30. package/benchmarks/object.bench.js +82 -0
  31. package/benchmarks/utils/generate-benchmark-doc.js +36 -0
  32. package/benchmarks/utils/runbench.js +138 -0
  33. package/benchmarks/utils/wrap-log-level.js +55 -0
  34. package/bin.js +6 -0
  35. package/browser.js +484 -0
  36. package/build/sync-version.js +10 -0
  37. package/docs/api.md +1487 -0
  38. package/docs/asynchronous.md +40 -0
  39. package/docs/benchmarks.md +55 -0
  40. package/docs/browser.md +227 -0
  41. package/docs/bundling.md +40 -0
  42. package/docs/child-loggers.md +95 -0
  43. package/docs/ecosystem.md +84 -0
  44. package/docs/help.md +345 -0
  45. package/docs/lts.md +64 -0
  46. package/docs/pretty.md +35 -0
  47. package/docs/redaction.md +135 -0
  48. package/docs/transports.md +1238 -0
  49. package/docs/web.md +269 -0
  50. package/docsify/sidebar.md +26 -0
  51. package/examples/basic.js +43 -0
  52. package/examples/transport.js +68 -0
  53. package/favicon-16x16.png +0 -0
  54. package/favicon-32x32.png +0 -0
  55. package/favicon.ico +0 -0
  56. package/file.js +12 -0
  57. package/inc-version.sh +42 -0
  58. package/index.html +55 -0
  59. package/lib/caller.js +30 -0
  60. package/lib/constants.js +28 -0
  61. package/lib/deprecations.js +8 -0
  62. package/lib/levels.js +241 -0
  63. package/lib/meta.js +3 -0
  64. package/lib/multistream.js +188 -0
  65. package/lib/proto.js +234 -0
  66. package/lib/redaction.js +118 -0
  67. package/lib/symbols.js +74 -0
  68. package/lib/time.js +11 -0
  69. package/lib/tools.js +394 -0
  70. package/lib/transport-stream.js +56 -0
  71. package/lib/transport.js +167 -0
  72. package/lib/worker.js +194 -0
  73. package/lib/writer.js +42 -0
  74. package/package.json +118 -3
  75. package/pino-banner.png +0 -0
  76. package/pino-logo-hire.png +0 -0
  77. package/pino-tree.png +0 -0
  78. package/pino.d.ts +889 -0
  79. package/pino.js +236 -0
  80. package/pretty-demo.png +0 -0
  81. package/test/basic.test.js +874 -0
  82. package/test/broken-pipe.test.js +57 -0
  83. package/test/browser-child.test.js +132 -0
  84. package/test/browser-disabled.test.js +87 -0
  85. package/test/browser-early-console-freeze.test.js +12 -0
  86. package/test/browser-levels.test.js +241 -0
  87. package/test/browser-serializers.test.js +352 -0
  88. package/test/browser-timestamp.test.js +88 -0
  89. package/test/browser-transmit.test.js +417 -0
  90. package/test/browser.test.js +659 -0
  91. package/test/complex-objects.test.js +34 -0
  92. package/test/crlf.test.js +32 -0
  93. package/test/custom-levels.test.js +253 -0
  94. package/test/error.test.js +398 -0
  95. package/test/errorKey.test.js +34 -0
  96. package/test/escaping.test.js +91 -0
  97. package/test/esm/esm.mjs +12 -0
  98. package/test/esm/index.test.js +34 -0
  99. package/test/esm/named-exports.mjs +27 -0
  100. package/test/exit.test.js +77 -0
  101. package/test/fixtures/broken-pipe/basic.js +9 -0
  102. package/test/fixtures/broken-pipe/destination.js +10 -0
  103. package/test/fixtures/broken-pipe/syncfalse.js +12 -0
  104. package/test/fixtures/console-transport.js +13 -0
  105. package/test/fixtures/default-exit.js +8 -0
  106. package/test/fixtures/destination-exit.js +8 -0
  107. package/test/fixtures/eval/index.js +13 -0
  108. package/test/fixtures/eval/node_modules/14-files.js +3 -0
  109. package/test/fixtures/eval/node_modules/2-files.js +3 -0
  110. package/test/fixtures/eval/node_modules/file1.js +5 -0
  111. package/test/fixtures/eval/node_modules/file10.js +5 -0
  112. package/test/fixtures/eval/node_modules/file11.js +5 -0
  113. package/test/fixtures/eval/node_modules/file12.js +5 -0
  114. package/test/fixtures/eval/node_modules/file13.js +5 -0
  115. package/test/fixtures/eval/node_modules/file14.js +11 -0
  116. package/test/fixtures/eval/node_modules/file2.js +5 -0
  117. package/test/fixtures/eval/node_modules/file3.js +5 -0
  118. package/test/fixtures/eval/node_modules/file4.js +5 -0
  119. package/test/fixtures/eval/node_modules/file5.js +5 -0
  120. package/test/fixtures/eval/node_modules/file6.js +5 -0
  121. package/test/fixtures/eval/node_modules/file7.js +5 -0
  122. package/test/fixtures/eval/node_modules/file8.js +5 -0
  123. package/test/fixtures/eval/node_modules/file9.js +5 -0
  124. package/test/fixtures/noop-transport.js +10 -0
  125. package/test/fixtures/pretty/null-prototype.js +8 -0
  126. package/test/fixtures/stdout-hack-protection.js +11 -0
  127. package/test/fixtures/syncfalse-child.js +6 -0
  128. package/test/fixtures/syncfalse-exit.js +9 -0
  129. package/test/fixtures/syncfalse-flush-exit.js +10 -0
  130. package/test/fixtures/syncfalse.js +6 -0
  131. package/test/fixtures/syntax-error-esm.mjs +2 -0
  132. package/test/fixtures/to-file-transport-with-transform.js +20 -0
  133. package/test/fixtures/to-file-transport.js +13 -0
  134. package/test/fixtures/to-file-transport.mjs +8 -0
  135. package/test/fixtures/transport/index.js +12 -0
  136. package/test/fixtures/transport/package.json +5 -0
  137. package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  138. package/test/fixtures/transport-exit-immediately.js +11 -0
  139. package/test/fixtures/transport-exit-on-ready.js +12 -0
  140. package/test/fixtures/transport-main.js +9 -0
  141. package/test/fixtures/transport-many-lines.js +29 -0
  142. package/test/fixtures/transport-string-stdout.js +9 -0
  143. package/test/fixtures/transport-transform.js +21 -0
  144. package/test/fixtures/transport-uses-pino-config.js +33 -0
  145. package/test/fixtures/transport-with-on-exit.js +12 -0
  146. package/test/fixtures/transport-worker-data.js +19 -0
  147. package/test/fixtures/transport-worker.js +15 -0
  148. package/test/fixtures/transport-wrong-export-type.js +3 -0
  149. package/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  150. package/test/fixtures/ts/to-file-transport.ts +11 -0
  151. package/test/fixtures/ts/transpile.cjs +36 -0
  152. package/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  153. package/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  154. package/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  155. package/test/fixtures/ts/transport-main.ts +8 -0
  156. package/test/fixtures/ts/transport-string-stdout.ts +8 -0
  157. package/test/fixtures/ts/transport-worker.ts +14 -0
  158. package/test/formatters.test.js +355 -0
  159. package/test/helper.d.ts +4 -0
  160. package/test/helper.js +128 -0
  161. package/test/hooks.test.js +118 -0
  162. package/test/http.test.js +242 -0
  163. package/test/internals/version.test.js +15 -0
  164. package/test/is-level-enabled.test.js +185 -0
  165. package/test/jest/basic.spec.js +10 -0
  166. package/test/levels.test.js +772 -0
  167. package/test/metadata.test.js +106 -0
  168. package/test/mixin-merge-strategy.test.js +55 -0
  169. package/test/mixin.test.js +218 -0
  170. package/test/multistream.test.js +673 -0
  171. package/test/pkg/index.js +46 -0
  172. package/test/pkg/pkg.config.json +17 -0
  173. package/test/pkg/pkg.test.js +56 -0
  174. package/test/redact.test.js +847 -0
  175. package/test/serializers.test.js +253 -0
  176. package/test/stdout-protection.test.js +39 -0
  177. package/test/syncfalse.test.js +188 -0
  178. package/test/timestamp.test.js +121 -0
  179. package/test/transport/big.test.js +43 -0
  180. package/test/transport/bundlers-support.test.js +97 -0
  181. package/test/transport/caller.test.js +23 -0
  182. package/test/transport/core.test.js +644 -0
  183. package/test/transport/core.test.ts +236 -0
  184. package/test/transport/core.transpiled.test.ts +112 -0
  185. package/test/transport/module-link.test.js +239 -0
  186. package/test/transport/pipeline.test.js +135 -0
  187. package/test/transport/repl.test.js +14 -0
  188. package/test/transport/syncTrue.test.js +55 -0
  189. package/test/transport/syncfalse.test.js +68 -0
  190. package/test/transport/targets.test.js +44 -0
  191. package/test/transport/uses-pino-config.test.js +167 -0
  192. package/test/transport-stream.test.js +26 -0
  193. package/test/types/pino-import.test-d.ts +29 -0
  194. package/test/types/pino-multistream.test-d.ts +28 -0
  195. package/test/types/pino-top-export.test-d.ts +35 -0
  196. package/test/types/pino-transport.test-d.ts +145 -0
  197. package/test/types/pino-type-only.test-d.ts +64 -0
  198. package/test/types/pino.test-d.ts +468 -0
  199. package/test/types/pino.ts +78 -0
  200. package/tsconfig.json +14 -0
@@ -0,0 +1,417 @@
1
+ 'use strict'
2
+ const test = require('tape')
3
+ const pino = require('../browser')
4
+
5
+ function noop () {}
6
+
7
+ test('throws if transmit object does not have send function', ({ end, throws }) => {
8
+ throws(() => {
9
+ pino({ browser: { transmit: {} } })
10
+ })
11
+
12
+ throws(() => {
13
+ pino({ browser: { transmit: { send: 'not a func' } } })
14
+ })
15
+
16
+ end()
17
+ })
18
+
19
+ test('calls send function after write', ({ end, is }) => {
20
+ let c = 0
21
+ const logger = pino({
22
+ browser: {
23
+ write: () => {
24
+ c++
25
+ },
26
+ transmit: {
27
+ send () { is(c, 1) }
28
+ }
29
+ }
30
+ })
31
+
32
+ logger.fatal({ test: 'test' })
33
+ end()
34
+ })
35
+
36
+ test('passes send function the logged level', ({ end, is }) => {
37
+ const logger = pino({
38
+ browser: {
39
+ write () {},
40
+ transmit: {
41
+ send (level) {
42
+ is(level, 'fatal')
43
+ }
44
+ }
45
+ }
46
+ })
47
+
48
+ logger.fatal({ test: 'test' })
49
+ end()
50
+ })
51
+
52
+ test('passes send function message strings in logEvent object when asObject is not set', ({ end, same, is }) => {
53
+ const logger = pino({
54
+ browser: {
55
+ write: noop,
56
+ transmit: {
57
+ send (level, { messages }) {
58
+ is(messages[0], 'test')
59
+ is(messages[1], 'another test')
60
+ }
61
+ }
62
+ }
63
+ })
64
+
65
+ logger.fatal('test', 'another test')
66
+
67
+ end()
68
+ })
69
+
70
+ test('passes send function message objects in logEvent object when asObject is not set', ({ end, same, is }) => {
71
+ const logger = pino({
72
+ browser: {
73
+ write: noop,
74
+ transmit: {
75
+ send (level, { messages }) {
76
+ same(messages[0], { test: 'test' })
77
+ is(messages[1], 'another test')
78
+ }
79
+ }
80
+ }
81
+ })
82
+
83
+ logger.fatal({ test: 'test' }, 'another test')
84
+
85
+ end()
86
+ })
87
+
88
+ test('passes send function message strings in logEvent object when asObject is set', ({ end, same, is }) => {
89
+ const logger = pino({
90
+ browser: {
91
+ asObject: true,
92
+ write: noop,
93
+ transmit: {
94
+ send (level, { messages }) {
95
+ is(messages[0], 'test')
96
+ is(messages[1], 'another test')
97
+ }
98
+ }
99
+ }
100
+ })
101
+
102
+ logger.fatal('test', 'another test')
103
+
104
+ end()
105
+ })
106
+
107
+ test('passes send function message objects in logEvent object when asObject is set', ({ end, same, is }) => {
108
+ const logger = pino({
109
+ browser: {
110
+ asObject: true,
111
+ write: noop,
112
+ transmit: {
113
+ send (level, { messages }) {
114
+ same(messages[0], { test: 'test' })
115
+ is(messages[1], 'another test')
116
+ }
117
+ }
118
+ }
119
+ })
120
+
121
+ logger.fatal({ test: 'test' }, 'another test')
122
+
123
+ end()
124
+ })
125
+
126
+ test('supplies a timestamp (ts) in logEvent object which is exactly the same as the `time` property in asObject mode', ({ end, is }) => {
127
+ let expected
128
+ const logger = pino({
129
+ browser: {
130
+ asObject: true, // implicit because `write`, but just to be explicit
131
+ write (o) {
132
+ expected = o.time
133
+ },
134
+ transmit: {
135
+ send (level, logEvent) {
136
+ is(logEvent.ts, expected)
137
+ }
138
+ }
139
+ }
140
+ })
141
+
142
+ logger.fatal('test')
143
+ end()
144
+ })
145
+
146
+ test('passes send function child bindings via logEvent object', ({ end, same, is }) => {
147
+ const logger = pino({
148
+ browser: {
149
+ write: noop,
150
+ transmit: {
151
+ send (level, logEvent) {
152
+ const messages = logEvent.messages
153
+ const bindings = logEvent.bindings
154
+ same(bindings[0], { first: 'binding' })
155
+ same(bindings[1], { second: 'binding2' })
156
+ same(messages[0], { test: 'test' })
157
+ is(messages[1], 'another test')
158
+ }
159
+ }
160
+ }
161
+ })
162
+
163
+ logger
164
+ .child({ first: 'binding' })
165
+ .child({ second: 'binding2' })
166
+ .fatal({ test: 'test' }, 'another test')
167
+ end()
168
+ })
169
+
170
+ test('passes send function level:{label, value} via logEvent object', ({ end, is }) => {
171
+ const logger = pino({
172
+ browser: {
173
+ write: noop,
174
+ transmit: {
175
+ send (level, logEvent) {
176
+ const label = logEvent.level.label
177
+ const value = logEvent.level.value
178
+
179
+ is(label, 'fatal')
180
+ is(value, 60)
181
+ }
182
+ }
183
+ }
184
+ })
185
+
186
+ logger.fatal({ test: 'test' }, 'another test')
187
+ end()
188
+ })
189
+
190
+ test('calls send function according to transmit.level', ({ end, is }) => {
191
+ let c = 0
192
+ const logger = pino({
193
+ browser: {
194
+ write: noop,
195
+ transmit: {
196
+ level: 'error',
197
+ send (level) {
198
+ c++
199
+ if (c === 1) is(level, 'error')
200
+ if (c === 2) is(level, 'fatal')
201
+ }
202
+ }
203
+ }
204
+ })
205
+ logger.warn('ignored')
206
+ logger.error('test')
207
+ logger.fatal('test')
208
+ end()
209
+ })
210
+
211
+ test('transmit.level defaults to logger level', ({ end, is }) => {
212
+ let c = 0
213
+ const logger = pino({
214
+ level: 'error',
215
+ browser: {
216
+ write: noop,
217
+ transmit: {
218
+ send (level) {
219
+ c++
220
+ if (c === 1) is(level, 'error')
221
+ if (c === 2) is(level, 'fatal')
222
+ }
223
+ }
224
+ }
225
+ })
226
+ logger.warn('ignored')
227
+ logger.error('test')
228
+ logger.fatal('test')
229
+ end()
230
+ })
231
+
232
+ test('transmit.level is effective even if lower than logger level', ({ end, is }) => {
233
+ let c = 0
234
+ const logger = pino({
235
+ level: 'error',
236
+ browser: {
237
+ write: noop,
238
+ transmit: {
239
+ level: 'info',
240
+ send (level) {
241
+ c++
242
+ if (c === 1) is(level, 'warn')
243
+ if (c === 2) is(level, 'error')
244
+ if (c === 3) is(level, 'fatal')
245
+ }
246
+ }
247
+ }
248
+ })
249
+ logger.warn('ignored')
250
+ logger.error('test')
251
+ logger.fatal('test')
252
+ end()
253
+ })
254
+
255
+ test('applies all serializers to messages and bindings (serialize:false - default)', ({ end, same, is }) => {
256
+ const logger = pino({
257
+ serializers: {
258
+ first: () => 'first',
259
+ second: () => 'second',
260
+ test: () => 'serialize it'
261
+ },
262
+ browser: {
263
+ write: noop,
264
+ transmit: {
265
+ send (level, logEvent) {
266
+ const messages = logEvent.messages
267
+ const bindings = logEvent.bindings
268
+ same(bindings[0], { first: 'first' })
269
+ same(bindings[1], { second: 'second' })
270
+ same(messages[0], { test: 'serialize it' })
271
+ is(messages[1].type, 'Error')
272
+ }
273
+ }
274
+ }
275
+ })
276
+
277
+ logger
278
+ .child({ first: 'binding' })
279
+ .child({ second: 'binding2' })
280
+ .fatal({ test: 'test' }, Error())
281
+ end()
282
+ })
283
+
284
+ test('applies all serializers to messages and bindings (serialize:true)', ({ end, same, is }) => {
285
+ const logger = pino({
286
+ serializers: {
287
+ first: () => 'first',
288
+ second: () => 'second',
289
+ test: () => 'serialize it'
290
+ },
291
+ browser: {
292
+ serialize: true,
293
+ write: noop,
294
+ transmit: {
295
+ send (level, logEvent) {
296
+ const messages = logEvent.messages
297
+ const bindings = logEvent.bindings
298
+ same(bindings[0], { first: 'first' })
299
+ same(bindings[1], { second: 'second' })
300
+ same(messages[0], { test: 'serialize it' })
301
+ is(messages[1].type, 'Error')
302
+ }
303
+ }
304
+ }
305
+ })
306
+
307
+ logger
308
+ .child({ first: 'binding' })
309
+ .child({ second: 'binding2' })
310
+ .fatal({ test: 'test' }, Error())
311
+ end()
312
+ })
313
+
314
+ test('extracts correct bindings and raw messages over multiple transmits', ({ end, same, is }) => {
315
+ let messages = null
316
+ let bindings = null
317
+
318
+ const logger = pino({
319
+ browser: {
320
+ write: noop,
321
+ transmit: {
322
+ send (level, logEvent) {
323
+ messages = logEvent.messages
324
+ bindings = logEvent.bindings
325
+ }
326
+ }
327
+ }
328
+ })
329
+
330
+ const child = logger.child({ child: true })
331
+ const grandchild = child.child({ grandchild: true })
332
+
333
+ logger.fatal({ test: 'parent:test1' })
334
+ logger.fatal({ test: 'parent:test2' })
335
+ same([], bindings)
336
+ same([{ test: 'parent:test2' }], messages)
337
+
338
+ child.fatal({ test: 'child:test1' })
339
+ child.fatal({ test: 'child:test2' })
340
+ same([{ child: true }], bindings)
341
+ same([{ test: 'child:test2' }], messages)
342
+
343
+ grandchild.fatal({ test: 'grandchild:test1' })
344
+ grandchild.fatal({ test: 'grandchild:test2' })
345
+ same([{ child: true }, { grandchild: true }], bindings)
346
+ same([{ test: 'grandchild:test2' }], messages)
347
+
348
+ end()
349
+ })
350
+
351
+ test('does not log below configured level', ({ end, is }) => {
352
+ let message = null
353
+ const logger = pino({
354
+ level: 'info',
355
+ browser: {
356
+ write (o) {
357
+ message = o.msg
358
+ },
359
+ transmit: {
360
+ send () { }
361
+ }
362
+ }
363
+ })
364
+
365
+ logger.debug('this message is silent')
366
+ is(message, null)
367
+
368
+ end()
369
+ })
370
+
371
+ test('silent level prevents logging even with transmit', ({ end, fail }) => {
372
+ const logger = pino({
373
+ level: 'silent',
374
+ browser: {
375
+ write () {
376
+ fail('no data should be logged by the write method')
377
+ },
378
+ transmit: {
379
+ send () {
380
+ fail('no data should be logged by the send method')
381
+ }
382
+ }
383
+ }
384
+ })
385
+
386
+ Object.keys(pino.levels.values).forEach((level) => {
387
+ logger[level]('ignored')
388
+ })
389
+
390
+ end()
391
+ })
392
+
393
+ test('does not call send when transmit.level is set to silent', ({ end, fail, is }) => {
394
+ let c = 0
395
+ const logger = pino({
396
+ level: 'trace',
397
+ browser: {
398
+ write () {
399
+ c++
400
+ },
401
+ transmit: {
402
+ level: 'silent',
403
+ send () {
404
+ fail('no data should be logged by the transmit method')
405
+ }
406
+ }
407
+ }
408
+ })
409
+
410
+ const levels = Object.keys(pino.levels.values)
411
+ levels.forEach((level) => {
412
+ logger[level]('message')
413
+ })
414
+
415
+ is(c, levels.length, 'write must be called exactly once per level')
416
+ end()
417
+ })