diff --git a/src/Roarr.ts b/src/Roarr.ts index 7d9e049..b88ff3f 100644 --- a/src/Roarr.ts +++ b/src/Roarr.ts @@ -1,8 +1,6 @@ import { createLogger } from './factories/createLogger'; -import { createMockLogger } from './factories/createMockLogger'; import { createRoarrInitialGlobalState } from './factories/createRoarrInitialGlobalState'; import { type MessageSerializer, type RoarrGlobalState } from './types'; -import { isTruthy } from './utilities/isTruthy'; import fastJson from 'fast-json-stringify'; import safeStringify from 'safe-stable-stringify'; @@ -30,15 +28,6 @@ const ROARR = createRoarrInitialGlobalState( globalThis.ROARR = ROARR; -let logFactory = createLogger; - -// eslint-disable-next-line node/no-process-env -const enabled = isTruthy(process.env.ROARR_LOG ?? ''); - -if (!enabled) { - logFactory = createMockLogger; -} - const serializeMessage: MessageSerializer = (message) => { return ( '{"context":' + @@ -48,7 +37,7 @@ const serializeMessage: MessageSerializer = (message) => { ); }; -const Roarr = logFactory((message) => { +const Roarr = createLogger((message) => { if (ROARR.write) { // Stringify message as soon as it is received to prevent // properties of the context from being modified by reference. diff --git a/src/factories/createLogger.ts b/src/factories/createLogger.ts index 2632821..c1a1426 100644 --- a/src/factories/createLogger.ts +++ b/src/factories/createLogger.ts @@ -10,6 +10,9 @@ import { type TransformMessageFunction, } from '../types'; import { hasOwnProperty } from '../utilities'; +import { isBrowser } from '../utilities/isBrowser'; +import { isTruthy } from '../utilities/isTruthy'; +import { createMockLogger } from './createMockLogger'; import { printf } from 'fast-printf'; import safeStringify from 'safe-stable-stringify'; @@ -121,6 +124,15 @@ export const createLogger = ( parentMessageContext: MessageContext = {}, transforms: ReadonlyArray> = [], ): Logger => { + if (!isBrowser()) { + // eslint-disable-next-line node/no-process-env + const enabled = isTruthy(process.env.ROARR_LOG ?? ''); + + if (!enabled) { + return createMockLogger(onMessage, parentMessageContext); + } + } + const log = ( a: any, b: any, diff --git a/src/utilities/isBrowser.ts b/src/utilities/isBrowser.ts new file mode 100644 index 0000000..5408914 --- /dev/null +++ b/src/utilities/isBrowser.ts @@ -0,0 +1 @@ +export const isBrowser = () => typeof window !== 'undefined'; diff --git a/test/roarr/integrations/README.md b/test/roarr/integrations/README.md index 898e982..a85a5e0 100644 --- a/test/roarr/integrations/README.md +++ b/test/roarr/integrations/README.md @@ -1,5 +1,3 @@ # Integration Tests -Tests in `./integrations` simulate `ROARR_LOG=0` (`noLog.ts`) and `ROARR_LOG=1` (`log.ts`) states. - -The reason we cannot just sandbox this logic is because [the factory logic is initiated at the time when script is loaded](https://github.com/gajus/roarr/blob/v7.0.3/src/Roarr.ts#L37-L48), i.e. there is no way to reset logic once the script has been imported. Furthermore, each test must be run in a separate process to avoid global pollution (e.g., `ROARR.sequence`). \ No newline at end of file +Tests in `./integrations` simulate `ROARR_LOG=0` (`noLog.ts`) and `ROARR_LOG=1` (`log.ts`) states. \ No newline at end of file diff --git a/test/roarr/asyncLocalScope.ts b/test/roarr/integrations/asyncLocalScope.ts similarity index 96% rename from test/roarr/asyncLocalScope.ts rename to test/roarr/integrations/asyncLocalScope.ts index 1f3f54e..3079ea8 100644 --- a/test/roarr/asyncLocalScope.ts +++ b/test/roarr/integrations/asyncLocalScope.ts @@ -1,12 +1,16 @@ /* eslint-disable max-nested-callbacks */ /* eslint-disable ava/use-test */ -import { createLogger } from '../../src/factories/createLogger'; -import { createRoarrInitialGlobalState } from '../../src/factories/createRoarrInitialGlobalState'; -import { type Logger, type Message } from '../../src/types'; -import test from 'ava'; +import { createLogger } from '../../../src/factories/createLogger'; +import { createRoarrInitialGlobalState } from '../../../src/factories/createRoarrInitialGlobalState'; +import { type Logger, type Message } from '../../../src/types'; +import { createIntegrationTest } from '../../helpers/createIntegrationTest'; import { setTimeout } from 'node:timers/promises'; +const test = createIntegrationTest({ + writeLogs: true, +}); + const time = -1; const version = '2.0.0'; diff --git a/test/roarr/roarr.ts b/test/roarr/integrations/roarr.ts similarity index 96% rename from test/roarr/roarr.ts rename to test/roarr/integrations/roarr.ts index bf965ac..eab5991 100644 --- a/test/roarr/roarr.ts +++ b/test/roarr/integrations/roarr.ts @@ -1,7 +1,11 @@ -import { createLogger } from '../../src/factories/createLogger'; -import { createRoarrInitialGlobalState } from '../../src/factories/createRoarrInitialGlobalState'; -import { type Logger, type Message } from '../../src/types'; -import test from 'ava'; +import { createLogger } from '../../../src/factories/createLogger'; +import { createRoarrInitialGlobalState } from '../../../src/factories/createRoarrInitialGlobalState'; +import { type Logger, type Message } from '../../../src/types'; +import { createIntegrationTest } from '../../helpers/createIntegrationTest'; + +const test = createIntegrationTest({ + writeLogs: true, +}); const time = -1; const version = '2.0.0';