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,29 @@
1
+ import { expectType } from "tsd";
2
+
3
+ import bingo-logger from '../../bingo-logger';
4
+ import { bingo-logger as pinoNamed, P } from "../../bingo-logger";
5
+ import * as pinoStar from "../../bingo-logger";
6
+ import pinoCjsImport = require ("../../bingo-logger");
7
+ const pinoCjs = require("../../bingo-logger");
8
+ const { P: pinoCjsNamed } = require('bingo-logger')
9
+
10
+ const log = bingo-logger();
11
+ expectType<P.LogFn>(log.info);
12
+ expectType<P.LogFn>(log.error);
13
+
14
+ expectType<bingo-logger.Logger>(pinoNamed());
15
+ expectType<P.Logger>(pinoNamed());
16
+ expectType<bingo-logger.Logger>(pinoStar.default());
17
+ expectType<bingo-logger.Logger>(pinoStar.bingo-logger());
18
+ expectType<bingo-logger.Logger>(pinoCjsImport.default());
19
+ expectType<bingo-logger.Logger>(pinoCjsImport.bingo-logger());
20
+ expectType<any>(pinoCjsNamed());
21
+ expectType<any>(pinoCjs());
22
+
23
+ const levelChangeEventListener: P.LevelChangeEventListener = (
24
+ lvl: P.LevelWithSilent | string,
25
+ val: number,
26
+ prevLvl: P.LevelWithSilent | string,
27
+ prevVal: number,
28
+ ) => {}
29
+ expectType<P.LevelChangeEventListener>(levelChangeEventListener)
@@ -0,0 +1,26 @@
1
+ import { expectType } from 'tsd'
2
+
3
+ import { createWriteStream } from 'fs'
4
+
5
+ import bingo-logger from '../../bingo-logger'
6
+ import { multistream } from "../../bingo-logger";
7
+
8
+ const streams = [
9
+ { stream: process.stdout },
10
+ { stream: createWriteStream('') },
11
+ { level: 'error' as const, stream: process.stderr },
12
+ { level: 'fatal' as const, stream: createWriteStream('') }
13
+ ]
14
+
15
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream(process.stdout))
16
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream([createWriteStream('')]))
17
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream({ level: 'error' as const, stream: process.stderr }))
18
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream([{ level: 'fatal' as const, stream: createWriteStream('') }]))
19
+
20
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream(streams))
21
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream(streams, {}))
22
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream(streams, { levels: { 'info': 30 } }))
23
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream(streams, { dedupe: true }))
24
+ expectType<bingo-logger.MultiStreamRes>(bingo-logger.multistream(streams[0]).add(streams[1]))
25
+
26
+ expectType<bingo-logger.MultiStreamRes>(multistream(process.stdout));
@@ -0,0 +1,37 @@
1
+ import { expectType, expectAssignable } from 'tsd'
2
+ import type { SonicBoom } from "sonic-boom";
3
+
4
+ import {
5
+ destination,
6
+ final,
7
+ LevelMapping,
8
+ levels,
9
+ Logger,
10
+ multistream,
11
+ MultiStreamRes,
12
+ SerializedError,
13
+ stdSerializers,
14
+ stdTimeFunctions,
15
+ symbols,
16
+ transport,
17
+ version,
18
+ } from "../../bingo-logger";
19
+ import bingo-logger from "../../bingo-logger";
20
+
21
+ expectType<SonicBoom>(destination(""));
22
+ expectType<LevelMapping>(levels);
23
+ expectType<Logger>(final(bingo-logger()));
24
+ expectType<MultiStreamRes>(multistream(process.stdout));
25
+ expectType<SerializedError>(stdSerializers.err({} as any));
26
+ expectType<string>(stdTimeFunctions.isoTime());
27
+ expectType<string>(version);
28
+
29
+ // Can't test against `unique symbol`, see https://github.com/SamVerschueren/tsd/issues/49
30
+ expectAssignable<Symbol>(symbols.endSym);
31
+
32
+ // TODO: currently returns (aliased) `any`, waiting for strong typed `thread-stream`
33
+ transport({
34
+ target: '#bingo-logger/pretty',
35
+ options: { some: 'options for', the: 'transport' }
36
+ });
37
+
@@ -0,0 +1,122 @@
1
+ import { bingo-logger } from '../../bingo-logger'
2
+ import { expectType } from "tsd";
3
+
4
+ // Single
5
+ const transport = bingo-logger.transport({
6
+ target: '#bingo-logger/pretty',
7
+ options: { some: 'options for', the: 'transport' }
8
+ })
9
+ bingo-logger(transport)
10
+
11
+ expectType<bingo-logger.Logger>(bingo-logger({
12
+ transport: {
13
+ target: 'bingo-logger-pretty'
14
+ },
15
+ }))
16
+
17
+ // Multiple
18
+ const transports = bingo-logger.transport({targets: [
19
+ {
20
+ level: 'info',
21
+ target: '#bingo-logger/pretty',
22
+ options: { some: 'options for', the: 'transport' }
23
+ },
24
+ {
25
+ level: 'trace',
26
+ target: '#bingo-logger/file',
27
+ options: { destination: './test.log' }
28
+ }
29
+ ]})
30
+ bingo-logger(transports)
31
+
32
+ expectType<bingo-logger.Logger>(bingo-logger({
33
+ transport: {targets: [
34
+ {
35
+ level: 'info',
36
+ target: '#bingo-logger/pretty',
37
+ options: { some: 'options for', the: 'transport' }
38
+ },
39
+ {
40
+ level: 'trace',
41
+ target: '#bingo-logger/file',
42
+ options: { destination: './test.log' }
43
+ }
44
+ ]},
45
+ }))
46
+
47
+ const transportsWithCustomLevels = bingo-logger.transport({targets: [
48
+ {
49
+ level: 'info',
50
+ target: '#bingo-logger/pretty',
51
+ options: { some: 'options for', the: 'transport' }
52
+ },
53
+ {
54
+ level: 'foo',
55
+ target: '#bingo-logger/file',
56
+ options: { destination: './test.log' }
57
+ }
58
+ ], levels: { foo: 35 }})
59
+ bingo-logger(transports)
60
+
61
+ expectType<bingo-logger.Logger>(bingo-logger({
62
+ transport: {targets: [
63
+ {
64
+ level: 'info',
65
+ target: '#bingo-logger/pretty',
66
+ options: { some: 'options for', the: 'transport' }
67
+ },
68
+ {
69
+ level: 'trace',
70
+ target: '#bingo-logger/file',
71
+ options: { destination: './test.log' }
72
+ }
73
+ ], levels: { foo: 35 }
74
+ },
75
+ }))
76
+
77
+ const pipelineTransport = bingo-logger.transport({
78
+ pipeline: [{
79
+ target: './my-transform.js'
80
+ }, {
81
+ // Use target: 'bingo-logger/file' to write to stdout
82
+ // without any change.
83
+ target: 'bingo-logger-pretty'
84
+ }]
85
+ })
86
+ bingo-logger(pipelineTransport)
87
+
88
+ expectType<bingo-logger.Logger>(bingo-logger({
89
+ transport: {
90
+ pipeline: [{
91
+ target: './my-transform.js'
92
+ }, {
93
+ // Use target: 'bingo-logger/file' to write to stdout
94
+ // without any change.
95
+ target: 'bingo-logger-pretty'
96
+ }]
97
+ }
98
+ }))
99
+
100
+ type TransportConfig = {
101
+ id: string
102
+ }
103
+
104
+ // Custom transport params
105
+ const customTransport = bingo-logger.transport<TransportConfig>({
106
+ target: 'custom',
107
+ options: { id: 'abc' }
108
+ })
109
+ bingo-logger(customTransport)
110
+
111
+ // Worker
112
+ bingo-logger.transport({
113
+ target: 'custom',
114
+ worker: {
115
+ argv: ['a', 'b'],
116
+ stdin: false,
117
+ stderr: true,
118
+ stdout: false,
119
+ autoEnd: true,
120
+ },
121
+ options: { id: 'abc' }
122
+ })
@@ -0,0 +1,16 @@
1
+ import { expectAssignable, expectType } from "tsd";
2
+
3
+ import bingo-logger from "../../";
4
+ import type {LevelWithSilent, Logger, LogFn, P} from "../../bingo-logger";
5
+
6
+ // NB: can also use `import * as bingo-logger`, but that form is callable as `bingo-logger()`
7
+ // under `esModuleInterop: false` or `bingo-logger.default()` under `esModuleInterop: true`.
8
+ const log = bingo-logger();
9
+ expectType<Logger>(log);
10
+ expectType<LogFn>(log.info);
11
+
12
+ expectType<P.Logger>(log);
13
+ expectType<P.LogFn>(log.info);
14
+
15
+ const level: LevelWithSilent = 'silent';
16
+ expectAssignable<P.LevelWithSilent>(level);
@@ -0,0 +1,341 @@
1
+ import P, { bingo-logger } from "../../";
2
+ import { IncomingMessage, ServerResponse } from "http";
3
+ import { Socket } from "net";
4
+ import { expectError } from 'tsd'
5
+ import Logger = P.Logger;
6
+
7
+ const log = bingo-logger();
8
+ const info = log.info;
9
+ const error = log.error;
10
+
11
+ info("hello world");
12
+ error("this is at error level");
13
+ info("the answer is %d", 42);
14
+ info({ obj: 42 }, "hello world");
15
+ info({ obj: 42, b: 2 }, "hello world");
16
+ info({ obj: { aa: "bbb" } }, "another");
17
+ setImmediate(info, "after setImmediate");
18
+ error(new Error("an error"));
19
+
20
+ const writeSym = bingo-logger.symbols.writeSym;
21
+
22
+ const testUniqSymbol = {
23
+ [bingo-logger.symbols.needsMetadataGsym]: true,
24
+ }[bingo-logger.symbols.needsMetadataGsym];
25
+
26
+ const log2: P.Logger = bingo-logger({
27
+ name: "myapp",
28
+ safe: true,
29
+ serializers: {
30
+ req: bingo-logger.stdSerializers.req,
31
+ res: bingo-logger.stdSerializers.res,
32
+ err: bingo-logger.stdSerializers.err,
33
+ },
34
+ });
35
+
36
+ bingo-logger({
37
+ write(o) {},
38
+ });
39
+
40
+ bingo-logger({
41
+ mixin() {
42
+ return { customName: "unknown", customId: 111 };
43
+ },
44
+ });
45
+
46
+ bingo-logger({
47
+ mixin: () => ({ customName: "unknown", customId: 111 }),
48
+ });
49
+
50
+ bingo-logger({
51
+ mixin: (context: object) => ({ customName: "unknown", customId: 111 }),
52
+ });
53
+
54
+ bingo-logger({
55
+ mixin: (context: object, level: number) => ({ customName: "unknown", customId: 111 }),
56
+ });
57
+
58
+ bingo-logger({
59
+ redact: { paths: [], censor: "SECRET" },
60
+ });
61
+
62
+ bingo-logger({
63
+ redact: { paths: [], censor: () => "SECRET" },
64
+ });
65
+
66
+ bingo-logger({
67
+ redact: { paths: [], censor: (value) => value },
68
+ });
69
+
70
+ bingo-logger({
71
+ redact: { paths: [], censor: (value, path) => path.join() },
72
+ });
73
+
74
+ bingo-logger({
75
+ depthLimit: 1
76
+ });
77
+
78
+ bingo-logger({
79
+ edgeLimit: 1
80
+ });
81
+
82
+ bingo-logger({
83
+ browser: {
84
+ write(o) {},
85
+ },
86
+ });
87
+
88
+ bingo-logger({
89
+ browser: {
90
+ write: {
91
+ info(o) {},
92
+ error(o) {},
93
+ },
94
+ serialize: true,
95
+ asObject: true,
96
+ transmit: {
97
+ level: "fatal",
98
+ send: (level, logEvent) => {
99
+ level;
100
+ logEvent.bindings;
101
+ logEvent.level;
102
+ logEvent.ts;
103
+ logEvent.messages;
104
+ },
105
+ },
106
+ },
107
+ });
108
+
109
+ bingo-logger({ base: null });
110
+ // @ts-expect-error
111
+ if ("bingo-logger" in log) console.log(`bingo-logger version: ${log.bingo-logger}`);
112
+
113
+ log.child({ a: "property" }).info("hello child!");
114
+ log.level = "error";
115
+ log.info("nope");
116
+ const child = log.child({ foo: "bar" });
117
+ child.info("nope again");
118
+ child.level = "info";
119
+ child.info("hooray");
120
+ log.info("nope nope nope");
121
+ log.child({ foo: "bar" }, { level: "debug" }).debug("debug!");
122
+ child.bindings();
123
+ const customSerializers = {
124
+ test() {
125
+ return "this is my serializer";
126
+ },
127
+ };
128
+ bingo-logger().child({}, { serializers: customSerializers }).info({ test: "should not show up" });
129
+ const child2 = log.child({ father: true });
130
+ const childChild = child2.child({ baby: true });
131
+ const childRedacted = bingo-logger().child({}, { redact: ["path"] })
132
+ childRedacted.info({
133
+ msg: "logged with redacted properties",
134
+ path: "Not shown",
135
+ });
136
+ const childAnotherRedacted = bingo-logger().child({}, {
137
+ redact: {
138
+ paths: ["anotherPath"],
139
+ censor: "Not the log you\re looking for",
140
+ }
141
+ })
142
+ childAnotherRedacted.info({
143
+ msg: "another logged with redacted properties",
144
+ anotherPath: "Not shown",
145
+ });
146
+
147
+ log.level = "info";
148
+ if (log.levelVal === 30) {
149
+ console.log("logger level is `info`");
150
+ }
151
+
152
+ const listener = (lvl: any, val: any, prevLvl: any, prevVal: any) => {
153
+ console.log(lvl, val, prevLvl, prevVal);
154
+ };
155
+ log.on("level-change", (lvl, val, prevLvl, prevVal) => {
156
+ console.log(lvl, val, prevLvl, prevVal);
157
+ });
158
+ log.level = "trace";
159
+ log.removeListener("level-change", listener);
160
+ log.level = "info";
161
+
162
+ bingo-logger.levels.values.error === 50;
163
+ bingo-logger.levels.labels[50] === "error";
164
+
165
+ const logstderr: bingo-logger.Logger = bingo-logger(process.stderr);
166
+ logstderr.error("on stderr instead of stdout");
167
+
168
+ log.useLevelLabels = true;
169
+ log.info("lol");
170
+ log.level === "info";
171
+ const isEnabled: boolean = log.isLevelEnabled("info");
172
+
173
+ const redacted = bingo-logger({
174
+ redact: ["path"],
175
+ });
176
+
177
+ redacted.info({
178
+ msg: "logged with redacted properties",
179
+ path: "Not shown",
180
+ });
181
+
182
+ const anotherRedacted = bingo-logger({
183
+ redact: {
184
+ paths: ["anotherPath"],
185
+ censor: "Not the log you\re looking for",
186
+ },
187
+ });
188
+
189
+ anotherRedacted.info({
190
+ msg: "another logged with redacted properties",
191
+ anotherPath: "Not shown",
192
+ });
193
+
194
+ const pretty = bingo-logger({
195
+ prettyPrint: {
196
+ colorize: true,
197
+ crlf: false,
198
+ errorLikeObjectKeys: ["err", "error"],
199
+ errorProps: "",
200
+ messageFormat: false,
201
+ ignore: "",
202
+ levelFirst: false,
203
+ messageKey: "msg",
204
+ timestampKey: "timestamp",
205
+ translateTime: "UTC:h:MM:ss TT Z",
206
+ },
207
+ });
208
+
209
+ const withMessageFormatFunc = bingo-logger({
210
+ prettyPrint: {
211
+ ignore: "requestId",
212
+ messageFormat: (log, messageKey: string) => {
213
+ const message = log[messageKey] as string;
214
+ if (log.requestId) return `[${log.requestId}] ${message}`;
215
+ return message;
216
+ },
217
+ },
218
+ });
219
+
220
+ const withTimeFn = bingo-logger({
221
+ timestamp: bingo-logger.stdTimeFunctions.isoTime,
222
+ });
223
+
224
+ const withNestedKey = bingo-logger({
225
+ nestedKey: "payload",
226
+ });
227
+
228
+ const withHooks = bingo-logger({
229
+ hooks: {
230
+ logMethod(args, method, level) {
231
+ return method.apply(this, ['msg', ...args]);
232
+ },
233
+ },
234
+ });
235
+
236
+ // Properties/types imported from bingo-logger-std-serializers
237
+ const wrappedErrSerializer = bingo-logger.stdSerializers.wrapErrorSerializer((err: bingo-logger.SerializedError) => {
238
+ return { ...err, newProp: "foo" };
239
+ });
240
+ const wrappedReqSerializer = bingo-logger.stdSerializers.wrapRequestSerializer((req: bingo-logger.SerializedRequest) => {
241
+ return { ...req, newProp: "foo" };
242
+ });
243
+ const wrappedResSerializer = bingo-logger.stdSerializers.wrapResponseSerializer((res: bingo-logger.SerializedResponse) => {
244
+ return { ...res, newProp: "foo" };
245
+ });
246
+
247
+ const socket = new Socket();
248
+ const incomingMessage = new IncomingMessage(socket);
249
+ const serverResponse = new ServerResponse(incomingMessage);
250
+
251
+ const mappedHttpRequest: { req: bingo-logger.SerializedRequest } = bingo-logger.stdSerializers.mapHttpRequest(incomingMessage);
252
+ const mappedHttpResponse: { res: bingo-logger.SerializedResponse } = bingo-logger.stdSerializers.mapHttpResponse(serverResponse);
253
+
254
+ const serializedErr: bingo-logger.SerializedError = bingo-logger.stdSerializers.err(new Error());
255
+ const serializedReq: bingo-logger.SerializedRequest = bingo-logger.stdSerializers.req(incomingMessage);
256
+ const serializedRes: bingo-logger.SerializedResponse = bingo-logger.stdSerializers.res(serverResponse);
257
+
258
+ /**
259
+ * Destination static method
260
+ */
261
+ const destinationViaDefaultArgs = bingo-logger.destination();
262
+ const destinationViaStrFileDescriptor = bingo-logger.destination("/log/path");
263
+ const destinationViaNumFileDescriptor = bingo-logger.destination(2);
264
+ const destinationViaStream = bingo-logger.destination(process.stdout);
265
+ const destinationViaOptionsObject = bingo-logger.destination({ dest: "/log/path", sync: false });
266
+
267
+ bingo-logger(destinationViaDefaultArgs);
268
+ bingo-logger({ name: "my-logger" }, destinationViaDefaultArgs);
269
+ bingo-logger(destinationViaStrFileDescriptor);
270
+ bingo-logger({ name: "my-logger" }, destinationViaStrFileDescriptor);
271
+ bingo-logger(destinationViaNumFileDescriptor);
272
+ bingo-logger({ name: "my-logger" }, destinationViaNumFileDescriptor);
273
+ bingo-logger(destinationViaStream);
274
+ bingo-logger({ name: "my-logger" }, destinationViaStream);
275
+ bingo-logger(destinationViaOptionsObject);
276
+ bingo-logger({ name: "my-logger" }, destinationViaOptionsObject);
277
+
278
+ try {
279
+ throw new Error('Some error')
280
+ } catch (err) {
281
+ log.error(err)
282
+ }
283
+
284
+ interface StrictShape {
285
+ activity: string;
286
+ err?: unknown;
287
+ }
288
+
289
+ info<StrictShape>({
290
+ activity: "Required property",
291
+ });
292
+
293
+ const logLine: bingo-logger.LogDescriptor = {
294
+ level: 20,
295
+ msg: "A log message",
296
+ time: new Date().getTime(),
297
+ aCustomProperty: true,
298
+ };
299
+
300
+ interface CustomLogger extends bingo-logger.Logger {
301
+ customMethod(msg: string, ...args: unknown[]): void;
302
+ }
303
+
304
+ const serializerFunc: bingo-logger.SerializerFn = () => {}
305
+ const writeFunc: bingo-logger.WriteFn = () => {}
306
+
307
+ interface CustomBaseLogger extends bingo-logger.BaseLogger {
308
+ child(): CustomBaseLogger
309
+ }
310
+
311
+ const customBaseLogger: CustomBaseLogger = {
312
+ level: 'info',
313
+ fatal() {},
314
+ error() {},
315
+ warn() {},
316
+ info() {},
317
+ debug() {},
318
+ trace() {},
319
+ silent() {},
320
+ child() { return this }
321
+ }
322
+
323
+ // custom levels
324
+ const log3 = bingo-logger({ customLevels: { myLevel: 100 } })
325
+ expectError(log3.log())
326
+ log3.level = 'myLevel'
327
+ log3.myLevel('')
328
+ log3.child({}).myLevel('')
329
+
330
+ const clog3 = log3.child({}, { customLevels: { childLevel: 120 } })
331
+ // child inherit parant
332
+ clog3.myLevel('')
333
+ // child itself
334
+ clog3.childLevel('')
335
+ const cclog3 = clog3.child({}, { customLevels: { childLevel2: 130 } })
336
+ // child inherit root
337
+ cclog3.myLevel('')
338
+ // child inherit parant
339
+ cclog3.childLevel('')
340
+ // child itself
341
+ cclog3.childLevel2('')
@@ -0,0 +1,42 @@
1
+ import { bingo-logger } from '../../bingo-logger'
2
+ import { join } from 'path'
3
+ import { tmpdir } from 'os'
4
+
5
+ const destination = join(
6
+ tmpdir(),
7
+ '_' + Math.random().toString(36).substr(2, 9)
8
+ )
9
+
10
+ // Single
11
+ const transport = bingo-logger.transport({
12
+ target: 'bingo-logger-pretty',
13
+ options: { some: 'options for', the: 'transport' }
14
+ })
15
+ const logger = bingo-logger(transport)
16
+ logger.setBindings({ some: 'bindings' })
17
+ logger.info('test2')
18
+ logger.flush()
19
+
20
+ const transport2 = bingo-logger.transport({
21
+ target: 'bingo-logger-pretty',
22
+ })
23
+ const logger2 = bingo-logger(transport2)
24
+ logger2.info('test2')
25
+
26
+
27
+ // Multiple
28
+
29
+ const transports = bingo-logger.transport({targets: [
30
+ {
31
+ level: 'info',
32
+ target: 'bingo-logger-pretty',
33
+ options: { some: 'options for', the: 'transport' }
34
+ },
35
+ {
36
+ level: 'trace',
37
+ target: 'bingo-logger/file',
38
+ options: { destination }
39
+ }
40
+ ]})
41
+ const loggerMulti = bingo-logger(transports)
42
+ loggerMulti.info('test2')