Skip to content

Commit 969868d

Browse files
committed
feat(log): add transports support from private impl
1 parent d790d20 commit 969868d

4 files changed

Lines changed: 35 additions & 7 deletions

File tree

.eslintignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
**/dist
22
**/bin
3+
4+
packages/log/recipes

packages/log/src/LogFactory.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,43 @@
1-
import { PrefixFactory, PrefixFactoryOptions } from 'loglevelnext';
2-
import { DeferredPromise } from 'p-defer';
1+
import type { PrefixFactoryOptions } from 'loglevelnext';
2+
import { PrefixFactory } from 'loglevelnext';
3+
import type { DeferredPromise } from 'p-defer';
4+
5+
import type { Transport } from './Transport';
36

47
interface FactoryOptions {
58
ready: DeferredPromise<unknown>;
9+
transports?: Transport[];
610
}
711

12+
export type LogMethodArgs = [string, ...unknown[]];
13+
14+
const NOOP = '() => { }';
15+
816
export class LogFactory extends PrefixFactory {
917
private readonly ready: DeferredPromise<unknown>;
18+
private readonly transports: Transport[];
1019

1120
constructor(options: PrefixFactoryOptions & FactoryOptions) {
1221
super(void 0, options);
1322

1423
this.ready = options.ready;
24+
this.transports = options.transports || [];
25+
}
26+
27+
override make(methodName: any) {
28+
const og = super.make(methodName);
29+
return (...args: LogMethodArgs) => {
30+
// is the method a noop?
31+
if (og.toString() !== NOOP) {
32+
this.transports.forEach((transport) => transport.send({ args, methodName }));
33+
}
34+
35+
// call the original method and output to console
36+
og(...args);
37+
};
1538
}
1639

17-
replaceMethods(level: number | string) {
40+
override replaceMethods(level: number | string) {
1841
super.replaceMethods(level);
1942
this.ready?.resolve();
2043
}

packages/log/src/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ import loglevel, { MethodFactoryLevels } from 'loglevelnext';
33
import defer from 'p-defer';
44

55
import { LogFactory } from './LogFactory';
6+
import { type Transport } from './Transport';
67

78
export type { MethodFactoryLevels };
8-
9+
export * from './Transport';
910
export { LogFactory };
1011

1112
export interface LogOptions {
1213
brand?: string;
1314
name: string;
15+
transports?: Transport[];
1416
}
1517

1618
type LogIndex = {
@@ -52,12 +54,13 @@ export const getLog = (opts?: LogOptions) => {
5254
level: ({ level }: { level: string }) => colors[level],
5355
ready,
5456
template,
55-
time: () => new Date().toTimeString().split(' ')[0]
57+
time: () => new Date().toTimeString().split(' ')[0],
58+
transports: options.transports
5659
} as any);
5760
const { DOT_LOG_LEVEL = 'info' } = typeof process === 'undefined' ? defaultEnv : process.env;
5861
const logOptions = {
5962
factory,
60-
level: DOT_LOG_LEVEL,
63+
level: DOT_LOG_LEVEL || 'info',
6164
name: `dot-log:${options.name}`
6265
};
6366

shared/tsconfig.base.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@
2222
"target": "es2020",
2323
"useUnknownInCatchVariables": false
2424
},
25-
"exclude": ["dist", "node_modules"]
25+
"exclude": ["dist", "node_modules", "**/recipes"]
2626
}

0 commit comments

Comments
 (0)