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,236 @@
|
|
1
|
+
import * as os from 'node:os'
|
2
|
+
import { join } from 'node:path'
|
3
|
+
import { once } from 'node:events'
|
4
|
+
import fs from 'node:fs'
|
5
|
+
import { watchFileCreated } from '../helper'
|
6
|
+
import { test } from 'tap'
|
7
|
+
import pino from '../../'
|
8
|
+
import * as url from 'node:url'
|
9
|
+
import { default as strip } from 'strip-ansi'
|
10
|
+
import execa from 'execa'
|
11
|
+
import writer from 'flush-write-stream'
|
12
|
+
|
13
|
+
if (process.platform === 'win32') {
|
14
|
+
// TODO: Implement .ts files loading support for Windows
|
15
|
+
process.exit()
|
16
|
+
}
|
17
|
+
|
18
|
+
const readFile = fs.promises.readFile
|
19
|
+
const { pid } = process
|
20
|
+
const hostname = os.hostname()
|
21
|
+
|
22
|
+
test('pino.transport with file', async ({ same, teardown }) => {
|
23
|
+
const destination = join(
|
24
|
+
os.tmpdir(),
|
25
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
26
|
+
)
|
27
|
+
const transport = pino.transport({
|
28
|
+
target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts'),
|
29
|
+
options: { destination }
|
30
|
+
})
|
31
|
+
teardown(transport.end.bind(transport))
|
32
|
+
const instance = pino(transport)
|
33
|
+
instance.info('hello')
|
34
|
+
await watchFileCreated(destination)
|
35
|
+
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
36
|
+
delete result.time
|
37
|
+
same(result, {
|
38
|
+
pid,
|
39
|
+
hostname,
|
40
|
+
level: 30,
|
41
|
+
msg: 'hello'
|
42
|
+
})
|
43
|
+
})
|
44
|
+
|
45
|
+
test('pino.transport with file (no options + error handling)', async ({ equal }) => {
|
46
|
+
const transport = pino.transport({
|
47
|
+
target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts')
|
48
|
+
})
|
49
|
+
const [err] = await once(transport, 'error')
|
50
|
+
equal(err.message, 'kaboom')
|
51
|
+
})
|
52
|
+
|
53
|
+
test('pino.transport with file URL', async ({ same, teardown }) => {
|
54
|
+
const destination = join(
|
55
|
+
os.tmpdir(),
|
56
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
57
|
+
)
|
58
|
+
const transport = pino.transport({
|
59
|
+
target: url.pathToFileURL(join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts')).href,
|
60
|
+
options: { destination }
|
61
|
+
})
|
62
|
+
teardown(transport.end.bind(transport))
|
63
|
+
const instance = pino(transport)
|
64
|
+
instance.info('hello')
|
65
|
+
await watchFileCreated(destination)
|
66
|
+
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
67
|
+
delete result.time
|
68
|
+
same(result, {
|
69
|
+
pid,
|
70
|
+
hostname,
|
71
|
+
level: 30,
|
72
|
+
msg: 'hello'
|
73
|
+
})
|
74
|
+
})
|
75
|
+
|
76
|
+
test('pino.transport with two files', async ({ same, teardown }) => {
|
77
|
+
const dest1 = join(
|
78
|
+
os.tmpdir(),
|
79
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
80
|
+
)
|
81
|
+
const dest2 = join(
|
82
|
+
os.tmpdir(),
|
83
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
84
|
+
)
|
85
|
+
const transport = pino.transport({
|
86
|
+
targets: [{
|
87
|
+
level: 'info',
|
88
|
+
target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts'),
|
89
|
+
options: { destination: dest1 }
|
90
|
+
}, {
|
91
|
+
level: 'info',
|
92
|
+
target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts'),
|
93
|
+
options: { destination: dest2 }
|
94
|
+
}]
|
95
|
+
})
|
96
|
+
|
97
|
+
teardown(transport.end.bind(transport))
|
98
|
+
|
99
|
+
const instance = pino(transport)
|
100
|
+
instance.info('hello')
|
101
|
+
|
102
|
+
await Promise.all([watchFileCreated(dest1), watchFileCreated(dest2)])
|
103
|
+
|
104
|
+
const result1 = JSON.parse(await readFile(dest1, { encoding: 'utf8' }))
|
105
|
+
delete result1.time
|
106
|
+
same(result1, {
|
107
|
+
pid,
|
108
|
+
hostname,
|
109
|
+
level: 30,
|
110
|
+
msg: 'hello'
|
111
|
+
})
|
112
|
+
const result2 = JSON.parse(await readFile(dest2, { encoding: 'utf8' }))
|
113
|
+
delete result2.time
|
114
|
+
same(result2, {
|
115
|
+
pid,
|
116
|
+
hostname,
|
117
|
+
level: 30,
|
118
|
+
msg: 'hello'
|
119
|
+
})
|
120
|
+
})
|
121
|
+
|
122
|
+
test('no transport.end()', async ({ same, teardown }) => {
|
123
|
+
const destination = join(
|
124
|
+
os.tmpdir(),
|
125
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
126
|
+
)
|
127
|
+
const transport = pino.transport({
|
128
|
+
target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts'),
|
129
|
+
options: { destination }
|
130
|
+
})
|
131
|
+
const instance = pino(transport)
|
132
|
+
instance.info('hello')
|
133
|
+
await watchFileCreated(destination)
|
134
|
+
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
135
|
+
delete result.time
|
136
|
+
same(result, {
|
137
|
+
pid,
|
138
|
+
hostname,
|
139
|
+
level: 30,
|
140
|
+
msg: 'hello'
|
141
|
+
})
|
142
|
+
})
|
143
|
+
|
144
|
+
test('autoEnd = false', async ({ equal, same, teardown }) => {
|
145
|
+
const destination = join(
|
146
|
+
os.tmpdir(),
|
147
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
148
|
+
)
|
149
|
+
const count = process.listenerCount('exit')
|
150
|
+
const transport = pino.transport({
|
151
|
+
target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts'),
|
152
|
+
options: { destination },
|
153
|
+
worker: { autoEnd: false }
|
154
|
+
})
|
155
|
+
teardown(transport.end.bind(transport))
|
156
|
+
await once(transport, 'ready')
|
157
|
+
|
158
|
+
const instance = pino(transport)
|
159
|
+
instance.info('hello')
|
160
|
+
|
161
|
+
await watchFileCreated(destination)
|
162
|
+
|
163
|
+
equal(count, process.listenerCount('exit'))
|
164
|
+
|
165
|
+
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
166
|
+
delete result.time
|
167
|
+
same(result, {
|
168
|
+
pid,
|
169
|
+
hostname,
|
170
|
+
level: 30,
|
171
|
+
msg: 'hello'
|
172
|
+
})
|
173
|
+
})
|
174
|
+
|
175
|
+
test('stdout in worker', async ({ not }) => {
|
176
|
+
let actual = ''
|
177
|
+
const child = execa(process.argv[0], ['-r', 'ts-node/register', join(__dirname, '..', 'fixtures', 'ts', 'transport-main.ts')])
|
178
|
+
|
179
|
+
child.stdout?.pipe(writer((s, enc, cb) => {
|
180
|
+
actual += s
|
181
|
+
cb()
|
182
|
+
}))
|
183
|
+
await once(child, 'close')
|
184
|
+
not(strip(actual).match(/Hello/), null)
|
185
|
+
})
|
186
|
+
|
187
|
+
test('log and exit on ready', async ({ not }) => {
|
188
|
+
let actual = ''
|
189
|
+
const child = execa(process.argv[0], ['-r', 'ts-node/register', join(__dirname, '..', 'fixtures', 'ts', 'transport-exit-on-ready.ts')])
|
190
|
+
|
191
|
+
child.stdout?.pipe(writer((s, enc, cb) => {
|
192
|
+
actual += s
|
193
|
+
cb()
|
194
|
+
}))
|
195
|
+
await once(child, 'close')
|
196
|
+
not(strip(actual).match(/Hello/), null)
|
197
|
+
})
|
198
|
+
|
199
|
+
test('log and exit before ready', async ({ not }) => {
|
200
|
+
let actual = ''
|
201
|
+
const child = execa(process.argv[0], ['-r', 'ts-node/register', join(__dirname, '..', 'fixtures', 'ts', 'transport-exit-immediately.ts')])
|
202
|
+
|
203
|
+
child.stdout?.pipe(writer((s, enc, cb) => {
|
204
|
+
actual += s
|
205
|
+
cb()
|
206
|
+
}))
|
207
|
+
await once(child, 'close')
|
208
|
+
not(strip(actual).match(/Hello/), null)
|
209
|
+
})
|
210
|
+
|
211
|
+
test('log and exit before ready with async dest', async ({ not }) => {
|
212
|
+
const destination = join(
|
213
|
+
os.tmpdir(),
|
214
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
215
|
+
)
|
216
|
+
const child = execa(process.argv[0], ['-r', 'ts-node/register', join(__dirname, '..', 'fixtures', 'ts', 'transport-exit-immediately-with-async-dest.ts'), destination])
|
217
|
+
|
218
|
+
await once(child, 'exit')
|
219
|
+
|
220
|
+
const actual = await readFile(destination, { encoding: 'utf8' })
|
221
|
+
|
222
|
+
not(strip(actual).match(/HELLO/), null)
|
223
|
+
not(strip(actual).match(/WORLD/), null)
|
224
|
+
})
|
225
|
+
|
226
|
+
test('string integer destination', async ({ not }) => {
|
227
|
+
let actual = ''
|
228
|
+
const child = execa(process.argv[0], ['-r', 'ts-node/register', join(__dirname, '..', 'fixtures', 'ts', 'transport-string-stdout.ts')])
|
229
|
+
|
230
|
+
child.stdout?.pipe(writer((s, enc, cb) => {
|
231
|
+
actual += s
|
232
|
+
cb()
|
233
|
+
}))
|
234
|
+
await once(child, 'close')
|
235
|
+
not(strip(actual).match(/Hello/), null)
|
236
|
+
})
|
@@ -0,0 +1,112 @@
|
|
1
|
+
import * as os from 'node:os'
|
2
|
+
import { join } from 'node:path'
|
3
|
+
import fs from 'node:fs'
|
4
|
+
import { watchFileCreated } from '../helper'
|
5
|
+
import { test } from 'tap'
|
6
|
+
import pino from '../../'
|
7
|
+
import * as url from 'node:url'
|
8
|
+
|
9
|
+
const readFile = fs.promises.readFile
|
10
|
+
|
11
|
+
const { pid } = process
|
12
|
+
const hostname = os.hostname()
|
13
|
+
|
14
|
+
// A subset of the test from core.test.js, we don't need all of them to check for compatibility
|
15
|
+
function runTests(esVersion: string): void {
|
16
|
+
test(`(ts -> ${esVersion}) pino.transport with file`, async ({ same, teardown }) => {
|
17
|
+
const destination = join(
|
18
|
+
os.tmpdir(),
|
19
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
20
|
+
)
|
21
|
+
const transport = pino.transport({
|
22
|
+
target: join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`),
|
23
|
+
options: { destination }
|
24
|
+
})
|
25
|
+
teardown(transport.end.bind(transport))
|
26
|
+
const instance = pino(transport)
|
27
|
+
instance.info('hello')
|
28
|
+
await watchFileCreated(destination)
|
29
|
+
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
30
|
+
delete result.time
|
31
|
+
same(result, {
|
32
|
+
pid,
|
33
|
+
hostname,
|
34
|
+
level: 30,
|
35
|
+
msg: 'hello'
|
36
|
+
})
|
37
|
+
})
|
38
|
+
|
39
|
+
test(`(ts -> ${esVersion}) pino.transport with file URL`, async ({ same, teardown }) => {
|
40
|
+
const destination = join(
|
41
|
+
os.tmpdir(),
|
42
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
43
|
+
)
|
44
|
+
const transport = pino.transport({
|
45
|
+
target: url.pathToFileURL(join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`)).href,
|
46
|
+
options: { destination }
|
47
|
+
})
|
48
|
+
teardown(transport.end.bind(transport))
|
49
|
+
const instance = pino(transport)
|
50
|
+
instance.info('hello')
|
51
|
+
await watchFileCreated(destination)
|
52
|
+
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
53
|
+
delete result.time
|
54
|
+
same(result, {
|
55
|
+
pid,
|
56
|
+
hostname,
|
57
|
+
level: 30,
|
58
|
+
msg: 'hello'
|
59
|
+
})
|
60
|
+
})
|
61
|
+
|
62
|
+
test(`(ts -> ${esVersion}) pino.transport with two files`, async ({ same, teardown }) => {
|
63
|
+
const dest1 = join(
|
64
|
+
os.tmpdir(),
|
65
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
66
|
+
)
|
67
|
+
const dest2 = join(
|
68
|
+
os.tmpdir(),
|
69
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
70
|
+
)
|
71
|
+
const transport = pino.transport({
|
72
|
+
targets: [{
|
73
|
+
level: 'info',
|
74
|
+
target: join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`),
|
75
|
+
options: { destination: dest1 }
|
76
|
+
}, {
|
77
|
+
level: 'info',
|
78
|
+
target: join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`),
|
79
|
+
options: { destination: dest2 }
|
80
|
+
}]
|
81
|
+
})
|
82
|
+
|
83
|
+
teardown(transport.end.bind(transport))
|
84
|
+
|
85
|
+
const instance = pino(transport)
|
86
|
+
instance.info('hello')
|
87
|
+
|
88
|
+
await Promise.all([watchFileCreated(dest1), watchFileCreated(dest2)])
|
89
|
+
|
90
|
+
const result1 = JSON.parse(await readFile(dest1, { encoding: 'utf8' }))
|
91
|
+
delete result1.time
|
92
|
+
same(result1, {
|
93
|
+
pid,
|
94
|
+
hostname,
|
95
|
+
level: 30,
|
96
|
+
msg: 'hello'
|
97
|
+
})
|
98
|
+
const result2 = JSON.parse(await readFile(dest2, { encoding: 'utf8' }))
|
99
|
+
delete result2.time
|
100
|
+
same(result2, {
|
101
|
+
pid,
|
102
|
+
hostname,
|
103
|
+
level: 30,
|
104
|
+
msg: 'hello'
|
105
|
+
})
|
106
|
+
})
|
107
|
+
}
|
108
|
+
|
109
|
+
runTests('es5')
|
110
|
+
runTests('es6')
|
111
|
+
runTests('es2017')
|
112
|
+
runTests('esnext')
|
@@ -0,0 +1,239 @@
|
|
1
|
+
'use strict'
|
2
|
+
|
3
|
+
const os = require('node:os')
|
4
|
+
const { join } = require('node:path')
|
5
|
+
const { readFile, symlink, unlink, mkdir, writeFile } = require('node:fs').promises
|
6
|
+
const { test } = require('tap')
|
7
|
+
const { isWin, isYarnPnp, watchFileCreated, file } = require('../helper')
|
8
|
+
const { once } = require('node:events')
|
9
|
+
const execa = require('execa')
|
10
|
+
const pino = require('../../')
|
11
|
+
const rimraf = require('rimraf')
|
12
|
+
|
13
|
+
const { pid } = process
|
14
|
+
const hostname = os.hostname()
|
15
|
+
|
16
|
+
async function installTransportModule (target) {
|
17
|
+
if (isYarnPnp) {
|
18
|
+
return
|
19
|
+
}
|
20
|
+
try {
|
21
|
+
await uninstallTransportModule()
|
22
|
+
} catch {}
|
23
|
+
|
24
|
+
if (!target) {
|
25
|
+
target = join(__dirname, '..', '..')
|
26
|
+
}
|
27
|
+
|
28
|
+
await symlink(
|
29
|
+
join(__dirname, '..', 'fixtures', 'transport'),
|
30
|
+
join(target, 'node_modules', 'transport')
|
31
|
+
)
|
32
|
+
}
|
33
|
+
|
34
|
+
async function uninstallTransportModule () {
|
35
|
+
if (isYarnPnp) {
|
36
|
+
return
|
37
|
+
}
|
38
|
+
await unlink(join(__dirname, '..', '..', 'node_modules', 'transport'))
|
39
|
+
}
|
40
|
+
|
41
|
+
// TODO make this test pass on Windows
|
42
|
+
test('pino.transport with package', { skip: isWin }, async ({ same, teardown }) => {
|
43
|
+
const destination = file()
|
44
|
+
|
45
|
+
await installTransportModule()
|
46
|
+
|
47
|
+
const transport = pino.transport({
|
48
|
+
target: 'transport',
|
49
|
+
options: { destination }
|
50
|
+
})
|
51
|
+
|
52
|
+
teardown(async () => {
|
53
|
+
await uninstallTransportModule()
|
54
|
+
transport.end()
|
55
|
+
})
|
56
|
+
const instance = pino(transport)
|
57
|
+
instance.info('hello')
|
58
|
+
await watchFileCreated(destination)
|
59
|
+
const result = JSON.parse(await readFile(destination))
|
60
|
+
delete result.time
|
61
|
+
same(result, {
|
62
|
+
pid,
|
63
|
+
hostname,
|
64
|
+
level: 30,
|
65
|
+
msg: 'hello'
|
66
|
+
})
|
67
|
+
})
|
68
|
+
|
69
|
+
// TODO make this test pass on Windows
|
70
|
+
test('pino.transport with package as a target', { skip: isWin }, async ({ same, teardown }) => {
|
71
|
+
const destination = file()
|
72
|
+
|
73
|
+
await installTransportModule()
|
74
|
+
|
75
|
+
const transport = pino.transport({
|
76
|
+
targets: [{
|
77
|
+
target: 'transport',
|
78
|
+
options: { destination }
|
79
|
+
}]
|
80
|
+
})
|
81
|
+
teardown(async () => {
|
82
|
+
await uninstallTransportModule()
|
83
|
+
transport.end()
|
84
|
+
})
|
85
|
+
const instance = pino(transport)
|
86
|
+
instance.info('hello')
|
87
|
+
await watchFileCreated(destination)
|
88
|
+
const result = JSON.parse(await readFile(destination))
|
89
|
+
delete result.time
|
90
|
+
same(result, {
|
91
|
+
pid,
|
92
|
+
hostname,
|
93
|
+
level: 30,
|
94
|
+
msg: 'hello'
|
95
|
+
})
|
96
|
+
})
|
97
|
+
|
98
|
+
// TODO make this test pass on Windows
|
99
|
+
test('pino({ transport })', { skip: isWin || isYarnPnp }, async ({ same, teardown }) => {
|
100
|
+
const folder = join(
|
101
|
+
os.tmpdir(),
|
102
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
103
|
+
)
|
104
|
+
|
105
|
+
teardown(() => {
|
106
|
+
rimraf.sync(folder)
|
107
|
+
})
|
108
|
+
|
109
|
+
const destination = join(folder, 'output')
|
110
|
+
|
111
|
+
await mkdir(join(folder, 'node_modules'), { recursive: true })
|
112
|
+
|
113
|
+
// Link pino
|
114
|
+
await symlink(
|
115
|
+
join(__dirname, '..', '..'),
|
116
|
+
join(folder, 'node_modules', 'pino')
|
117
|
+
)
|
118
|
+
|
119
|
+
await installTransportModule(folder)
|
120
|
+
|
121
|
+
const toRun = join(folder, 'index.js')
|
122
|
+
|
123
|
+
const toRunContent = `
|
124
|
+
const pino = require('pino')
|
125
|
+
const logger = pino({
|
126
|
+
transport: {
|
127
|
+
target: 'transport',
|
128
|
+
options: { destination: '${destination}' }
|
129
|
+
}
|
130
|
+
})
|
131
|
+
logger.info('hello')
|
132
|
+
`
|
133
|
+
|
134
|
+
await writeFile(toRun, toRunContent)
|
135
|
+
|
136
|
+
const child = execa(process.argv[0], [toRun])
|
137
|
+
|
138
|
+
await once(child, 'close')
|
139
|
+
|
140
|
+
const result = JSON.parse(await readFile(destination))
|
141
|
+
delete result.time
|
142
|
+
same(result, {
|
143
|
+
pid: child.pid,
|
144
|
+
hostname,
|
145
|
+
level: 30,
|
146
|
+
msg: 'hello'
|
147
|
+
})
|
148
|
+
})
|
149
|
+
|
150
|
+
// TODO make this test pass on Windows
|
151
|
+
test('pino({ transport }) from a wrapped dependency', { skip: isWin || isYarnPnp }, async ({ same, teardown }) => {
|
152
|
+
const folder = join(
|
153
|
+
os.tmpdir(),
|
154
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
155
|
+
)
|
156
|
+
|
157
|
+
const wrappedFolder = join(
|
158
|
+
os.tmpdir(),
|
159
|
+
'_' + Math.random().toString(36).substr(2, 9)
|
160
|
+
)
|
161
|
+
|
162
|
+
const destination = join(folder, 'output')
|
163
|
+
|
164
|
+
await mkdir(join(folder, 'node_modules'), { recursive: true })
|
165
|
+
await mkdir(join(wrappedFolder, 'node_modules'), { recursive: true })
|
166
|
+
|
167
|
+
teardown(() => {
|
168
|
+
rimraf.sync(wrappedFolder)
|
169
|
+
rimraf.sync(folder)
|
170
|
+
})
|
171
|
+
|
172
|
+
// Link pino
|
173
|
+
await symlink(
|
174
|
+
join(__dirname, '..', '..'),
|
175
|
+
join(wrappedFolder, 'node_modules', 'pino')
|
176
|
+
)
|
177
|
+
|
178
|
+
// Link get-caller-file
|
179
|
+
await symlink(
|
180
|
+
join(__dirname, '..', '..', 'node_modules', 'get-caller-file'),
|
181
|
+
join(wrappedFolder, 'node_modules', 'get-caller-file')
|
182
|
+
)
|
183
|
+
|
184
|
+
// Link wrapped
|
185
|
+
await symlink(
|
186
|
+
wrappedFolder,
|
187
|
+
join(folder, 'node_modules', 'wrapped')
|
188
|
+
)
|
189
|
+
|
190
|
+
await installTransportModule(folder)
|
191
|
+
|
192
|
+
const pkgjsonContent = {
|
193
|
+
name: 'pino'
|
194
|
+
}
|
195
|
+
|
196
|
+
await writeFile(join(wrappedFolder, 'package.json'), JSON.stringify(pkgjsonContent))
|
197
|
+
|
198
|
+
const wrapped = join(wrappedFolder, 'index.js')
|
199
|
+
|
200
|
+
const wrappedContent = `
|
201
|
+
const pino = require('pino')
|
202
|
+
const getCaller = require('get-caller-file')
|
203
|
+
|
204
|
+
module.exports = function build () {
|
205
|
+
const logger = pino({
|
206
|
+
transport: {
|
207
|
+
caller: getCaller(),
|
208
|
+
target: 'transport',
|
209
|
+
options: { destination: '${destination}' }
|
210
|
+
}
|
211
|
+
})
|
212
|
+
return logger
|
213
|
+
}
|
214
|
+
`
|
215
|
+
|
216
|
+
await writeFile(wrapped, wrappedContent)
|
217
|
+
|
218
|
+
const toRun = join(folder, 'index.js')
|
219
|
+
|
220
|
+
const toRunContent = `
|
221
|
+
const logger = require('wrapped')()
|
222
|
+
logger.info('hello')
|
223
|
+
`
|
224
|
+
|
225
|
+
await writeFile(toRun, toRunContent)
|
226
|
+
|
227
|
+
const child = execa(process.argv[0], [toRun])
|
228
|
+
|
229
|
+
await once(child, 'close')
|
230
|
+
|
231
|
+
const result = JSON.parse(await readFile(destination))
|
232
|
+
delete result.time
|
233
|
+
same(result, {
|
234
|
+
pid: child.pid,
|
235
|
+
hostname,
|
236
|
+
level: 30,
|
237
|
+
msg: 'hello'
|
238
|
+
})
|
239
|
+
})
|