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.
Files changed (166) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +113 -0
  3. package/bin.js +6 -0
  4. package/bingo-logger.js +211 -0
  5. package/browser.js +358 -0
  6. package/docs/api.md +1352 -0
  7. package/docs/asynchronous.md +102 -0
  8. package/docs/benchmarks.md +58 -0
  9. package/docs/browser.md +199 -0
  10. package/docs/bundling.md +34 -0
  11. package/docs/child-loggers.md +95 -0
  12. package/docs/ecosystem.md +74 -0
  13. package/docs/help.md +305 -0
  14. package/docs/lts.md +62 -0
  15. package/docs/pretty.md +101 -0
  16. package/docs/redaction.md +135 -0
  17. package/docs/transports.md +792 -0
  18. package/docs/web.md +257 -0
  19. package/file.js +12 -0
  20. package/lib/caller.js +30 -0
  21. package/lib/deprecations.js +10 -0
  22. package/lib/levels.js +193 -0
  23. package/lib/meta.js +5 -0
  24. package/lib/multistream.js +156 -0
  25. package/lib/parse.js +14 -0
  26. package/lib/proto.js +216 -0
  27. package/lib/redaction.js +118 -0
  28. package/lib/symbols.js +70 -0
  29. package/lib/time.js +11 -0
  30. package/lib/tools.js +563 -0
  31. package/lib/transport-stream.js +47 -0
  32. package/lib/transport.js +157 -0
  33. package/lib/worker-pipeline.js +40 -0
  34. package/lib/worker.js +54 -0
  35. package/package.json +131 -0
  36. package/test/basic.test.js +719 -0
  37. package/test/broken-pipe.test.js +42 -0
  38. package/test/browser-levels.test.js +218 -0
  39. package/test/browser-serializers.test.js +354 -0
  40. package/test/browser-timestamp.test.js +88 -0
  41. package/test/browser-transmit.test.js +349 -0
  42. package/test/browser.test.js +547 -0
  43. package/test/complex-objects.test.js +34 -0
  44. package/test/crlf.test.js +32 -0
  45. package/test/custom-levels.test.js +294 -0
  46. package/test/error.test.js +374 -0
  47. package/test/escaping.test.js +91 -0
  48. package/test/esm/esm.mjs +12 -0
  49. package/test/esm/index.test.js +34 -0
  50. package/test/esm/named-exports.mjs +28 -0
  51. package/test/exit.test.js +85 -0
  52. package/test/final.test.js +237 -0
  53. package/test/fixtures/broken-pipe/basic.js +9 -0
  54. package/test/fixtures/broken-pipe/destination.js +10 -0
  55. package/test/fixtures/broken-pipe/syncfalse.js +12 -0
  56. package/test/fixtures/console-transport.js +13 -0
  57. package/test/fixtures/default-exit.js +8 -0
  58. package/test/fixtures/destination-exit.js +8 -0
  59. package/test/fixtures/eval/index.js +29 -0
  60. package/test/fixtures/eval/node_modules/14-files.js +3 -0
  61. package/test/fixtures/eval/node_modules/2-files.js +3 -0
  62. package/test/fixtures/eval/node_modules/file1.js +5 -0
  63. package/test/fixtures/eval/node_modules/file10.js +5 -0
  64. package/test/fixtures/eval/node_modules/file11.js +5 -0
  65. package/test/fixtures/eval/node_modules/file12.js +5 -0
  66. package/test/fixtures/eval/node_modules/file13.js +5 -0
  67. package/test/fixtures/eval/node_modules/file14.js +11 -0
  68. package/test/fixtures/eval/node_modules/file15.js +10 -0
  69. package/test/fixtures/eval/node_modules/file2.js +5 -0
  70. package/test/fixtures/eval/node_modules/file3.js +5 -0
  71. package/test/fixtures/eval/node_modules/file4.js +5 -0
  72. package/test/fixtures/eval/node_modules/file5.js +5 -0
  73. package/test/fixtures/eval/node_modules/file6.js +5 -0
  74. package/test/fixtures/eval/node_modules/file7.js +5 -0
  75. package/test/fixtures/eval/node_modules/file8.js +5 -0
  76. package/test/fixtures/eval/node_modules/file9.js +5 -0
  77. package/test/fixtures/eval/node_modules/test.list +3 -0
  78. package/test/fixtures/pretty/basic.js +6 -0
  79. package/test/fixtures/pretty/child-with-serializer.js +17 -0
  80. package/test/fixtures/pretty/child-with-updated-chindings.js +8 -0
  81. package/test/fixtures/pretty/child.js +8 -0
  82. package/test/fixtures/pretty/custom-time-label.js +9 -0
  83. package/test/fixtures/pretty/custom-time.js +9 -0
  84. package/test/fixtures/pretty/dateformat.js +10 -0
  85. package/test/fixtures/pretty/error-props.js +9 -0
  86. package/test/fixtures/pretty/error.js +7 -0
  87. package/test/fixtures/pretty/final-no-log-before.js +8 -0
  88. package/test/fixtures/pretty/final-return.js +7 -0
  89. package/test/fixtures/pretty/final.js +9 -0
  90. package/test/fixtures/pretty/formatters.js +13 -0
  91. package/test/fixtures/pretty/level-first.js +6 -0
  92. package/test/fixtures/pretty/no-time.js +9 -0
  93. package/test/fixtures/pretty/null-prototype.js +8 -0
  94. package/test/fixtures/pretty/obj-msg-prop.js +6 -0
  95. package/test/fixtures/pretty/pretty-factory.js +6 -0
  96. package/test/fixtures/pretty/redact.js +9 -0
  97. package/test/fixtures/pretty/serializers.js +17 -0
  98. package/test/fixtures/pretty/skipped-output.js +13 -0
  99. package/test/fixtures/pretty/suppress-flush-sync-warning.js +7 -0
  100. package/test/fixtures/stdout-hack-protection.js +11 -0
  101. package/test/fixtures/syncfalse-child.js +6 -0
  102. package/test/fixtures/syncfalse-exit.js +9 -0
  103. package/test/fixtures/syncfalse-flush-exit.js +10 -0
  104. package/test/fixtures/syncfalse.js +6 -0
  105. package/test/fixtures/to-file-transport-with-transform.js +20 -0
  106. package/test/fixtures/to-file-transport.js +13 -0
  107. package/test/fixtures/to-file-transport.mjs +8 -0
  108. package/test/fixtures/transport/index.js +12 -0
  109. package/test/fixtures/transport/package.json +5 -0
  110. package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  111. package/test/fixtures/transport-exit-immediately.js +11 -0
  112. package/test/fixtures/transport-exit-on-ready.js +12 -0
  113. package/test/fixtures/transport-main.js +9 -0
  114. package/test/fixtures/transport-many-lines.js +29 -0
  115. package/test/fixtures/transport-string-stdout.js +9 -0
  116. package/test/fixtures/transport-transform.js +21 -0
  117. package/test/fixtures/transport-worker.js +13 -0
  118. package/test/fixtures/transport-wrong-export-type.js +3 -0
  119. package/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  120. package/test/fixtures/ts/to-file-transport.es2017.cjs +12 -0
  121. package/test/fixtures/ts/to-file-transport.es5.cjs +58 -0
  122. package/test/fixtures/ts/to-file-transport.es6.cjs +23 -0
  123. package/test/fixtures/ts/to-file-transport.esnext.cjs +12 -0
  124. package/test/fixtures/ts/to-file-transport.ts +11 -0
  125. package/test/fixtures/ts/transpile.cjs +40 -0
  126. package/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  127. package/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  128. package/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  129. package/test/fixtures/ts/transport-main.ts +8 -0
  130. package/test/fixtures/ts/transport-string-stdout.ts +8 -0
  131. package/test/fixtures/ts/transport-worker.ts +14 -0
  132. package/test/formatters.test.js +355 -0
  133. package/test/helper.d.ts +4 -0
  134. package/test/helper.js +128 -0
  135. package/test/hooks.test.js +97 -0
  136. package/test/http.test.js +242 -0
  137. package/test/is-level-enabled.test.js +43 -0
  138. package/test/jest/basic.spec.js +10 -0
  139. package/test/levels.test.js +528 -0
  140. package/test/metadata.test.js +106 -0
  141. package/test/mixin-merge-strategy.test.js +55 -0
  142. package/test/mixin.test.js +162 -0
  143. package/test/multistream.test.js +589 -0
  144. package/test/pretty.test.js +392 -0
  145. package/test/redact.test.js +828 -0
  146. package/test/serializers.test.js +253 -0
  147. package/test/stdout-protection.test.js +19 -0
  148. package/test/syncfalse.test.js +118 -0
  149. package/test/timestamp.test.js +121 -0
  150. package/test/transport/big.test.js +41 -0
  151. package/test/transport/bundlers-support.test.js +97 -0
  152. package/test/transport/caller.test.js +23 -0
  153. package/test/transport/core.test.js +546 -0
  154. package/test/transport/core.test.ts +236 -0
  155. package/test/transport/core.transpiled.test.ts +116 -0
  156. package/test/transport/module-link.test.js +239 -0
  157. package/test/transport/pipeline.test.js +36 -0
  158. package/test/transport/syncfalse.test.js +31 -0
  159. package/test/transport/targets.test.js +28 -0
  160. package/test/types/pino-import.test-d.ts +29 -0
  161. package/test/types/pino-multistream.test-d.ts +26 -0
  162. package/test/types/pino-top-export.test-d.ts +37 -0
  163. package/test/types/pino-transport.test-d.ts +122 -0
  164. package/test/types/pino-type-only.test-d.ts +16 -0
  165. package/test/types/pino.test-d.ts +341 -0
  166. package/test/types/pino.ts +42 -0
@@ -0,0 +1,236 @@
1
+ import * as os from 'os'
2
+ import { join } from 'path'
3
+ import { once } from 'events'
4
+ import fs from 'fs'
5
+ import { watchFileCreated } from '../helper'
6
+ import { test } from 'tap'
7
+ import bingo-logger from '../../'
8
+ import * as url from '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('bingo-logger.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 = bingo-logger.transport({
28
+ target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts'),
29
+ options: { destination }
30
+ })
31
+ teardown(transport.end.bind(transport))
32
+ const instance = bingo-logger(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('bingo-logger.transport with file (no options + error handling)', async ({ equal }) => {
46
+ const transport = bingo-logger.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('bingo-logger.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 = bingo-logger.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 = bingo-logger(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('bingo-logger.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 = bingo-logger.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 = bingo-logger(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 = bingo-logger.transport({
128
+ target: join(__dirname, '..', 'fixtures', 'ts', 'to-file-transport.ts'),
129
+ options: { destination }
130
+ })
131
+ const instance = bingo-logger(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 = bingo-logger.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 = bingo-logger(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,116 @@
1
+ import * as os from 'os'
2
+ import { join } from 'path'
3
+ import { once } from 'events'
4
+ import fs from 'fs'
5
+ import { watchFileCreated } from '../helper'
6
+ import { test } from 'tap'
7
+ import bingo-logger from '../../'
8
+ import * as url from 'url'
9
+ import { default as strip } from 'strip-ansi'
10
+ import execa from 'execa'
11
+ import writer from 'flush-write-stream'
12
+
13
+ const readFile = fs.promises.readFile
14
+
15
+ const { pid } = process
16
+ const hostname = os.hostname()
17
+
18
+ // A subset of the test from core.test.js, we don't need all of them to check for compatibility
19
+ function runTests(esVersion: string): void {
20
+ test(`(ts -> ${esVersion}) bingo-logger.transport with file`, async ({ same, teardown }) => {
21
+ const destination = join(
22
+ os.tmpdir(),
23
+ '_' + Math.random().toString(36).substr(2, 9)
24
+ )
25
+ const transport = bingo-logger.transport({
26
+ target: join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`),
27
+ options: { destination }
28
+ })
29
+ teardown(transport.end.bind(transport))
30
+ const instance = bingo-logger(transport)
31
+ instance.info('hello')
32
+ await watchFileCreated(destination)
33
+ const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
34
+ delete result.time
35
+ same(result, {
36
+ pid,
37
+ hostname,
38
+ level: 30,
39
+ msg: 'hello'
40
+ })
41
+ })
42
+
43
+ test(`(ts -> ${esVersion}) bingo-logger.transport with file URL`, async ({ same, teardown }) => {
44
+ const destination = join(
45
+ os.tmpdir(),
46
+ '_' + Math.random().toString(36).substr(2, 9)
47
+ )
48
+ const transport = bingo-logger.transport({
49
+ target: url.pathToFileURL(join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`)).href,
50
+ options: { destination }
51
+ })
52
+ teardown(transport.end.bind(transport))
53
+ const instance = bingo-logger(transport)
54
+ instance.info('hello')
55
+ await watchFileCreated(destination)
56
+ const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
57
+ delete result.time
58
+ same(result, {
59
+ pid,
60
+ hostname,
61
+ level: 30,
62
+ msg: 'hello'
63
+ })
64
+ })
65
+
66
+ test(`(ts -> ${esVersion}) bingo-logger.transport with two files`, async ({ same, teardown }) => {
67
+ const dest1 = join(
68
+ os.tmpdir(),
69
+ '_' + Math.random().toString(36).substr(2, 9)
70
+ )
71
+ const dest2 = join(
72
+ os.tmpdir(),
73
+ '_' + Math.random().toString(36).substr(2, 9)
74
+ )
75
+ const transport = bingo-logger.transport({
76
+ targets: [{
77
+ level: 'info',
78
+ target: join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`),
79
+ options: { destination: dest1 }
80
+ }, {
81
+ level: 'info',
82
+ target: join(__dirname, '..', 'fixtures', 'ts', `to-file-transport.${esVersion}.cjs`),
83
+ options: { destination: dest2 }
84
+ }]
85
+ })
86
+
87
+ teardown(transport.end.bind(transport))
88
+
89
+ const instance = bingo-logger(transport)
90
+ instance.info('hello')
91
+
92
+ await Promise.all([watchFileCreated(dest1), watchFileCreated(dest2)])
93
+
94
+ const result1 = JSON.parse(await readFile(dest1, { encoding: 'utf8' }))
95
+ delete result1.time
96
+ same(result1, {
97
+ pid,
98
+ hostname,
99
+ level: 30,
100
+ msg: 'hello'
101
+ })
102
+ const result2 = JSON.parse(await readFile(dest2, { encoding: 'utf8' }))
103
+ delete result2.time
104
+ same(result2, {
105
+ pid,
106
+ hostname,
107
+ level: 30,
108
+ msg: 'hello'
109
+ })
110
+ })
111
+ }
112
+
113
+ runTests('es5')
114
+ runTests('es6')
115
+ runTests('es2017')
116
+ runTests('esnext')
@@ -0,0 +1,239 @@
1
+ 'use strict'
2
+
3
+ const os = require('os')
4
+ const { join } = require('path')
5
+ const { readFile, symlink, unlink, mkdir, writeFile } = require('fs').promises
6
+ const { test } = require('tap')
7
+ const { isWin, isYarnPnp, watchFileCreated, file } = require('../helper')
8
+ const { once } = require('events')
9
+ const execa = require('execa')
10
+ const bingo-logger = 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('bingo-logger.transport with package', { skip: isWin }, async ({ same, teardown }) => {
43
+ const destination = file()
44
+
45
+ await installTransportModule()
46
+
47
+ const transport = bingo-logger.transport({
48
+ target: 'transport',
49
+ options: { destination }
50
+ })
51
+
52
+ teardown(async () => {
53
+ await uninstallTransportModule()
54
+ transport.end()
55
+ })
56
+ const instance = bingo-logger(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('bingo-logger.transport with package as a target', { skip: isWin }, async ({ same, teardown }) => {
71
+ const destination = file()
72
+
73
+ await installTransportModule()
74
+
75
+ const transport = bingo-logger.transport({
76
+ targets: [{
77
+ target: 'transport',
78
+ options: { destination }
79
+ }]
80
+ })
81
+ teardown(async () => {
82
+ await uninstallTransportModule()
83
+ transport.end()
84
+ })
85
+ const instance = bingo-logger(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('bingo-logger({ 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 bingo-logger
114
+ await symlink(
115
+ join(__dirname, '..', '..'),
116
+ join(folder, 'node_modules', 'bingo-logger')
117
+ )
118
+
119
+ await installTransportModule(folder)
120
+
121
+ const toRun = join(folder, 'index.js')
122
+
123
+ const toRunContent = `
124
+ const bingo-logger = require('bingo-logger')
125
+ const logger = bingo-logger({
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('bingo-logger({ 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 bingo-logger
173
+ await symlink(
174
+ join(__dirname, '..', '..'),
175
+ join(wrappedFolder, 'node_modules', 'bingo-logger')
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: 'bingo-logger'
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 bingo-logger = require('bingo-logger')
202
+ const getCaller = require('get-caller-file')
203
+
204
+ module.exports = function build () {
205
+ const logger = bingo-logger({
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
+ })
@@ -0,0 +1,36 @@
1
+ 'use strict'
2
+
3
+ const os = require('os')
4
+ const { join } = require('path')
5
+ const { readFile } = require('fs').promises
6
+ const { watchFileCreated, file } = require('../helper')
7
+ const { test } = require('tap')
8
+ const bingo-logger = require('../../')
9
+
10
+ const { pid } = process
11
+ const hostname = os.hostname()
12
+
13
+ test('bingo-logger.transport with a pipeline', async ({ same, teardown }) => {
14
+ const destination = file()
15
+ const transport = bingo-logger.transport({
16
+ pipeline: [{
17
+ target: join(__dirname, '..', 'fixtures', 'transport-transform.js')
18
+ }, {
19
+ target: join(__dirname, '..', 'fixtures', 'to-file-transport.js'),
20
+ options: { destination }
21
+ }]
22
+ })
23
+ teardown(transport.end.bind(transport))
24
+ const instance = bingo-logger(transport)
25
+ instance.info('hello')
26
+ await watchFileCreated(destination)
27
+ const result = JSON.parse(await readFile(destination))
28
+ delete result.time
29
+ same(result, {
30
+ pid,
31
+ hostname,
32
+ level: 30,
33
+ msg: 'hello',
34
+ service: 'bingo-logger' // this property was added by the transform
35
+ })
36
+ })
@@ -0,0 +1,31 @@
1
+ 'use strict'
2
+
3
+ const os = require('os')
4
+ const bingo-logger = require('../..')
5
+ const { join } = require('path')
6
+ const { test } = require('tap')
7
+ const { readFile } = require('fs').promises
8
+ const { watchFileCreated, file } = require('../helper')
9
+
10
+ const { pid } = process
11
+ const hostname = os.hostname()
12
+
13
+ test('thread-stream async flush', async ({ same }) => {
14
+ const destination = file()
15
+ const transport = bingo-logger.transport({
16
+ target: join(__dirname, '..', 'fixtures', 'to-file-transport.js'),
17
+ options: { destination }
18
+ })
19
+ const instance = bingo-logger(transport)
20
+ instance.info('hello')
21
+ instance.flush()
22
+ await watchFileCreated(destination)
23
+ const result = JSON.parse(await readFile(destination))
24
+ delete result.time
25
+ same(result, {
26
+ pid,
27
+ hostname,
28
+ level: 30,
29
+ msg: 'hello'
30
+ })
31
+ })
@@ -0,0 +1,28 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('tap')
4
+ const proxyquire = require('proxyquire')
5
+ const Writable = require('stream').Writable
6
+
7
+ test('file-target mocked', async function ({ equal, same, plan, pass }) {
8
+ plan(1)
9
+ let ret
10
+ const fileTarget = proxyquire('../../file', {
11
+ './bingo-logger': {
12
+ destination (opts) {
13
+ same(opts, { dest: 1, sync: false })
14
+
15
+ ret = new Writable()
16
+ ret.fd = opts.dest
17
+
18
+ process.nextTick(() => {
19
+ ret.emit('ready')
20
+ })
21
+
22
+ return ret
23
+ }
24
+ }
25
+ })
26
+
27
+ await fileTarget()
28
+ })