@faapi/faapi 6.10.0 → 6.10.1

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.
package/dist/index.js CHANGED
@@ -2374,51 +2374,64 @@ function assertLogLevel(value, source) {
2374
2374
  );
2375
2375
  }
2376
2376
  }
2377
- var globalState = {
2378
- level: null,
2379
- consoleLevel: null,
2380
- sink: null,
2381
- fileSink: null,
2382
- stdout: true,
2383
- accessLog: true,
2384
- disabled: false
2385
- };
2377
+ var LOGGING_STATE_KEY = /* @__PURE__ */ Symbol.for("faapi.logger.state");
2378
+ function createDefaultLoggingState() {
2379
+ return {
2380
+ level: null,
2381
+ consoleLevel: null,
2382
+ sink: null,
2383
+ fileSink: null,
2384
+ stdout: true,
2385
+ accessLog: true,
2386
+ disabled: false
2387
+ };
2388
+ }
2389
+ function getLoggingState() {
2390
+ const g = globalThis;
2391
+ let state2 = g[LOGGING_STATE_KEY];
2392
+ if (!state2) {
2393
+ state2 = createDefaultLoggingState();
2394
+ g[LOGGING_STATE_KEY] = state2;
2395
+ }
2396
+ return state2;
2397
+ }
2386
2398
  function configureLogging(config) {
2399
+ const state2 = getLoggingState();
2387
2400
  const objectConfig = typeof config === "object" ? config : {};
2388
2401
  if (objectConfig.sink && objectConfig.dir) {
2389
2402
  throw new Error(
2390
2403
  "[faapi] config.log.sink and config.log.dir are mutually exclusive: pick one output pipeline (custom sink OR built-in file logs)."
2391
2404
  );
2392
2405
  }
2393
- void globalState.fileSink?.close();
2394
- globalState.disabled = config === false;
2395
- globalState.sink = objectConfig.sink ?? null;
2396
- globalState.accessLog = objectConfig.accessLog ?? true;
2397
- globalState.stdout = objectConfig.stdout ?? true;
2398
- globalState.fileSink = objectConfig.dir ? createFileLogSink({ dir: objectConfig.dir, splitByLevel: objectConfig.splitByLevel }) : null;
2406
+ void state2.fileSink?.close();
2407
+ state2.disabled = config === false;
2408
+ state2.sink = objectConfig.sink ?? null;
2409
+ state2.accessLog = objectConfig.accessLog ?? true;
2410
+ state2.stdout = objectConfig.stdout ?? true;
2411
+ state2.fileSink = objectConfig.dir ? createFileLogSink({ dir: objectConfig.dir, splitByLevel: objectConfig.splitByLevel }) : null;
2399
2412
  if (objectConfig.consoleLevel !== void 0) {
2400
2413
  if (objectConfig.consoleLevel !== false) {
2401
2414
  assertLogLevel(objectConfig.consoleLevel, "config.log.consoleLevel");
2402
2415
  }
2403
- globalState.consoleLevel = objectConfig.consoleLevel;
2416
+ state2.consoleLevel = objectConfig.consoleLevel;
2404
2417
  } else {
2405
- globalState.consoleLevel = null;
2418
+ state2.consoleLevel = null;
2406
2419
  }
2407
2420
  if (objectConfig.level !== void 0) {
2408
2421
  assertLogLevel(objectConfig.level, "config.log.level");
2409
- globalState.level = objectConfig.level;
2422
+ state2.level = objectConfig.level;
2410
2423
  } else if (process.env.LOG_LEVEL !== void 0) {
2411
2424
  assertLogLevel(process.env.LOG_LEVEL, "LOG_LEVEL env");
2412
- globalState.level = process.env.LOG_LEVEL;
2425
+ state2.level = process.env.LOG_LEVEL;
2413
2426
  } else {
2414
- globalState.level = null;
2427
+ state2.level = null;
2415
2428
  }
2416
2429
  }
2417
2430
  function pipelineThreshold() {
2418
- return globalState.level ?? void 0;
2431
+ return getLoggingState().level ?? void 0;
2419
2432
  }
2420
2433
  function consoleThreshold() {
2421
- return globalState.consoleLevel ?? "info";
2434
+ return getLoggingState().consoleLevel ?? "info";
2422
2435
  }
2423
2436
  function belowThreshold(level, threshold) {
2424
2437
  return threshold !== void 0 && LEVEL_RANK[level] < LEVEL_RANK[threshold];
@@ -2438,15 +2451,16 @@ function consoleDispatch(entry) {
2438
2451
  console[CONSOLE_METHOD[entry.level]](formatEntry(entry));
2439
2452
  }
2440
2453
  function globalDispatch(entry) {
2441
- if (globalState.disabled) return;
2454
+ const state2 = getLoggingState();
2455
+ if (state2.disabled) return;
2442
2456
  const pipeThreshold = pipelineThreshold();
2443
- if (globalState.sink) {
2444
- if (!belowThreshold(entry.level, pipeThreshold)) globalState.sink(entry);
2457
+ if (state2.sink) {
2458
+ if (!belowThreshold(entry.level, pipeThreshold)) state2.sink(entry);
2445
2459
  return;
2446
2460
  }
2447
- if (globalState.fileSink) {
2448
- if (!belowThreshold(entry.level, pipeThreshold)) globalState.fileSink.write(entry);
2449
- if (globalState.stdout) consoleDispatch(entry);
2461
+ if (state2.fileSink) {
2462
+ if (!belowThreshold(entry.level, pipeThreshold)) state2.fileSink.write(entry);
2463
+ if (state2.stdout) consoleDispatch(entry);
2450
2464
  return;
2451
2465
  }
2452
2466
  consoleDispatch(entry);
@@ -2455,10 +2469,12 @@ function writeLogEntry(entry) {
2455
2469
  globalDispatch(entry);
2456
2470
  }
2457
2471
  function flushLogging() {
2458
- return globalState.fileSink ? globalState.fileSink.flush() : Promise.resolve();
2472
+ const state2 = getLoggingState();
2473
+ return state2.fileSink ? state2.fileSink.flush() : Promise.resolve();
2459
2474
  }
2460
2475
  function isAccessLogEnabled() {
2461
- return !globalState.disabled && globalState.accessLog;
2476
+ const state2 = getLoggingState();
2477
+ return !state2.disabled && state2.accessLog;
2462
2478
  }
2463
2479
  function createLogger(scope, options) {
2464
2480
  const baseScope = scope;