@revealui/core 0.12.0 → 0.12.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.
Files changed (66) hide show
  1. package/README.md +2 -3
  2. package/dist/api/rest.js +4 -4
  3. package/dist/client/admin/utils/csrf.d.ts +9 -6
  4. package/dist/client/admin/utils/csrf.d.ts.map +1 -1
  5. package/dist/client/admin/utils/csrf.js +9 -6
  6. package/dist/collections/operations/fieldValidation.d.ts +5 -16
  7. package/dist/collections/operations/fieldValidation.d.ts.map +1 -1
  8. package/dist/collections/operations/fieldValidation.js +5 -20
  9. package/dist/collections/operations/update.d.ts.map +1 -1
  10. package/dist/collections/operations/update.js +4 -2
  11. package/dist/database/safe-parse.js +3 -3
  12. package/dist/database/universal-postgres.d.ts.map +1 -1
  13. package/dist/database/universal-postgres.js +10 -13
  14. package/dist/deployment-mode.d.ts +44 -0
  15. package/dist/deployment-mode.d.ts.map +1 -0
  16. package/dist/deployment-mode.js +58 -0
  17. package/dist/error-handling/error-boundary.d.ts +16 -2
  18. package/dist/error-handling/error-boundary.d.ts.map +1 -1
  19. package/dist/error-handling/error-boundary.js +18 -3
  20. package/dist/error-handling/error-reporter.d.ts +1 -1
  21. package/dist/error-handling/error-reporter.d.ts.map +1 -1
  22. package/dist/error-handling/error-reporter.js +6 -2
  23. package/dist/error-handling/index.d.ts +1 -1
  24. package/dist/error-handling/index.d.ts.map +1 -1
  25. package/dist/error-handling/index.js +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -2
  28. package/dist/instance/logger.d.ts +18 -7
  29. package/dist/instance/logger.d.ts.map +1 -1
  30. package/dist/instance/logger.js +66 -17
  31. package/dist/license/mint-client.d.ts +72 -0
  32. package/dist/license/mint-client.d.ts.map +1 -0
  33. package/dist/license/mint-client.js +175 -0
  34. package/dist/license.d.ts +6 -0
  35. package/dist/license.d.ts.map +1 -1
  36. package/dist/license.js +15 -1
  37. package/dist/observability/index.d.ts +5 -2
  38. package/dist/observability/index.d.ts.map +1 -1
  39. package/dist/observability/index.js +5 -2
  40. package/dist/observability/logger.d.ts +5 -3
  41. package/dist/observability/logger.d.ts.map +1 -1
  42. package/dist/observability/logger.js +5 -3
  43. package/dist/relationships/analyzer.js +2 -2
  44. package/dist/storage/object-storage.d.ts.map +1 -1
  45. package/dist/storage/object-storage.js +3 -3
  46. package/dist/utils/errors.d.ts +16 -4
  47. package/dist/utils/errors.d.ts.map +1 -1
  48. package/dist/utils/errors.js +14 -2
  49. package/dist/utils/json-parsing.d.ts.map +1 -1
  50. package/dist/utils/json-parsing.js +4 -2
  51. package/dist/utils/logger-client.d.ts +6 -27
  52. package/dist/utils/logger-client.d.ts.map +1 -1
  53. package/dist/utils/logger-client.js +5 -51
  54. package/dist/utils/logger-server.d.ts +16 -20
  55. package/dist/utils/logger-server.d.ts.map +1 -1
  56. package/dist/utils/logger-server.js +40 -53
  57. package/dist/utils/logger.d.ts +7 -9
  58. package/dist/utils/logger.d.ts.map +1 -1
  59. package/dist/utils/logger.js +6 -8
  60. package/package.json +154 -76
  61. package/dist/caching/index.d.ts +0 -6
  62. package/dist/caching/index.d.ts.map +0 -1
  63. package/dist/caching/index.js +0 -5
  64. package/dist/observability/tracing.d.ts +0 -149
  65. package/dist/observability/tracing.d.ts.map +0 -1
  66. package/dist/observability/tracing.js +0 -380
@@ -1,4 +1,4 @@
1
- import { defaultLogger } from '../instance/logger.js';
1
+ import { logger } from '../observability/logger.js';
2
2
  /**
3
3
  * Analyzes a collection or global configuration and extracts all relationship fields
4
4
  * with their storage metadata for proper query building.
@@ -51,7 +51,7 @@ export function getRelationshipFields(config, collectionSlug) {
51
51
  const validation = validateRelationshipMetadata(relationships);
52
52
  if (!validation.valid) {
53
53
  for (const error of validation.errors) {
54
- defaultLogger.warn(`[RelationshipAnalyzer] ${error}`);
54
+ logger.warn(`[RelationshipAnalyzer] ${error}`);
55
55
  }
56
56
  }
57
57
  return relationships;
@@ -1 +1 @@
1
- {"version":3,"file":"object-storage.d.ts","sourceRoot":"","sources":["../../src/storage/object-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,eAAe,CAAC;IACvC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAiGjE"}
1
+ {"version":3,"file":"object-storage.d.ts","sourceRoot":"","sources":["../../src/storage/object-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,eAAe,CAAC;IACvC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAuGjE"}
@@ -17,7 +17,7 @@
17
17
  * WARNING: This module is server-only.
18
18
  * Do NOT import in client-side code or edge runtime.
19
19
  */
20
- import { defaultLogger } from '../instance/logger.js';
20
+ import { logger } from '../observability/logger.js';
21
21
  export function objectStorage(config) {
22
22
  const prefix = config.prefix || 'uploads';
23
23
  // Memoize the provider so the underlying client (S3 / Blob) is constructed
@@ -71,7 +71,7 @@ export function objectStorage(config) {
71
71
  };
72
72
  }
73
73
  catch (error) {
74
- defaultLogger.error('Object storage upload error:', error);
74
+ logger.error('Object storage upload error', error instanceof Error ? error : new Error(String(error)));
75
75
  throw error;
76
76
  }
77
77
  },
@@ -86,7 +86,7 @@ export function objectStorage(config) {
86
86
  await getProvider().del(keyOrUrl);
87
87
  }
88
88
  catch (error) {
89
- defaultLogger.error('Object storage delete error:', error);
89
+ logger.error('Object storage delete error', error instanceof Error ? error : new Error(String(error)));
90
90
  throw error;
91
91
  }
92
92
  },
@@ -14,14 +14,26 @@ export declare class ApplicationError extends Error {
14
14
  constructor(message: string, code: string, statusCode?: number, context?: Record<string, unknown> | undefined);
15
15
  }
16
16
  /**
17
- * Validation Error
18
- * Use for input validation failures, schema validation failures
17
+ * Validation Error (canonical domain / API / field-ingress class)
18
+ *
19
+ * Single source for server-side validation failures. Carries HTTP 400 via
20
+ * `status` / `statusCode` so REST and middleware treat field-ingress and
21
+ * API validation the same. Distinct from `ClientValidationError` in the
22
+ * React error-boundary module (client form field map).
23
+ *
24
+ * Always branch with `instanceof ValidationError` — never `name ===
25
+ * 'ValidationError'`, which false-positives against other classes that
26
+ * historically shared the same name.
19
27
  */
20
28
  export declare class ValidationError extends Error {
21
29
  field: string;
22
- value: unknown;
30
+ value?: unknown | undefined;
23
31
  context?: Record<string, unknown> | undefined;
24
- constructor(message: string, field: string, value: unknown, context?: Record<string, unknown> | undefined);
32
+ /** HTTP status for transports that read `error.status` (e.g. rest.ts). */
33
+ readonly status = 400;
34
+ /** Alias for handlers that read `statusCode`. */
35
+ readonly statusCode = 400;
36
+ constructor(message: string, field: string, value?: unknown | undefined, context?: Record<string, unknown> | undefined);
25
37
  }
26
38
  /**
27
39
  * Database Error
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -22,13 +22,25 @@ export class ApplicationError extends Error {
22
22
  }
23
23
  }
24
24
  /**
25
- * Validation Error
26
- * Use for input validation failures, schema validation failures
25
+ * Validation Error (canonical domain / API / field-ingress class)
26
+ *
27
+ * Single source for server-side validation failures. Carries HTTP 400 via
28
+ * `status` / `statusCode` so REST and middleware treat field-ingress and
29
+ * API validation the same. Distinct from `ClientValidationError` in the
30
+ * React error-boundary module (client form field map).
31
+ *
32
+ * Always branch with `instanceof ValidationError` — never `name ===
33
+ * 'ValidationError'`, which false-positives against other classes that
34
+ * historically shared the same name.
27
35
  */
28
36
  export class ValidationError extends Error {
29
37
  field;
30
38
  value;
31
39
  context;
40
+ /** HTTP status for transports that read `error.status` (e.g. rest.ts). */
41
+ status = 400;
42
+ /** Alias for handlers that read `statusCode`. */
43
+ statusCode = 400;
32
44
  constructor(message, field, value, context) {
33
45
  super(message);
34
46
  this.field = field;
@@ -1 +1 @@
1
- {"version":3,"file":"json-parsing.d.ts","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAetD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CA2DhB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASjE"}
1
+ {"version":3,"file":"json-parsing.d.ts","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAetD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CA6DhB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASjE"}
@@ -4,7 +4,7 @@
4
4
  * Utilities for serializing and deserializing JSON fields in database operations.
5
5
  * Handles the _json column pattern used for storing complex field types.
6
6
  */
7
- import { defaultLogger } from '../instance/logger.js';
7
+ import { logger } from '../observability/logger.js';
8
8
  /**
9
9
  * Parse a JSON field value safely
10
10
  *
@@ -67,7 +67,9 @@ export function deserializeJsonFields(doc, tableName) {
67
67
  }
68
68
  catch (error) {
69
69
  // Invalid JSON - log for debugging but continue
70
- defaultLogger.warn(`Failed to parse _json in ${tableName || 'unknown'}:`, error);
70
+ logger.warn(`Failed to parse _json in ${tableName || 'unknown'}`, {
71
+ error: error instanceof Error ? { message: error.message, name: error.name } : error,
72
+ });
71
73
  }
72
74
  }
73
75
  // Remove _json from result (internal column)
@@ -1,32 +1,11 @@
1
1
  /**
2
- * Client-Safe Logger
2
+ * Client-safe logger entry (ADR-008 D4)
3
3
  *
4
- * Production-safe logging utility that works in both client and server contexts.
5
- * Does not depend on Node.js APIs (no async_hooks, no crypto).
6
- * Info/warn messages are no-ops in production to avoid console pollution.
4
+ * Re-exports `@revealui/utils/logger` (no Node async_hooks). Prefer
5
+ * `@revealui/core/observability/logger` for packages that already depend on core.
7
6
  *
8
- * NOTE: No 'use client' directive here. This is a plain utility module, not a
9
- * React component. Adding 'use client' causes Next.js to create a reference
10
- * proxy when imported from server code (API routes), stripping all methods.
7
+ * Package export: `@revealui/core/utils/logger/client`
11
8
  */
12
- export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
13
- export interface LogContext {
14
- [key: string]: unknown;
15
- }
16
- export interface Logger {
17
- debug(message: string, context?: LogContext): void;
18
- info(message: string, context?: LogContext): void;
19
- warn(message: string, context?: LogContext): void;
20
- error(message: string, context?: LogContext): void;
21
- }
22
- /**
23
- * Create a client-safe logger instance
24
- *
25
- * @returns Logger instance safe for client-side use
26
- */
27
- export declare function createLogger(): Logger;
28
- /**
29
- * Default client-safe logger instance
30
- */
31
- export declare const logger: Logger;
9
+ export type { LogContext, LogEntry, LoggerConfig, LogLevel, } from '@revealui/utils/logger';
10
+ export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';
32
11
  //# sourceMappingURL=logger-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger-client.d.ts","sourceRoot":"","sources":["../../src/utils/logger-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAClD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACpD;AAyCD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAiB,CAAC"}
1
+ {"version":3,"file":"logger-client.d.ts","sourceRoot":"","sources":["../../src/utils/logger-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,MAAM,wBAAwB,CAAC"}
@@ -1,55 +1,9 @@
1
1
  /**
2
- * Client-Safe Logger
2
+ * Client-safe logger entry (ADR-008 D4)
3
3
  *
4
- * Production-safe logging utility that works in both client and server contexts.
5
- * Does not depend on Node.js APIs (no async_hooks, no crypto).
6
- * Info/warn messages are no-ops in production to avoid console pollution.
4
+ * Re-exports `@revealui/utils/logger` (no Node async_hooks). Prefer
5
+ * `@revealui/core/observability/logger` for packages that already depend on core.
7
6
  *
8
- * NOTE: No 'use client' directive here. This is a plain utility module, not a
9
- * React component. Adding 'use client' causes Next.js to create a reference
10
- * proxy when imported from server code (API routes), stripping all methods.
7
+ * Package export: `@revealui/core/utils/logger/client`
11
8
  */
12
- /**
13
- * Client-safe logger implementation
14
- * Simple console-based logging without Node.js dependencies
15
- */
16
- class ClientLogger {
17
- formatMessage(level, message, context) {
18
- const timestamp = new Date().toISOString();
19
- const prefix = `[${timestamp}] [RevealUI] [${level.toUpperCase()}]`;
20
- if (context && Object.keys(context).length > 0) {
21
- return `${prefix} ${message} ${JSON.stringify(context)}`;
22
- }
23
- return `${prefix} ${message}`;
24
- }
25
- debug(message, context) {
26
- if (process.env.NODE_ENV !== 'production') {
27
- console.debug(this.formatMessage('debug', message, context));
28
- }
29
- }
30
- info(message, context) {
31
- if (process.env.NODE_ENV !== 'production') {
32
- console.info(this.formatMessage('info', message, context));
33
- }
34
- }
35
- warn(message, context) {
36
- if (process.env.NODE_ENV !== 'production') {
37
- console.warn(this.formatMessage('warn', message, context));
38
- }
39
- }
40
- error(message, context) {
41
- console.error(this.formatMessage('error', message, context));
42
- }
43
- }
44
- /**
45
- * Create a client-safe logger instance
46
- *
47
- * @returns Logger instance safe for client-side use
48
- */
49
- export function createLogger() {
50
- return new ClientLogger();
51
- }
52
- /**
53
- * Default client-safe logger instance
54
- */
55
- export const logger = createLogger();
9
+ export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';
@@ -1,32 +1,28 @@
1
1
  /**
2
- * Server Logger Utility
2
+ * Server logger with request-id enrichment (ADR-008 D3/D4)
3
3
  *
4
- * Server-side logging utility for RevealUI framework.
5
- * Supports different log levels and structured output.
6
- * Automatically includes request ID from request context when available.
4
+ * Thin facade over `@revealui/utils/logger` that injects `requestId` from
5
+ * AsyncLocalStorage (`request-context`) on every log call. Not a second
6
+ * logger implementation.
7
7
  *
8
- * WARNING: This module uses Node.js APIs (async_hooks via request-context).
9
- * For client-safe logging, use './logger-client.js' instead.
8
+ * WARNING: Uses Node.js APIs (async_hooks via request-context). Do not import
9
+ * from browser / RSC client graphs. Client code: `@revealui/core/utils/logger`
10
+ * or `@revealui/core/observability/logger`.
11
+ *
12
+ * Package export: `@revealui/core/utils/logger/server`
13
+ * Also re-exported from `@revealui/core/server`.
10
14
  */
11
- export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
12
- export interface LogContext {
13
- [key: string]: unknown;
14
- }
15
- export interface Logger {
16
- debug(message: string, context?: LogContext): void;
17
- info(message: string, context?: LogContext): void;
18
- warn(message: string, context?: LogContext): void;
19
- error(message: string, context?: LogContext): void;
20
- }
15
+ import { type LogContext, type LogLevel, type Logger as UtilsLogger } from '@revealui/utils/logger';
16
+ export type { LogContext, LogLevel };
17
+ export type Logger = Pick<UtilsLogger, 'debug' | 'info' | 'warn' | 'error'>;
21
18
  /**
22
- * Create a logger instance
19
+ * Create a server logger that enriches context with the active request ID.
23
20
  *
24
- * @param minLevel - Minimum log level to output (default: 'info')
25
- * @returns Logger instance
21
+ * @param minLevel - Optional minimum level (maps to utils `level` config)
26
22
  */
27
23
  export declare function createLogger(minLevel?: LogLevel): Logger;
28
24
  /**
29
- * Default logger instance
25
+ * Default server logger (request-id enriching).
30
26
  */
31
27
  export declare const logger: Logger;
32
28
  //# sourceMappingURL=logger-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger-server.d.ts","sourceRoot":"","sources":["../../src/utils/logger-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAClD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACpD;AAsDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAKxD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAiB,CAAC"}
1
+ {"version":3,"file":"logger-server.d.ts","sourceRoot":"","sources":["../../src/utils/logger-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,MAAM,IAAI,WAAW,EAE3B,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACrC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AA2B5E;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAMxD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAA8D,CAAC"}
@@ -1,68 +1,55 @@
1
1
  /**
2
- * Server Logger Utility
2
+ * Server logger with request-id enrichment (ADR-008 D3/D4)
3
3
  *
4
- * Server-side logging utility for RevealUI framework.
5
- * Supports different log levels and structured output.
6
- * Automatically includes request ID from request context when available.
4
+ * Thin facade over `@revealui/utils/logger` that injects `requestId` from
5
+ * AsyncLocalStorage (`request-context`) on every log call. Not a second
6
+ * logger implementation.
7
7
  *
8
- * WARNING: This module uses Node.js APIs (async_hooks via request-context).
9
- * For client-safe logging, use './logger-client.js' instead.
8
+ * WARNING: Uses Node.js APIs (async_hooks via request-context). Do not import
9
+ * from browser / RSC client graphs. Client code: `@revealui/core/utils/logger`
10
+ * or `@revealui/core/observability/logger`.
11
+ *
12
+ * Package export: `@revealui/core/utils/logger/server`
13
+ * Also re-exported from `@revealui/core/server`.
10
14
  */
15
+ import { createLogger as createUtilsLogger, Logger as UtilsLoggerClass, } from '@revealui/utils/logger';
11
16
  import { getRequestId } from './request-context.js';
12
- class ConsoleLogger {
13
- minLevel;
14
- constructor(minLevel = 'info') {
15
- this.minLevel = minLevel;
16
- }
17
- shouldLog(level) {
18
- const levels = ['debug', 'info', 'warn', 'error'];
19
- return levels.indexOf(level) >= levels.indexOf(this.minLevel);
20
- }
21
- formatMessage(level, message, context) {
22
- const timestamp = new Date().toISOString();
23
- const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
24
- // Automatically include request ID if available
25
- const requestId = getRequestId();
26
- const enrichedContext = requestId ? { requestId, ...context } : context;
27
- if (enrichedContext && Object.keys(enrichedContext).length > 0) {
28
- return `${prefix} ${message} ${JSON.stringify(enrichedContext)}`;
29
- }
30
- return `${prefix} ${message}`;
31
- }
32
- debug(message, context) {
33
- if (process.env.NODE_ENV !== 'production') {
34
- console.debug(this.formatMessage('debug', message, context));
35
- }
36
- }
37
- info(message, context) {
38
- if (process.env.NODE_ENV !== 'production') {
39
- console.info(this.formatMessage('info', message, context));
40
- }
41
- }
42
- warn(message, context) {
43
- if (process.env.NODE_ENV !== 'production') {
44
- console.warn(this.formatMessage('warn', message, context));
45
- }
46
- }
47
- error(message, context) {
48
- if (this.shouldLog('error')) {
49
- console.error(this.formatMessage('error', message, context));
50
- }
17
+ function withRequestId(context) {
18
+ const requestId = getRequestId();
19
+ if (!requestId) {
20
+ return context;
51
21
  }
22
+ return { requestId, ...context };
23
+ }
24
+ function wrap(backend) {
25
+ return {
26
+ debug(message, context) {
27
+ backend.debug(message, withRequestId(context));
28
+ },
29
+ info(message, context) {
30
+ backend.info(message, withRequestId(context));
31
+ },
32
+ warn(message, context) {
33
+ backend.warn(message, withRequestId(context));
34
+ },
35
+ error(message, context) {
36
+ backend.error(message, withRequestId(context));
37
+ },
38
+ };
52
39
  }
53
40
  /**
54
- * Create a logger instance
41
+ * Create a server logger that enriches context with the active request ID.
55
42
  *
56
- * @param minLevel - Minimum log level to output (default: 'info')
57
- * @returns Logger instance
43
+ * @param minLevel - Optional minimum level (maps to utils `level` config)
58
44
  */
59
45
  export function createLogger(minLevel) {
60
- // In production, can be extended to use structured logging services
61
- // For now, use console-based logger
62
46
  const level = minLevel || process.env.LOG_LEVEL || 'info';
63
- return new ConsoleLogger(level);
47
+ const backend = new UtilsLoggerClass({
48
+ level,
49
+ }).child({ component: 'core-server' });
50
+ return wrap(backend);
64
51
  }
65
52
  /**
66
- * Default logger instance
53
+ * Default server logger (request-id enriching).
67
54
  */
68
- export const logger = createLogger();
55
+ export const logger = wrap(createUtilsLogger({ component: 'core-server' }));
@@ -1,14 +1,12 @@
1
1
  /**
2
- * Logger Utility - Default Export
2
+ * Logger barrel (client-safe) ADR-008 D4
3
3
  *
4
- * Re-exports the client-safe logger implementation.
5
- * This ensures that default imports get the client-safe version
6
- * without Node.js dependencies (no async_hooks, no crypto).
4
+ * Re-exports `@revealui/utils/logger`. Prefer
5
+ * `@revealui/core/observability/logger` for new core-dependent code.
7
6
  *
8
- * For server-side logging with request context:
9
- * import { logger } from '@revealui/core/server'
10
- * import { logger } from '@revealui/core/utils/logger/server'
7
+ * Server + request-id: `@revealui/core/server` or
8
+ * `@revealui/core/utils/logger/server`.
11
9
  */
12
- export type { LogContext, Logger, LogLevel } from './logger-client.js';
13
- export { createLogger, logger } from './logger-client.js';
10
+ export type { LogContext, LogEntry, LoggerConfig, LogLevel, } from '@revealui/utils/logger';
11
+ export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';
14
12
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,MAAM,wBAAwB,CAAC"}
@@ -1,12 +1,10 @@
1
1
  /**
2
- * Logger Utility - Default Export
2
+ * Logger barrel (client-safe) ADR-008 D4
3
3
  *
4
- * Re-exports the client-safe logger implementation.
5
- * This ensures that default imports get the client-safe version
6
- * without Node.js dependencies (no async_hooks, no crypto).
4
+ * Re-exports `@revealui/utils/logger`. Prefer
5
+ * `@revealui/core/observability/logger` for new core-dependent code.
7
6
  *
8
- * For server-side logging with request context:
9
- * import { logger } from '@revealui/core/server'
10
- * import { logger } from '@revealui/core/utils/logger/server'
7
+ * Server + request-id: `@revealui/core/server` or
8
+ * `@revealui/core/utils/logger/server`.
11
9
  */
12
- export { createLogger, logger } from './logger-client.js';
10
+ export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';