roarr
Version:
JSON logger for Node.js and browser.
58 lines (45 loc) • 1.45 kB
text/typescript
import { ROARR_VERSION } from '../config';
import { type RoarrGlobalState } from '../types';
import { createNodeWriter } from './createNodeWriter';
import compareSemver from 'semver-compare';
export const createRoarrInitialGlobalState = (
currentState: any,
): RoarrGlobalState => {
const versions = (currentState.versions || []).concat();
if (versions.length > 1) {
versions.sort(compareSemver);
}
const currentIsLatestVersion =
!versions.length ||
compareSemver(ROARR_VERSION, versions[versions.length - 1]) === 1;
if (!versions.includes(ROARR_VERSION)) {
versions.push(ROARR_VERSION);
}
versions.sort(compareSemver);
let newState = {
onceLog: new Set<string>(),
sequence: 0,
...currentState,
versions,
};
if (currentIsLatestVersion || !newState.write) {
try {
newState.teardown?.();
// eslint-disable-next-line no-empty
} catch {}
try {
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
const AsyncLocalStorage = require('node:async_hooks').AsyncLocalStorage;
const asyncLocalStorage = new AsyncLocalStorage();
const nodeWriter = createNodeWriter();
newState = {
...newState,
asyncLocalStorage,
teardown: nodeWriter.teardown,
write: nodeWriter.write,
};
// eslint-disable-next-line no-empty
} catch {}
}
return newState;
};