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.
- package/LICENSE +24 -0
- package/README.md +113 -0
- package/bin.js +6 -0
- package/bingo-logger.js +211 -0
- package/browser.js +358 -0
- package/docs/api.md +1352 -0
- package/docs/asynchronous.md +102 -0
- package/docs/benchmarks.md +58 -0
- package/docs/browser.md +199 -0
- package/docs/bundling.md +34 -0
- package/docs/child-loggers.md +95 -0
- package/docs/ecosystem.md +74 -0
- package/docs/help.md +305 -0
- package/docs/lts.md +62 -0
- package/docs/pretty.md +101 -0
- package/docs/redaction.md +135 -0
- package/docs/transports.md +792 -0
- package/docs/web.md +257 -0
- package/file.js +12 -0
- package/lib/caller.js +30 -0
- package/lib/deprecations.js +10 -0
- package/lib/levels.js +193 -0
- package/lib/meta.js +5 -0
- package/lib/multistream.js +156 -0
- package/lib/parse.js +14 -0
- package/lib/proto.js +216 -0
- package/lib/redaction.js +118 -0
- package/lib/symbols.js +70 -0
- package/lib/time.js +11 -0
- package/lib/tools.js +563 -0
- package/lib/transport-stream.js +47 -0
- package/lib/transport.js +157 -0
- package/lib/worker-pipeline.js +40 -0
- package/lib/worker.js +54 -0
- package/package.json +131 -0
- package/test/basic.test.js +719 -0
- package/test/broken-pipe.test.js +42 -0
- package/test/browser-levels.test.js +218 -0
- package/test/browser-serializers.test.js +354 -0
- package/test/browser-timestamp.test.js +88 -0
- package/test/browser-transmit.test.js +349 -0
- package/test/browser.test.js +547 -0
- package/test/complex-objects.test.js +34 -0
- package/test/crlf.test.js +32 -0
- package/test/custom-levels.test.js +294 -0
- package/test/error.test.js +374 -0
- package/test/escaping.test.js +91 -0
- package/test/esm/esm.mjs +12 -0
- package/test/esm/index.test.js +34 -0
- package/test/esm/named-exports.mjs +28 -0
- package/test/exit.test.js +85 -0
- package/test/final.test.js +237 -0
- package/test/fixtures/broken-pipe/basic.js +9 -0
- package/test/fixtures/broken-pipe/destination.js +10 -0
- package/test/fixtures/broken-pipe/syncfalse.js +12 -0
- package/test/fixtures/console-transport.js +13 -0
- package/test/fixtures/default-exit.js +8 -0
- package/test/fixtures/destination-exit.js +8 -0
- package/test/fixtures/eval/index.js +29 -0
- package/test/fixtures/eval/node_modules/14-files.js +3 -0
- package/test/fixtures/eval/node_modules/2-files.js +3 -0
- package/test/fixtures/eval/node_modules/file1.js +5 -0
- package/test/fixtures/eval/node_modules/file10.js +5 -0
- package/test/fixtures/eval/node_modules/file11.js +5 -0
- package/test/fixtures/eval/node_modules/file12.js +5 -0
- package/test/fixtures/eval/node_modules/file13.js +5 -0
- package/test/fixtures/eval/node_modules/file14.js +11 -0
- package/test/fixtures/eval/node_modules/file15.js +10 -0
- package/test/fixtures/eval/node_modules/file2.js +5 -0
- package/test/fixtures/eval/node_modules/file3.js +5 -0
- package/test/fixtures/eval/node_modules/file4.js +5 -0
- package/test/fixtures/eval/node_modules/file5.js +5 -0
- package/test/fixtures/eval/node_modules/file6.js +5 -0
- package/test/fixtures/eval/node_modules/file7.js +5 -0
- package/test/fixtures/eval/node_modules/file8.js +5 -0
- package/test/fixtures/eval/node_modules/file9.js +5 -0
- package/test/fixtures/eval/node_modules/test.list +3 -0
- package/test/fixtures/pretty/basic.js +6 -0
- package/test/fixtures/pretty/child-with-serializer.js +17 -0
- package/test/fixtures/pretty/child-with-updated-chindings.js +8 -0
- package/test/fixtures/pretty/child.js +8 -0
- package/test/fixtures/pretty/custom-time-label.js +9 -0
- package/test/fixtures/pretty/custom-time.js +9 -0
- package/test/fixtures/pretty/dateformat.js +10 -0
- package/test/fixtures/pretty/error-props.js +9 -0
- package/test/fixtures/pretty/error.js +7 -0
- package/test/fixtures/pretty/final-no-log-before.js +8 -0
- package/test/fixtures/pretty/final-return.js +7 -0
- package/test/fixtures/pretty/final.js +9 -0
- package/test/fixtures/pretty/formatters.js +13 -0
- package/test/fixtures/pretty/level-first.js +6 -0
- package/test/fixtures/pretty/no-time.js +9 -0
- package/test/fixtures/pretty/null-prototype.js +8 -0
- package/test/fixtures/pretty/obj-msg-prop.js +6 -0
- package/test/fixtures/pretty/pretty-factory.js +6 -0
- package/test/fixtures/pretty/redact.js +9 -0
- package/test/fixtures/pretty/serializers.js +17 -0
- package/test/fixtures/pretty/skipped-output.js +13 -0
- package/test/fixtures/pretty/suppress-flush-sync-warning.js +7 -0
- package/test/fixtures/stdout-hack-protection.js +11 -0
- package/test/fixtures/syncfalse-child.js +6 -0
- package/test/fixtures/syncfalse-exit.js +9 -0
- package/test/fixtures/syncfalse-flush-exit.js +10 -0
- package/test/fixtures/syncfalse.js +6 -0
- package/test/fixtures/to-file-transport-with-transform.js +20 -0
- package/test/fixtures/to-file-transport.js +13 -0
- package/test/fixtures/to-file-transport.mjs +8 -0
- package/test/fixtures/transport/index.js +12 -0
- package/test/fixtures/transport/package.json +5 -0
- package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
- package/test/fixtures/transport-exit-immediately.js +11 -0
- package/test/fixtures/transport-exit-on-ready.js +12 -0
- package/test/fixtures/transport-main.js +9 -0
- package/test/fixtures/transport-many-lines.js +29 -0
- package/test/fixtures/transport-string-stdout.js +9 -0
- package/test/fixtures/transport-transform.js +21 -0
- package/test/fixtures/transport-worker.js +13 -0
- package/test/fixtures/transport-wrong-export-type.js +3 -0
- package/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
- package/test/fixtures/ts/to-file-transport.es2017.cjs +12 -0
- package/test/fixtures/ts/to-file-transport.es5.cjs +58 -0
- package/test/fixtures/ts/to-file-transport.es6.cjs +23 -0
- package/test/fixtures/ts/to-file-transport.esnext.cjs +12 -0
- package/test/fixtures/ts/to-file-transport.ts +11 -0
- package/test/fixtures/ts/transpile.cjs +40 -0
- package/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
- package/test/fixtures/ts/transport-exit-immediately.ts +10 -0
- package/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
- package/test/fixtures/ts/transport-main.ts +8 -0
- package/test/fixtures/ts/transport-string-stdout.ts +8 -0
- package/test/fixtures/ts/transport-worker.ts +14 -0
- package/test/formatters.test.js +355 -0
- package/test/helper.d.ts +4 -0
- package/test/helper.js +128 -0
- package/test/hooks.test.js +97 -0
- package/test/http.test.js +242 -0
- package/test/is-level-enabled.test.js +43 -0
- package/test/jest/basic.spec.js +10 -0
- package/test/levels.test.js +528 -0
- package/test/metadata.test.js +106 -0
- package/test/mixin-merge-strategy.test.js +55 -0
- package/test/mixin.test.js +162 -0
- package/test/multistream.test.js +589 -0
- package/test/pretty.test.js +392 -0
- package/test/redact.test.js +828 -0
- package/test/serializers.test.js +253 -0
- package/test/stdout-protection.test.js +19 -0
- package/test/syncfalse.test.js +118 -0
- package/test/timestamp.test.js +121 -0
- package/test/transport/big.test.js +41 -0
- package/test/transport/bundlers-support.test.js +97 -0
- package/test/transport/caller.test.js +23 -0
- package/test/transport/core.test.js +546 -0
- package/test/transport/core.test.ts +236 -0
- package/test/transport/core.transpiled.test.ts +116 -0
- package/test/transport/module-link.test.js +239 -0
- package/test/transport/pipeline.test.js +36 -0
- package/test/transport/syncfalse.test.js +31 -0
- package/test/transport/targets.test.js +28 -0
- package/test/types/pino-import.test-d.ts +29 -0
- package/test/types/pino-multistream.test-d.ts +26 -0
- package/test/types/pino-top-export.test-d.ts +37 -0
- package/test/types/pino-transport.test-d.ts +122 -0
- package/test/types/pino-type-only.test-d.ts +16 -0
- package/test/types/pino.test-d.ts +341 -0
- package/test/types/pino.ts +42 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const { join } = require('path')
|
|
5
|
+
const { fork } = require('child_process')
|
|
6
|
+
const { once } = require('./helper')
|
|
7
|
+
const bingo-logger = require('..')
|
|
8
|
+
|
|
9
|
+
function test (file) {
|
|
10
|
+
file = join('fixtures', 'broken-pipe', file)
|
|
11
|
+
t.test(file, { parallel: true }, async ({ equal }) => {
|
|
12
|
+
const child = fork(join(__dirname, file), { silent: true })
|
|
13
|
+
child.stdout.destroy()
|
|
14
|
+
|
|
15
|
+
child.stderr.pipe(process.stdout)
|
|
16
|
+
|
|
17
|
+
const res = await once(child, 'close')
|
|
18
|
+
equal(res, 0) // process exits successfully
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
t.jobs = 42
|
|
23
|
+
|
|
24
|
+
test('basic.js')
|
|
25
|
+
test('destination.js')
|
|
26
|
+
test('syncfalse.js')
|
|
27
|
+
|
|
28
|
+
t.test('let error pass through', ({ equal, plan }) => {
|
|
29
|
+
plan(3)
|
|
30
|
+
const stream = bingo-logger.destination()
|
|
31
|
+
|
|
32
|
+
// side effect of the bingo-logger constructor is that it will set an
|
|
33
|
+
// event handler for error
|
|
34
|
+
bingo-logger(stream)
|
|
35
|
+
|
|
36
|
+
process.nextTick(() => stream.emit('error', new Error('kaboom')))
|
|
37
|
+
process.nextTick(() => stream.emit('error', new Error('kaboom')))
|
|
38
|
+
|
|
39
|
+
stream.on('error', (err) => {
|
|
40
|
+
equal(err.message, 'kaboom')
|
|
41
|
+
})
|
|
42
|
+
})
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
const test = require('tape')
|
|
3
|
+
const bingo-logger = require('../browser')
|
|
4
|
+
|
|
5
|
+
test('set the level by string', ({ end, same, is }) => {
|
|
6
|
+
const expected = [
|
|
7
|
+
{
|
|
8
|
+
level: 50,
|
|
9
|
+
msg: 'this is an error'
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
level: 60,
|
|
13
|
+
msg: 'this is fatal'
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
const instance = bingo-logger({
|
|
17
|
+
browser: {
|
|
18
|
+
write (actual) {
|
|
19
|
+
checkLogObjects(is, same, actual, expected.shift())
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
instance.level = 'error'
|
|
25
|
+
instance.info('hello world')
|
|
26
|
+
instance.error('this is an error')
|
|
27
|
+
instance.fatal('this is fatal')
|
|
28
|
+
|
|
29
|
+
end()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('set the level by string. init with silent', ({ end, same, is }) => {
|
|
33
|
+
const expected = [
|
|
34
|
+
{
|
|
35
|
+
level: 50,
|
|
36
|
+
msg: 'this is an error'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
level: 60,
|
|
40
|
+
msg: 'this is fatal'
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
const instance = bingo-logger({
|
|
44
|
+
level: 'silent',
|
|
45
|
+
browser: {
|
|
46
|
+
write (actual) {
|
|
47
|
+
checkLogObjects(is, same, actual, expected.shift())
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
instance.level = 'error'
|
|
53
|
+
instance.info('hello world')
|
|
54
|
+
instance.error('this is an error')
|
|
55
|
+
instance.fatal('this is fatal')
|
|
56
|
+
|
|
57
|
+
end()
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
test('set the level by string. init with silent and transmit', ({ end, same, is }) => {
|
|
61
|
+
const expected = [
|
|
62
|
+
{
|
|
63
|
+
level: 50,
|
|
64
|
+
msg: 'this is an error'
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
level: 60,
|
|
68
|
+
msg: 'this is fatal'
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
const instance = bingo-logger({
|
|
72
|
+
level: 'silent',
|
|
73
|
+
browser: {
|
|
74
|
+
write (actual) {
|
|
75
|
+
checkLogObjects(is, same, actual, expected.shift())
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
transmit: {
|
|
79
|
+
send () {}
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
instance.level = 'error'
|
|
84
|
+
instance.info('hello world')
|
|
85
|
+
instance.error('this is an error')
|
|
86
|
+
instance.fatal('this is fatal')
|
|
87
|
+
|
|
88
|
+
end()
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
test('set the level via constructor', ({ end, same, is }) => {
|
|
92
|
+
const expected = [
|
|
93
|
+
{
|
|
94
|
+
level: 50,
|
|
95
|
+
msg: 'this is an error'
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
level: 60,
|
|
99
|
+
msg: 'this is fatal'
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
const instance = bingo-logger({
|
|
103
|
+
level: 'error',
|
|
104
|
+
browser: {
|
|
105
|
+
write (actual) {
|
|
106
|
+
checkLogObjects(is, same, actual, expected.shift())
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
instance.info('hello world')
|
|
112
|
+
instance.error('this is an error')
|
|
113
|
+
instance.fatal('this is fatal')
|
|
114
|
+
|
|
115
|
+
end()
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
test('the wrong level throws', ({ end, throws }) => {
|
|
119
|
+
const instance = bingo-logger()
|
|
120
|
+
throws(() => {
|
|
121
|
+
instance.level = 'kaboom'
|
|
122
|
+
})
|
|
123
|
+
end()
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
test('the wrong level by number throws', ({ end, throws }) => {
|
|
127
|
+
const instance = bingo-logger()
|
|
128
|
+
throws(() => {
|
|
129
|
+
instance.levelVal = 55
|
|
130
|
+
})
|
|
131
|
+
end()
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
test('exposes level string mappings', ({ end, is }) => {
|
|
135
|
+
is(bingo-logger.levels.values.error, 50)
|
|
136
|
+
end()
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
test('exposes level number mappings', ({ end, is }) => {
|
|
140
|
+
is(bingo-logger.levels.labels[50], 'error')
|
|
141
|
+
end()
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
test('returns level integer', ({ end, is }) => {
|
|
145
|
+
const instance = bingo-logger({ level: 'error' })
|
|
146
|
+
is(instance.levelVal, 50)
|
|
147
|
+
end()
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
test('silent level via constructor', ({ end, fail }) => {
|
|
151
|
+
const instance = bingo-logger({
|
|
152
|
+
level: 'silent',
|
|
153
|
+
browser: {
|
|
154
|
+
write () {
|
|
155
|
+
fail('no data should be logged')
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
Object.keys(bingo-logger.levels.values).forEach((level) => {
|
|
161
|
+
instance[level]('hello world')
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
end()
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
test('silent level by string', ({ end, fail }) => {
|
|
168
|
+
const instance = bingo-logger({
|
|
169
|
+
browser: {
|
|
170
|
+
write () {
|
|
171
|
+
fail('no data should be logged')
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
instance.level = 'silent'
|
|
177
|
+
|
|
178
|
+
Object.keys(bingo-logger.levels.values).forEach((level) => {
|
|
179
|
+
instance[level]('hello world')
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
end()
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
test('exposed levels', ({ end, same }) => {
|
|
186
|
+
same(Object.keys(bingo-logger.levels.values), [
|
|
187
|
+
'fatal',
|
|
188
|
+
'error',
|
|
189
|
+
'warn',
|
|
190
|
+
'info',
|
|
191
|
+
'debug',
|
|
192
|
+
'trace'
|
|
193
|
+
])
|
|
194
|
+
end()
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
test('exposed labels', ({ end, same }) => {
|
|
198
|
+
same(Object.keys(bingo-logger.levels.labels), [
|
|
199
|
+
'10',
|
|
200
|
+
'20',
|
|
201
|
+
'30',
|
|
202
|
+
'40',
|
|
203
|
+
'50',
|
|
204
|
+
'60'
|
|
205
|
+
])
|
|
206
|
+
end()
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
function checkLogObjects (is, same, actual, expected) {
|
|
210
|
+
is(actual.time <= Date.now(), true, 'time is greater than Date.now()')
|
|
211
|
+
|
|
212
|
+
const actualCopy = Object.assign({}, actual)
|
|
213
|
+
const expectedCopy = Object.assign({}, expected)
|
|
214
|
+
delete actualCopy.time
|
|
215
|
+
delete expectedCopy.time
|
|
216
|
+
|
|
217
|
+
same(actualCopy, expectedCopy)
|
|
218
|
+
}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
// eslint-disable-next-line
|
|
3
|
+
if (typeof $1 !== 'undefined') $1 = arguments.callee.caller.arguments[0]
|
|
4
|
+
|
|
5
|
+
const test = require('tape')
|
|
6
|
+
const fresh = require('import-fresh')
|
|
7
|
+
const bingo-logger = require('../browser')
|
|
8
|
+
|
|
9
|
+
const parentSerializers = {
|
|
10
|
+
test: () => 'parent'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const childSerializers = {
|
|
14
|
+
test: () => 'child'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
test('serializers override values', ({ end, is }) => {
|
|
18
|
+
const parent = bingo-logger({
|
|
19
|
+
serializers: parentSerializers,
|
|
20
|
+
browser: {
|
|
21
|
+
serialize: true,
|
|
22
|
+
write (o) {
|
|
23
|
+
is(o.test, 'parent')
|
|
24
|
+
end()
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
parent.fatal({ test: 'test' })
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('without the serialize option, serializers do not override values', ({ end, is }) => {
|
|
33
|
+
const parent = bingo-logger({
|
|
34
|
+
serializers: parentSerializers,
|
|
35
|
+
browser: {
|
|
36
|
+
write (o) {
|
|
37
|
+
is(o.test, 'test')
|
|
38
|
+
end()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
parent.fatal({ test: 'test' })
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
if (process.title !== 'browser') {
|
|
47
|
+
test('if serialize option is true, standard error serializer is auto enabled', ({ end, same }) => {
|
|
48
|
+
const err = Error('test')
|
|
49
|
+
err.code = 'test'
|
|
50
|
+
err.type = 'Error' // get that cov
|
|
51
|
+
const expect = bingo-logger.stdSerializers.err(err)
|
|
52
|
+
|
|
53
|
+
const consoleError = console.error
|
|
54
|
+
console.error = function (err) {
|
|
55
|
+
same(err, expect)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const logger = fresh('../browser')({
|
|
59
|
+
browser: { serialize: true }
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
console.error = consoleError
|
|
63
|
+
|
|
64
|
+
logger.fatal(err)
|
|
65
|
+
end()
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
test('if serialize option is array, standard error serializer is auto enabled', ({ end, same }) => {
|
|
69
|
+
const err = Error('test')
|
|
70
|
+
err.code = 'test'
|
|
71
|
+
const expect = bingo-logger.stdSerializers.err(err)
|
|
72
|
+
|
|
73
|
+
const consoleError = console.error
|
|
74
|
+
console.error = function (err) {
|
|
75
|
+
same(err, expect)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const logger = fresh('../browser', require)({
|
|
79
|
+
browser: { serialize: [] }
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
console.error = consoleError
|
|
83
|
+
|
|
84
|
+
logger.fatal(err)
|
|
85
|
+
end()
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
test('if serialize option is array containing !stdSerializers.err, standard error serializer is disabled', ({ end, is }) => {
|
|
89
|
+
const err = Error('test')
|
|
90
|
+
err.code = 'test'
|
|
91
|
+
const expect = err
|
|
92
|
+
|
|
93
|
+
const consoleError = console.error
|
|
94
|
+
console.error = function (err) {
|
|
95
|
+
is(err, expect)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const logger = fresh('../browser', require)({
|
|
99
|
+
browser: { serialize: ['!stdSerializers.err'] }
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
console.error = consoleError
|
|
103
|
+
|
|
104
|
+
logger.fatal(err)
|
|
105
|
+
end()
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
test('in browser, serializers apply to all objects', ({ end, is }) => {
|
|
109
|
+
const consoleError = console.error
|
|
110
|
+
console.error = function (test, test2, test3, test4, test5) {
|
|
111
|
+
is(test.key, 'serialized')
|
|
112
|
+
is(test2.key2, 'serialized2')
|
|
113
|
+
is(test5.key3, 'serialized3')
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const logger = fresh('../browser', require)({
|
|
117
|
+
serializers: {
|
|
118
|
+
key: () => 'serialized',
|
|
119
|
+
key2: () => 'serialized2',
|
|
120
|
+
key3: () => 'serialized3'
|
|
121
|
+
},
|
|
122
|
+
browser: { serialize: true }
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
console.error = consoleError
|
|
126
|
+
|
|
127
|
+
logger.fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' })
|
|
128
|
+
end()
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
test('serialize can be an array of selected serializers', ({ end, is }) => {
|
|
132
|
+
const consoleError = console.error
|
|
133
|
+
console.error = function (test, test2, test3, test4, test5) {
|
|
134
|
+
is(test.key, 'test')
|
|
135
|
+
is(test2.key2, 'serialized2')
|
|
136
|
+
is(test5.key3, 'test')
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const logger = fresh('../browser', require)({
|
|
140
|
+
serializers: {
|
|
141
|
+
key: () => 'serialized',
|
|
142
|
+
key2: () => 'serialized2',
|
|
143
|
+
key3: () => 'serialized3'
|
|
144
|
+
},
|
|
145
|
+
browser: { serialize: ['key2'] }
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
console.error = consoleError
|
|
149
|
+
|
|
150
|
+
logger.fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' })
|
|
151
|
+
end()
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
test('serialize filter applies to child loggers', ({ end, is }) => {
|
|
155
|
+
const consoleError = console.error
|
|
156
|
+
console.error = function (binding, test, test2, test3, test4, test5) {
|
|
157
|
+
is(test.key, 'test')
|
|
158
|
+
is(test2.key2, 'serialized2')
|
|
159
|
+
is(test5.key3, 'test')
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const logger = fresh('../browser', require)({
|
|
163
|
+
browser: { serialize: ['key2'] }
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
console.error = consoleError
|
|
167
|
+
|
|
168
|
+
logger.child({
|
|
169
|
+
aBinding: 'test'
|
|
170
|
+
}, {
|
|
171
|
+
serializers: {
|
|
172
|
+
key: () => 'serialized',
|
|
173
|
+
key2: () => 'serialized2',
|
|
174
|
+
key3: () => 'serialized3'
|
|
175
|
+
}
|
|
176
|
+
}).fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' })
|
|
177
|
+
end()
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
test('serialize filter applies to child loggers through bindings', ({ end, is }) => {
|
|
181
|
+
const consoleError = console.error
|
|
182
|
+
console.error = function (binding, test, test2, test3, test4, test5) {
|
|
183
|
+
is(test.key, 'test')
|
|
184
|
+
is(test2.key2, 'serialized2')
|
|
185
|
+
is(test5.key3, 'test')
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const logger = fresh('../browser', require)({
|
|
189
|
+
browser: { serialize: ['key2'] }
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
console.error = consoleError
|
|
193
|
+
|
|
194
|
+
logger.child({
|
|
195
|
+
aBinding: 'test',
|
|
196
|
+
serializers: {
|
|
197
|
+
key: () => 'serialized',
|
|
198
|
+
key2: () => 'serialized2',
|
|
199
|
+
key3: () => 'serialized3'
|
|
200
|
+
}
|
|
201
|
+
}).fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' })
|
|
202
|
+
end()
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
test('parent serializers apply to child bindings', ({ end, is }) => {
|
|
206
|
+
const consoleError = console.error
|
|
207
|
+
console.error = function (binding) {
|
|
208
|
+
is(binding.key, 'serialized')
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const logger = fresh('../browser', require)({
|
|
212
|
+
serializers: {
|
|
213
|
+
key: () => 'serialized'
|
|
214
|
+
},
|
|
215
|
+
browser: { serialize: true }
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
console.error = consoleError
|
|
219
|
+
|
|
220
|
+
logger.child({ key: 'test' }).fatal({ test: 'test' })
|
|
221
|
+
end()
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
test('child serializers apply to child bindings', ({ end, is }) => {
|
|
225
|
+
const consoleError = console.error
|
|
226
|
+
console.error = function (binding) {
|
|
227
|
+
is(binding.key, 'serialized')
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const logger = fresh('../browser', require)({
|
|
231
|
+
browser: { serialize: true }
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
console.error = consoleError
|
|
235
|
+
|
|
236
|
+
logger.child({
|
|
237
|
+
key: 'test'
|
|
238
|
+
}, {
|
|
239
|
+
serializers: {
|
|
240
|
+
key: () => 'serialized'
|
|
241
|
+
}
|
|
242
|
+
}).fatal({ test: 'test' })
|
|
243
|
+
end()
|
|
244
|
+
})
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
test('child does not overwrite parent serializers', ({ end, is }) => {
|
|
248
|
+
let c = 0
|
|
249
|
+
const parent = bingo-logger({
|
|
250
|
+
serializers: parentSerializers,
|
|
251
|
+
browser: {
|
|
252
|
+
serialize: true,
|
|
253
|
+
write (o) {
|
|
254
|
+
c++
|
|
255
|
+
if (c === 1) is(o.test, 'parent')
|
|
256
|
+
if (c === 2) {
|
|
257
|
+
is(o.test, 'child')
|
|
258
|
+
end()
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
})
|
|
263
|
+
const child = parent.child({}, { serializers: childSerializers })
|
|
264
|
+
|
|
265
|
+
parent.fatal({ test: 'test' })
|
|
266
|
+
child.fatal({ test: 'test' })
|
|
267
|
+
})
|
|
268
|
+
|
|
269
|
+
test('children inherit parent serializers', ({ end, is }) => {
|
|
270
|
+
const parent = bingo-logger({
|
|
271
|
+
serializers: parentSerializers,
|
|
272
|
+
browser: {
|
|
273
|
+
serialize: true,
|
|
274
|
+
write (o) {
|
|
275
|
+
is(o.test, 'parent')
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
const child = parent.child({ a: 'property' })
|
|
281
|
+
child.fatal({ test: 'test' })
|
|
282
|
+
end()
|
|
283
|
+
})
|
|
284
|
+
|
|
285
|
+
test('children serializers get called', ({ end, is }) => {
|
|
286
|
+
const parent = bingo-logger({
|
|
287
|
+
test: 'this',
|
|
288
|
+
browser: {
|
|
289
|
+
serialize: true,
|
|
290
|
+
write (o) {
|
|
291
|
+
is(o.test, 'child')
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
const child = parent.child({ a: 'property' }, { serializers: childSerializers })
|
|
297
|
+
|
|
298
|
+
child.fatal({ test: 'test' })
|
|
299
|
+
end()
|
|
300
|
+
})
|
|
301
|
+
|
|
302
|
+
test('children serializers get called when inherited from parent', ({ end, is }) => {
|
|
303
|
+
const parent = bingo-logger({
|
|
304
|
+
test: 'this',
|
|
305
|
+
serializers: parentSerializers,
|
|
306
|
+
browser: {
|
|
307
|
+
serialize: true,
|
|
308
|
+
write: (o) => {
|
|
309
|
+
is(o.test, 'pass')
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
})
|
|
313
|
+
|
|
314
|
+
const child = parent.child({}, { serializers: { test: () => 'pass' } })
|
|
315
|
+
|
|
316
|
+
child.fatal({ test: 'fail' })
|
|
317
|
+
end()
|
|
318
|
+
})
|
|
319
|
+
|
|
320
|
+
test('non overridden serializers are available in the children', ({ end, is }) => {
|
|
321
|
+
const pSerializers = {
|
|
322
|
+
onlyParent: () => 'parent',
|
|
323
|
+
shared: () => 'parent'
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
const cSerializers = {
|
|
327
|
+
shared: () => 'child',
|
|
328
|
+
onlyChild: () => 'child'
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
let c = 0
|
|
332
|
+
|
|
333
|
+
const parent = bingo-logger({
|
|
334
|
+
serializers: pSerializers,
|
|
335
|
+
browser: {
|
|
336
|
+
serialize: true,
|
|
337
|
+
write (o) {
|
|
338
|
+
c++
|
|
339
|
+
if (c === 1) is(o.shared, 'child')
|
|
340
|
+
if (c === 2) is(o.onlyParent, 'parent')
|
|
341
|
+
if (c === 3) is(o.onlyChild, 'child')
|
|
342
|
+
if (c === 4) is(o.onlyChild, 'test')
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
})
|
|
346
|
+
|
|
347
|
+
const child = parent.child({}, { serializers: cSerializers })
|
|
348
|
+
|
|
349
|
+
child.fatal({ shared: 'test' })
|
|
350
|
+
child.fatal({ onlyParent: 'test' })
|
|
351
|
+
child.fatal({ onlyChild: 'test' })
|
|
352
|
+
parent.fatal({ onlyChild: 'test' })
|
|
353
|
+
end()
|
|
354
|
+
})
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
const test = require('tape')
|
|
3
|
+
const bingo-logger = require('../browser')
|
|
4
|
+
|
|
5
|
+
Date.now = () => 1599400603614
|
|
6
|
+
|
|
7
|
+
test('null timestamp', ({ end, is }) => {
|
|
8
|
+
const instance = bingo-logger({
|
|
9
|
+
timestamp: bingo-logger.stdTimeFunctions.nullTime,
|
|
10
|
+
browser: {
|
|
11
|
+
asObject: true,
|
|
12
|
+
write: function (o) {
|
|
13
|
+
is(o.time, undefined)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
instance.info('hello world')
|
|
18
|
+
end()
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('iso timestamp', ({ end, is }) => {
|
|
22
|
+
const instance = bingo-logger({
|
|
23
|
+
timestamp: bingo-logger.stdTimeFunctions.isoTime,
|
|
24
|
+
browser: {
|
|
25
|
+
asObject: true,
|
|
26
|
+
write: function (o) {
|
|
27
|
+
is(o.time, '2020-09-06T13:56:43.614Z')
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
instance.info('hello world')
|
|
32
|
+
end()
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
test('epoch timestamp', ({ end, is }) => {
|
|
36
|
+
const instance = bingo-logger({
|
|
37
|
+
timestamp: bingo-logger.stdTimeFunctions.epochTime,
|
|
38
|
+
browser: {
|
|
39
|
+
asObject: true,
|
|
40
|
+
write: function (o) {
|
|
41
|
+
is(o.time, 1599400603614)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
instance.info('hello world')
|
|
46
|
+
end()
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
test('unix timestamp', ({ end, is }) => {
|
|
50
|
+
const instance = bingo-logger({
|
|
51
|
+
timestamp: bingo-logger.stdTimeFunctions.unixTime,
|
|
52
|
+
browser: {
|
|
53
|
+
asObject: true,
|
|
54
|
+
write: function (o) {
|
|
55
|
+
is(o.time, Math.round(1599400603614 / 1000.0))
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
instance.info('hello world')
|
|
60
|
+
end()
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('epoch timestamp by default', ({ end, is }) => {
|
|
64
|
+
const instance = bingo-logger({
|
|
65
|
+
browser: {
|
|
66
|
+
asObject: true,
|
|
67
|
+
write: function (o) {
|
|
68
|
+
is(o.time, 1599400603614)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
instance.info('hello world')
|
|
73
|
+
end()
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('not print timestamp if the option is false', ({ end, is }) => {
|
|
77
|
+
const instance = bingo-logger({
|
|
78
|
+
timestamp: false,
|
|
79
|
+
browser: {
|
|
80
|
+
asObject: true,
|
|
81
|
+
write: function (o) {
|
|
82
|
+
is(o.time, undefined)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
instance.info('hello world')
|
|
87
|
+
end()
|
|
88
|
+
})
|