bunyamin
Version:
Bunyan-based logger for Node.js supporting Trace Event format
54 lines (41 loc) • 1.2 kB
text/typescript
/* eslint-disable prefer-const */
import { Bunyamin } from './decorator';
import { noopLogger } from './noopLogger';
import { isSelfDebug } from './is-debug';
import { ThreadGroups } from './thread-groups';
type Realm = {
bunyamin: Bunyamin;
nobunyamin: Bunyamin;
threadGroups: ThreadGroups;
};
function create() {
let bunyamin: Bunyamin;
let nobunyamin: Bunyamin;
const selfDebug = isSelfDebug();
const threadGroups = new ThreadGroups(() => bunyamin);
bunyamin = new Bunyamin({
logger: noopLogger(),
threadGroups,
});
nobunyamin = new Bunyamin({
immutable: true,
logger: noopLogger(),
threadGroups,
});
if (selfDebug) {
bunyamin.trace({ cat: 'bunyamin' }, 'bunyamin global instance created');
}
return { bunyamin, nobunyamin, threadGroups };
}
function getCached(): Realm | undefined {
const result = (globalThis as any).__BUNYAMIN__;
if (isSelfDebug() && result) {
result.bunyamin.trace({ cat: 'bunyamin' }, 'bunyamin global instance retrieved from cache');
}
return result;
}
function setCached(realm: Realm) {
(globalThis as any).__BUNYAMIN__ = realm;
return realm;
}
export default setCached(getCached() ?? create());