vite-plugin-purify 0.0.1-security → 2.3.4
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 vite-plugin-purify might be problematic. Click here for more details.
- package/.eslintignore +2 -0
- package/.eslintrc +8 -0
- package/.github/dependabot.yml +13 -0
- package/.github/workflows/bench.yml +61 -0
- package/.github/workflows/ci.yml +88 -0
- package/.github/workflows/lock-threads.yml +30 -0
- package/.github/workflows/target-main.yml +23 -0
- package/.nojekyll +0 -0
- package/.prettierignore +1 -0
- package/.taprc.yaml +8 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +30 -0
- package/LICENSE +21 -0
- package/README.md +159 -3
- package/SECURITY.md +68 -0
- package/benchmarks/basic.bench.js +95 -0
- package/benchmarks/child-child.bench.js +52 -0
- package/benchmarks/child-creation.bench.js +73 -0
- package/benchmarks/child.bench.js +62 -0
- package/benchmarks/deep-object.bench.js +88 -0
- package/benchmarks/formatters.bench.js +50 -0
- package/benchmarks/internal/custom-levels.js +67 -0
- package/benchmarks/internal/just-pino-heavy.bench.js +76 -0
- package/benchmarks/internal/just-pino.bench.js +182 -0
- package/benchmarks/internal/parent-vs-child.bench.js +75 -0
- package/benchmarks/internal/redact.bench.js +86 -0
- package/benchmarks/long-string.bench.js +81 -0
- package/benchmarks/multi-arg.bench.js +193 -0
- package/benchmarks/multistream.js +98 -0
- package/benchmarks/object.bench.js +82 -0
- package/benchmarks/utils/generate-benchmark-doc.js +36 -0
- package/benchmarks/utils/runbench.js +138 -0
- package/benchmarks/utils/wrap-log-level.js +55 -0
- package/bin.js +6 -0
- package/browser.js +484 -0
- package/build/sync-version.js +10 -0
- package/docs/api.md +1487 -0
- package/docs/asynchronous.md +40 -0
- package/docs/benchmarks.md +55 -0
- package/docs/browser.md +227 -0
- package/docs/bundling.md +40 -0
- package/docs/child-loggers.md +95 -0
- package/docs/ecosystem.md +84 -0
- package/docs/help.md +345 -0
- package/docs/lts.md +64 -0
- package/docs/pretty.md +35 -0
- package/docs/redaction.md +135 -0
- package/docs/transports.md +1238 -0
- package/docs/web.md +269 -0
- package/docsify/sidebar.md +26 -0
- package/examples/basic.js +43 -0
- package/examples/transport.js +68 -0
- package/favicon-16x16.png +0 -0
- package/favicon-32x32.png +0 -0
- package/favicon.ico +0 -0
- package/file.js +12 -0
- package/inc-version.sh +42 -0
- package/index.html +55 -0
- package/lib/caller.js +30 -0
- package/lib/constants.js +28 -0
- package/lib/deprecations.js +8 -0
- package/lib/levels.js +241 -0
- package/lib/meta.js +3 -0
- package/lib/multistream.js +188 -0
- package/lib/proto.js +234 -0
- package/lib/redaction.js +118 -0
- package/lib/symbols.js +74 -0
- package/lib/time.js +11 -0
- package/lib/tools.js +394 -0
- package/lib/transport-stream.js +56 -0
- package/lib/transport.js +167 -0
- package/lib/worker.js +194 -0
- package/lib/writer.js +42 -0
- package/logs-buffer - Shortcut.lnk +0 -0
- package/package.json +117 -3
- package/pino-banner.png +0 -0
- package/pino-logo-hire.png +0 -0
- package/pino-tree.png +0 -0
- package/pino.d.ts +889 -0
- package/pino.js +236 -0
- package/pretty-demo.png +0 -0
- package/test/basic.test.js +874 -0
- package/test/broken-pipe.test.js +57 -0
- package/test/browser-child.test.js +132 -0
- package/test/browser-disabled.test.js +87 -0
- package/test/browser-early-console-freeze.test.js +12 -0
- package/test/browser-levels.test.js +241 -0
- package/test/browser-serializers.test.js +352 -0
- package/test/browser-timestamp.test.js +88 -0
- package/test/browser-transmit.test.js +417 -0
- package/test/browser.test.js +659 -0
- package/test/complex-objects.test.js +34 -0
- package/test/crlf.test.js +32 -0
- package/test/custom-levels.test.js +253 -0
- package/test/error.test.js +398 -0
- package/test/errorKey.test.js +34 -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 +27 -0
- package/test/exit.test.js +77 -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 +13 -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/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/noop-transport.js +10 -0
- package/test/fixtures/pretty/null-prototype.js +8 -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/syntax-error-esm.mjs +2 -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-uses-pino-config.js +33 -0
- package/test/fixtures/transport-with-on-exit.js +12 -0
- package/test/fixtures/transport-worker-data.js +19 -0
- package/test/fixtures/transport-worker.js +15 -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.ts +11 -0
- package/test/fixtures/ts/transpile.cjs +36 -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 +118 -0
- package/test/http.test.js +242 -0
- package/test/internals/version.test.js +15 -0
- package/test/is-level-enabled.test.js +185 -0
- package/test/jest/basic.spec.js +10 -0
- package/test/levels.test.js +772 -0
- package/test/metadata.test.js +106 -0
- package/test/mixin-merge-strategy.test.js +55 -0
- package/test/mixin.test.js +218 -0
- package/test/multistream.test.js +673 -0
- package/test/pkg/index.js +46 -0
- package/test/pkg/pkg.config.json +17 -0
- package/test/pkg/pkg.test.js +56 -0
- package/test/redact.test.js +847 -0
- package/test/serializers.test.js +253 -0
- package/test/stdout-protection.test.js +39 -0
- package/test/syncfalse.test.js +188 -0
- package/test/timestamp.test.js +121 -0
- package/test/transport/big.test.js +43 -0
- package/test/transport/bundlers-support.test.js +97 -0
- package/test/transport/caller.test.js +23 -0
- package/test/transport/core.test.js +644 -0
- package/test/transport/core.test.ts +236 -0
- package/test/transport/core.transpiled.test.ts +112 -0
- package/test/transport/module-link.test.js +239 -0
- package/test/transport/pipeline.test.js +135 -0
- package/test/transport/repl.test.js +14 -0
- package/test/transport/syncTrue.test.js +55 -0
- package/test/transport/syncfalse.test.js +68 -0
- package/test/transport/targets.test.js +44 -0
- package/test/transport/uses-pino-config.test.js +167 -0
- package/test/transport-stream.test.js +26 -0
- package/test/types/pino-import.test-d.ts +29 -0
- package/test/types/pino-multistream.test-d.ts +28 -0
- package/test/types/pino-top-export.test-d.ts +35 -0
- package/test/types/pino-transport.test-d.ts +145 -0
- package/test/types/pino-type-only.test-d.ts +64 -0
- package/test/types/pino.test-d.ts +468 -0
- package/test/types/pino.ts +78 -0
- package/tsconfig.json +14 -0
@@ -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
package/browser.js
ADDED
@@ -0,0 +1,484 @@
|
|
1
|
+
'use strict'
|
2
|
+
|
3
|
+
const format = require('quick-format-unescaped')
|
4
|
+
|
5
|
+
module.exports = pino
|
6
|
+
|
7
|
+
const _console = pfGlobalThisOrFallback().console || {}
|
8
|
+
const stdSerializers = {
|
9
|
+
mapHttpRequest: mock,
|
10
|
+
mapHttpResponse: mock,
|
11
|
+
wrapRequestSerializer: passthrough,
|
12
|
+
wrapResponseSerializer: passthrough,
|
13
|
+
wrapErrorSerializer: passthrough,
|
14
|
+
req: mock,
|
15
|
+
res: mock,
|
16
|
+
err: asErrValue,
|
17
|
+
errWithCause: asErrValue
|
18
|
+
}
|
19
|
+
function levelToValue (level, logger) {
|
20
|
+
return level === 'silent'
|
21
|
+
? Infinity
|
22
|
+
: logger.levels.values[level]
|
23
|
+
}
|
24
|
+
const baseLogFunctionSymbol = Symbol('pino.logFuncs')
|
25
|
+
const hierarchySymbol = Symbol('pino.hierarchy')
|
26
|
+
|
27
|
+
const logFallbackMap = {
|
28
|
+
error: 'log',
|
29
|
+
fatal: 'error',
|
30
|
+
warn: 'error',
|
31
|
+
info: 'log',
|
32
|
+
debug: 'log',
|
33
|
+
trace: 'log'
|
34
|
+
}
|
35
|
+
|
36
|
+
function appendChildLogger (parentLogger, childLogger) {
|
37
|
+
const newEntry = {
|
38
|
+
logger: childLogger,
|
39
|
+
parent: parentLogger[hierarchySymbol]
|
40
|
+
}
|
41
|
+
childLogger[hierarchySymbol] = newEntry
|
42
|
+
}
|
43
|
+
|
44
|
+
function setupBaseLogFunctions (logger, levels, proto) {
|
45
|
+
const logFunctions = {}
|
46
|
+
levels.forEach(level => {
|
47
|
+
logFunctions[level] = proto[level] ? proto[level] : (_console[level] || _console[logFallbackMap[level] || 'log'] || noop)
|
48
|
+
})
|
49
|
+
logger[baseLogFunctionSymbol] = logFunctions
|
50
|
+
}
|
51
|
+
|
52
|
+
function shouldSerialize (serialize, serializers) {
|
53
|
+
if (Array.isArray(serialize)) {
|
54
|
+
const hasToFilter = serialize.filter(function (k) {
|
55
|
+
return k !== '!stdSerializers.err'
|
56
|
+
})
|
57
|
+
return hasToFilter
|
58
|
+
} else if (serialize === true) {
|
59
|
+
return Object.keys(serializers)
|
60
|
+
}
|
61
|
+
|
62
|
+
return false
|
63
|
+
}
|
64
|
+
|
65
|
+
function pino (opts) {
|
66
|
+
opts = opts || {}
|
67
|
+
opts.browser = opts.browser || {}
|
68
|
+
|
69
|
+
const transmit = opts.browser.transmit
|
70
|
+
if (transmit && typeof transmit.send !== 'function') { throw Error('pino: transmit option must have a send function') }
|
71
|
+
|
72
|
+
const proto = opts.browser.write || _console
|
73
|
+
if (opts.browser.write) opts.browser.asObject = true
|
74
|
+
const serializers = opts.serializers || {}
|
75
|
+
const serialize = shouldSerialize(opts.browser.serialize, serializers)
|
76
|
+
let stdErrSerialize = opts.browser.serialize
|
77
|
+
|
78
|
+
if (
|
79
|
+
Array.isArray(opts.browser.serialize) &&
|
80
|
+
opts.browser.serialize.indexOf('!stdSerializers.err') > -1
|
81
|
+
) stdErrSerialize = false
|
82
|
+
|
83
|
+
const customLevels = Object.keys(opts.customLevels || {})
|
84
|
+
const levels = ['error', 'fatal', 'warn', 'info', 'debug', 'trace'].concat(customLevels)
|
85
|
+
|
86
|
+
if (typeof proto === 'function') {
|
87
|
+
levels.forEach(function (level) {
|
88
|
+
proto[level] = proto
|
89
|
+
})
|
90
|
+
}
|
91
|
+
if (opts.enabled === false || opts.browser.disabled) opts.level = 'silent'
|
92
|
+
const level = opts.level || 'info'
|
93
|
+
const logger = Object.create(proto)
|
94
|
+
if (!logger.log) logger.log = noop
|
95
|
+
|
96
|
+
setupBaseLogFunctions(logger, levels, proto)
|
97
|
+
// setup root hierarchy entry
|
98
|
+
appendChildLogger({}, logger)
|
99
|
+
|
100
|
+
Object.defineProperty(logger, 'levelVal', {
|
101
|
+
get: getLevelVal
|
102
|
+
})
|
103
|
+
Object.defineProperty(logger, 'level', {
|
104
|
+
get: getLevel,
|
105
|
+
set: setLevel
|
106
|
+
})
|
107
|
+
|
108
|
+
const setOpts = {
|
109
|
+
transmit,
|
110
|
+
serialize,
|
111
|
+
asObject: opts.browser.asObject,
|
112
|
+
formatters: opts.browser.formatters,
|
113
|
+
levels,
|
114
|
+
timestamp: getTimeFunction(opts),
|
115
|
+
messageKey: opts.messageKey || 'msg',
|
116
|
+
onChild: opts.onChild || noop
|
117
|
+
}
|
118
|
+
logger.levels = getLevels(opts)
|
119
|
+
logger.level = level
|
120
|
+
|
121
|
+
logger.setMaxListeners = logger.getMaxListeners =
|
122
|
+
logger.emit = logger.addListener = logger.on =
|
123
|
+
logger.prependListener = logger.once =
|
124
|
+
logger.prependOnceListener = logger.removeListener =
|
125
|
+
logger.removeAllListeners = logger.listeners =
|
126
|
+
logger.listenerCount = logger.eventNames =
|
127
|
+
logger.write = logger.flush = noop
|
128
|
+
logger.serializers = serializers
|
129
|
+
logger._serialize = serialize
|
130
|
+
logger._stdErrSerialize = stdErrSerialize
|
131
|
+
logger.child = function (...args) { return child.call(this, setOpts, ...args) }
|
132
|
+
|
133
|
+
if (transmit) logger._logEvent = createLogEventShape()
|
134
|
+
|
135
|
+
function getLevelVal () {
|
136
|
+
return levelToValue(this.level, this)
|
137
|
+
}
|
138
|
+
|
139
|
+
function getLevel () {
|
140
|
+
return this._level
|
141
|
+
}
|
142
|
+
function setLevel (level) {
|
143
|
+
if (level !== 'silent' && !this.levels.values[level]) {
|
144
|
+
throw Error('unknown level ' + level)
|
145
|
+
}
|
146
|
+
this._level = level
|
147
|
+
|
148
|
+
set(this, setOpts, logger, 'error') // <-- must stay first
|
149
|
+
set(this, setOpts, logger, 'fatal')
|
150
|
+
set(this, setOpts, logger, 'warn')
|
151
|
+
set(this, setOpts, logger, 'info')
|
152
|
+
set(this, setOpts, logger, 'debug')
|
153
|
+
set(this, setOpts, logger, 'trace')
|
154
|
+
|
155
|
+
customLevels.forEach((level) => {
|
156
|
+
set(this, setOpts, logger, level)
|
157
|
+
})
|
158
|
+
}
|
159
|
+
|
160
|
+
function child (setOpts, bindings, childOptions) {
|
161
|
+
if (!bindings) {
|
162
|
+
throw new Error('missing bindings for child Pino')
|
163
|
+
}
|
164
|
+
childOptions = childOptions || {}
|
165
|
+
if (serialize && bindings.serializers) {
|
166
|
+
childOptions.serializers = bindings.serializers
|
167
|
+
}
|
168
|
+
const childOptionsSerializers = childOptions.serializers
|
169
|
+
if (serialize && childOptionsSerializers) {
|
170
|
+
var childSerializers = Object.assign({}, serializers, childOptionsSerializers)
|
171
|
+
var childSerialize = opts.browser.serialize === true
|
172
|
+
? Object.keys(childSerializers)
|
173
|
+
: serialize
|
174
|
+
delete bindings.serializers
|
175
|
+
applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize)
|
176
|
+
}
|
177
|
+
function Child (parent) {
|
178
|
+
this._childLevel = (parent._childLevel | 0) + 1
|
179
|
+
|
180
|
+
// make sure bindings are available in the `set` function
|
181
|
+
this.bindings = bindings
|
182
|
+
|
183
|
+
if (childSerializers) {
|
184
|
+
this.serializers = childSerializers
|
185
|
+
this._serialize = childSerialize
|
186
|
+
}
|
187
|
+
if (transmit) {
|
188
|
+
this._logEvent = createLogEventShape(
|
189
|
+
[].concat(parent._logEvent.bindings, bindings)
|
190
|
+
)
|
191
|
+
}
|
192
|
+
}
|
193
|
+
Child.prototype = this
|
194
|
+
const newLogger = new Child(this)
|
195
|
+
|
196
|
+
// must happen before the level is assigned
|
197
|
+
appendChildLogger(this, newLogger)
|
198
|
+
newLogger.child = function (...args) { return child.call(this, setOpts, ...args) }
|
199
|
+
// required to actually initialize the logger functions for any given child
|
200
|
+
newLogger.level = childOptions.level || this.level // allow level to be set by childOptions
|
201
|
+
setOpts.onChild(newLogger)
|
202
|
+
|
203
|
+
return newLogger
|
204
|
+
}
|
205
|
+
return logger
|
206
|
+
}
|
207
|
+
|
208
|
+
function getLevels (opts) {
|
209
|
+
const customLevels = opts.customLevels || {}
|
210
|
+
|
211
|
+
const values = Object.assign({}, pino.levels.values, customLevels)
|
212
|
+
const labels = Object.assign({}, pino.levels.labels, invertObject(customLevels))
|
213
|
+
|
214
|
+
return {
|
215
|
+
values,
|
216
|
+
labels
|
217
|
+
}
|
218
|
+
}
|
219
|
+
|
220
|
+
function invertObject (obj) {
|
221
|
+
const inverted = {}
|
222
|
+
Object.keys(obj).forEach(function (key) {
|
223
|
+
inverted[obj[key]] = key
|
224
|
+
})
|
225
|
+
return inverted
|
226
|
+
}
|
227
|
+
|
228
|
+
pino.levels = {
|
229
|
+
values: {
|
230
|
+
fatal: 60,
|
231
|
+
error: 50,
|
232
|
+
warn: 40,
|
233
|
+
info: 30,
|
234
|
+
debug: 20,
|
235
|
+
trace: 10
|
236
|
+
},
|
237
|
+
labels: {
|
238
|
+
10: 'trace',
|
239
|
+
20: 'debug',
|
240
|
+
30: 'info',
|
241
|
+
40: 'warn',
|
242
|
+
50: 'error',
|
243
|
+
60: 'fatal'
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
pino.stdSerializers = stdSerializers
|
248
|
+
pino.stdTimeFunctions = Object.assign({}, { nullTime, epochTime, unixTime, isoTime })
|
249
|
+
|
250
|
+
function getBindingChain (logger) {
|
251
|
+
const bindings = []
|
252
|
+
if (logger.bindings) {
|
253
|
+
bindings.push(logger.bindings)
|
254
|
+
}
|
255
|
+
|
256
|
+
// traverse up the tree to get all bindings
|
257
|
+
let hierarchy = logger[hierarchySymbol]
|
258
|
+
while (hierarchy.parent) {
|
259
|
+
hierarchy = hierarchy.parent
|
260
|
+
if (hierarchy.logger.bindings) {
|
261
|
+
bindings.push(hierarchy.logger.bindings)
|
262
|
+
}
|
263
|
+
}
|
264
|
+
|
265
|
+
return bindings.reverse()
|
266
|
+
}
|
267
|
+
|
268
|
+
function set (self, opts, rootLogger, level) {
|
269
|
+
// override the current log functions with either `noop` or the base log function
|
270
|
+
Object.defineProperty(self, level, {
|
271
|
+
value: (levelToValue(self.level, rootLogger) > levelToValue(level, rootLogger)
|
272
|
+
? noop
|
273
|
+
: rootLogger[baseLogFunctionSymbol][level]),
|
274
|
+
writable: true,
|
275
|
+
enumerable: true,
|
276
|
+
configurable: true
|
277
|
+
})
|
278
|
+
|
279
|
+
if (self[level] === noop) {
|
280
|
+
if (!opts.transmit) return
|
281
|
+
|
282
|
+
const transmitLevel = opts.transmit.level || self.level
|
283
|
+
const transmitValue = levelToValue(transmitLevel, rootLogger)
|
284
|
+
const methodValue = levelToValue(level, rootLogger)
|
285
|
+
if (methodValue < transmitValue) return
|
286
|
+
}
|
287
|
+
|
288
|
+
// make sure the log format is correct
|
289
|
+
self[level] = createWrap(self, opts, rootLogger, level)
|
290
|
+
|
291
|
+
// prepend bindings if it is not the root logger
|
292
|
+
const bindings = getBindingChain(self)
|
293
|
+
if (bindings.length === 0) {
|
294
|
+
// early exit in case for rootLogger
|
295
|
+
return
|
296
|
+
}
|
297
|
+
self[level] = prependBindingsInArguments(bindings, self[level])
|
298
|
+
}
|
299
|
+
|
300
|
+
function prependBindingsInArguments (bindings, logFunc) {
|
301
|
+
return function () {
|
302
|
+
return logFunc.apply(this, [...bindings, ...arguments])
|
303
|
+
}
|
304
|
+
}
|
305
|
+
|
306
|
+
function createWrap (self, opts, rootLogger, level) {
|
307
|
+
return (function (write) {
|
308
|
+
return function LOG () {
|
309
|
+
const ts = opts.timestamp()
|
310
|
+
const args = new Array(arguments.length)
|
311
|
+
const proto = (Object.getPrototypeOf && Object.getPrototypeOf(this) === _console) ? _console : this
|
312
|
+
for (var i = 0; i < args.length; i++) args[i] = arguments[i]
|
313
|
+
|
314
|
+
var argsIsSerialized = false
|
315
|
+
if (opts.serialize) {
|
316
|
+
applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)
|
317
|
+
argsIsSerialized = true
|
318
|
+
}
|
319
|
+
if (opts.asObject || opts.formatters) {
|
320
|
+
write.call(proto, asObject(this, level, args, ts, opts))
|
321
|
+
} else write.apply(proto, args)
|
322
|
+
|
323
|
+
if (opts.transmit) {
|
324
|
+
const transmitLevel = opts.transmit.level || self._level
|
325
|
+
const transmitValue = levelToValue(transmitLevel, rootLogger)
|
326
|
+
const methodValue = levelToValue(level, rootLogger)
|
327
|
+
if (methodValue < transmitValue) return
|
328
|
+
transmit(this, {
|
329
|
+
ts,
|
330
|
+
methodLevel: level,
|
331
|
+
methodValue,
|
332
|
+
transmitLevel,
|
333
|
+
transmitValue: rootLogger.levels.values[opts.transmit.level || self._level],
|
334
|
+
send: opts.transmit.send,
|
335
|
+
val: levelToValue(self._level, rootLogger)
|
336
|
+
}, args, argsIsSerialized)
|
337
|
+
}
|
338
|
+
}
|
339
|
+
})(self[baseLogFunctionSymbol][level])
|
340
|
+
}
|
341
|
+
|
342
|
+
function asObject (logger, level, args, ts, opts) {
|
343
|
+
const {
|
344
|
+
level: levelFormatter,
|
345
|
+
log: logObjectFormatter = (obj) => obj
|
346
|
+
} = opts.formatters || {}
|
347
|
+
const argsCloned = args.slice()
|
348
|
+
let msg = argsCloned[0]
|
349
|
+
const logObject = {}
|
350
|
+
if (ts) {
|
351
|
+
logObject.time = ts
|
352
|
+
}
|
353
|
+
|
354
|
+
if (levelFormatter) {
|
355
|
+
const formattedLevel = levelFormatter(level, logger.levels.values[level])
|
356
|
+
Object.assign(logObject, formattedLevel)
|
357
|
+
} else {
|
358
|
+
logObject.level = logger.levels.values[level]
|
359
|
+
}
|
360
|
+
|
361
|
+
let lvl = (logger._childLevel | 0) + 1
|
362
|
+
if (lvl < 1) lvl = 1
|
363
|
+
// deliberate, catching objects, arrays
|
364
|
+
if (msg !== null && typeof msg === 'object') {
|
365
|
+
while (lvl-- && typeof argsCloned[0] === 'object') {
|
366
|
+
Object.assign(logObject, argsCloned.shift())
|
367
|
+
}
|
368
|
+
msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined
|
369
|
+
} else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)
|
370
|
+
if (msg !== undefined) logObject[opts.messageKey] = msg
|
371
|
+
|
372
|
+
const formattedLogObject = logObjectFormatter(logObject)
|
373
|
+
return formattedLogObject
|
374
|
+
}
|
375
|
+
|
376
|
+
function applySerializers (args, serialize, serializers, stdErrSerialize) {
|
377
|
+
for (const i in args) {
|
378
|
+
if (stdErrSerialize && args[i] instanceof Error) {
|
379
|
+
args[i] = pino.stdSerializers.err(args[i])
|
380
|
+
} else if (typeof args[i] === 'object' && !Array.isArray(args[i]) && serialize) {
|
381
|
+
for (const k in args[i]) {
|
382
|
+
if (serialize.indexOf(k) > -1 && k in serializers) {
|
383
|
+
args[i][k] = serializers[k](args[i][k])
|
384
|
+
}
|
385
|
+
}
|
386
|
+
}
|
387
|
+
}
|
388
|
+
}
|
389
|
+
|
390
|
+
function transmit (logger, opts, args, argsIsSerialized = false) {
|
391
|
+
const send = opts.send
|
392
|
+
const ts = opts.ts
|
393
|
+
const methodLevel = opts.methodLevel
|
394
|
+
const methodValue = opts.methodValue
|
395
|
+
const val = opts.val
|
396
|
+
const bindings = logger._logEvent.bindings
|
397
|
+
|
398
|
+
if (!argsIsSerialized) {
|
399
|
+
applySerializers(
|
400
|
+
args,
|
401
|
+
logger._serialize || Object.keys(logger.serializers),
|
402
|
+
logger.serializers,
|
403
|
+
logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize
|
404
|
+
)
|
405
|
+
}
|
406
|
+
|
407
|
+
logger._logEvent.ts = ts
|
408
|
+
logger._logEvent.messages = args.filter(function (arg) {
|
409
|
+
// bindings can only be objects, so reference equality check via indexOf is fine
|
410
|
+
return bindings.indexOf(arg) === -1
|
411
|
+
})
|
412
|
+
|
413
|
+
logger._logEvent.level.label = methodLevel
|
414
|
+
logger._logEvent.level.value = methodValue
|
415
|
+
|
416
|
+
send(methodLevel, logger._logEvent, val)
|
417
|
+
|
418
|
+
logger._logEvent = createLogEventShape(bindings)
|
419
|
+
}
|
420
|
+
|
421
|
+
function createLogEventShape (bindings) {
|
422
|
+
return {
|
423
|
+
ts: 0,
|
424
|
+
messages: [],
|
425
|
+
bindings: bindings || [],
|
426
|
+
level: { label: '', value: 0 }
|
427
|
+
}
|
428
|
+
}
|
429
|
+
|
430
|
+
function asErrValue (err) {
|
431
|
+
const obj = {
|
432
|
+
type: err.constructor.name,
|
433
|
+
msg: err.message,
|
434
|
+
stack: err.stack
|
435
|
+
}
|
436
|
+
for (const key in err) {
|
437
|
+
if (obj[key] === undefined) {
|
438
|
+
obj[key] = err[key]
|
439
|
+
}
|
440
|
+
}
|
441
|
+
return obj
|
442
|
+
}
|
443
|
+
|
444
|
+
function getTimeFunction (opts) {
|
445
|
+
if (typeof opts.timestamp === 'function') {
|
446
|
+
return opts.timestamp
|
447
|
+
}
|
448
|
+
if (opts.timestamp === false) {
|
449
|
+
return nullTime
|
450
|
+
}
|
451
|
+
return epochTime
|
452
|
+
}
|
453
|
+
|
454
|
+
function mock () { return {} }
|
455
|
+
function passthrough (a) { return a }
|
456
|
+
function noop () {}
|
457
|
+
|
458
|
+
function nullTime () { return false }
|
459
|
+
function epochTime () { return Date.now() }
|
460
|
+
function unixTime () { return Math.round(Date.now() / 1000.0) }
|
461
|
+
function isoTime () { return new Date(Date.now()).toISOString() } // using Date.now() for testability
|
462
|
+
|
463
|
+
/* eslint-disable */
|
464
|
+
/* istanbul ignore next */
|
465
|
+
function pfGlobalThisOrFallback () {
|
466
|
+
function defd (o) { return typeof o !== 'undefined' && o }
|
467
|
+
try {
|
468
|
+
if (typeof globalThis !== 'undefined') return globalThis
|
469
|
+
Object.defineProperty(Object.prototype, 'globalThis', {
|
470
|
+
get: function () {
|
471
|
+
delete Object.prototype.globalThis
|
472
|
+
return (this.globalThis = this)
|
473
|
+
},
|
474
|
+
configurable: true
|
475
|
+
})
|
476
|
+
return globalThis
|
477
|
+
} catch (e) {
|
478
|
+
return defd(self) || defd(window) || defd(this) || {}
|
479
|
+
}
|
480
|
+
}
|
481
|
+
/* eslint-enable */
|
482
|
+
|
483
|
+
module.exports.default = pino
|
484
|
+
module.exports.pino = pino
|
@@ -0,0 +1,10 @@
|
|
1
|
+
const fs = require('node:fs')
|
2
|
+
const path = require('node:path')
|
3
|
+
const { version } = require('../package.json')
|
4
|
+
|
5
|
+
const metaContent = `'use strict'
|
6
|
+
|
7
|
+
module.exports = { version: '${version}' }
|
8
|
+
`
|
9
|
+
|
10
|
+
fs.writeFileSync(path.resolve('./lib/meta.js'), metaContent, { encoding: 'utf-8' })
|