@webpieces/core-util 0.3.278 → 0.3.279

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webpieces/core-util",
3
- "version": "0.3.278",
3
+ "version": "0.3.279",
4
4
  "description": "Utility functions for WebPieces - works in browser and Node.js",
5
5
  "type": "commonjs",
6
6
  "main": "./src/index.js",
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/core/core-util/src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @webpieces/core-util\n *\n * Utility functions for WebPieces applications.\n * This package works in both browser and Node.js environments.\n *\n * @packageDocumentation\n */\n\nexport { toError } from './lib/errorUtils';\nexport { Header } from './Header';\nexport { ContextKey } from './ContextKey';\n\n// @DocumentDesign — DI-design-root marker. Applies to ANY project kind (server\n// controllers AND library impl classes), so it lives here (browser + Node) rather\n// than in a server-only routing package.\nexport { DocumentDesign, isDocumentDesign, DESIGN_METADATA_KEYS } from './DocumentDesign';\n\n// Logging (merged from former @webpieces/wp-logging).\n// Pluggable logging interface + a browser-safe console default; apps plug in\n// bunyan/winston/pino/etc. via LogManager.setLogger(...). Browser + Node.\nexport type { Logger, LogLevel } from './logging/Logger';\nexport type { LoggerFactory } from './logging/LoggerFactory';\nexport { ConsoleLogger } from './logging/ConsoleLogger';\nexport { ConsoleLoggerFactory } from './logging/ConsoleLoggerFactory';\nexport { LogManager } from './logging/LogManager';\n\n// HTTP API contract (merged from former @webpieces/http-api).\n// Shared HTTP API definition consumed by both client and server: REST\n// decorators, the HttpError hierarchy, datetime DTOs, platform-header\n// registry/readers, ValidateImplementation, and the test-case recorder\n// contract. Pure definitions — express-free, browser + Node safe.\n\n// API definition decorators\nexport {\n ApiPath,\n Endpoint,\n Authentication,\n AuthenticationConfig,\n // Auth mode decorators (clean service-to-service + user JWT model)\n Public,\n AuthJwt,\n AuthOidc,\n AuthSharedSecret,\n // API kind (RPC vs PubSub/Cloud Tasks) + queue naming\n Rpc,\n PubSub,\n Queue,\n getApiPath,\n getEndpoints,\n isApiPath,\n getAuthMeta,\n getAuthMode,\n assertEveryEndpointHasAuthMode,\n getApiKind,\n assertApiKind,\n assertPubSubConventions,\n getQueueName,\n validateNoConflictingDecorators,\n AuthMeta,\n RouteMetadata,\n METADATA_KEYS,\n} from './http/decorators';\nexport type { AuthMode, ApiKind } from './http/decorators';\n\n// Type validators\nexport { ValidateImplementation } from './http/validators';\n\n// HTTP errors\nexport {\n ProtocolError,\n HttpError,\n HttpNotFoundError,\n EndpointNotFoundError,\n HttpBadRequestError,\n HttpUnauthorizedError,\n HttpForbiddenError,\n HttpTimeoutError,\n HttpBadGatewayError,\n HttpGatewayTimeoutError,\n HttpInternalServerError,\n HttpVendorError,\n HttpUserError,\n // Error subtype constants\n ENTITY_NOT_FOUND,\n WRONG_LOGIN_TYPE,\n WRONG_LOGIN,\n NOT_APPROVED,\n EMAIL_NOT_CONFIRMED,\n WRONG_DOMAIN,\n WRONG_COMPANY,\n NO_REG_CODE,\n} from './http/errors';\n\n// Date/Time DTOs and Utilities (inspired by Java Time / JSR-310)\nexport {\n InstantDto,\n DateDto,\n TimeDto,\n DateTimeDto,\n InstantUtil,\n DateUtil,\n TimeUtil,\n DateTimeUtil,\n} from './http/datetime';\n\n// Platform Headers\nexport { PlatformHeader } from './http/PlatformHeader';\nexport { PlatformHeadersExtension } from './http/PlatformHeadersExtension';\nexport { HeaderRegistry } from './http/HeaderRegistry';\nexport { WebpiecesCoreHeaders } from './http/WebpiecesCoreHeaders';\nexport { HeaderMethods } from './http/HeaderMethods';\nexport { ContextReader } from './http/ContextReader';\nexport { HEADER_TYPES } from './http/HeaderTypes';\n\n// Outbound-header machinery (context reader + registry -> outbound HTTP headers).\n// Browser-safe — the server-side reader (RequestContextReader) and browser store\n// (MutableContextStore) both implement ContextReader, so this lives here rather\n// than in the Node-only @webpieces/core-context (which re-exports for back-compat).\nexport { ContextMgr } from './http/ContextMgr';\nexport { RequestIdChainProcessor } from './http/RequestIdChainProcessor';\n\n// API-call logging helper (uses LogManager above)\nexport { LogApiCall } from './http/LogApiCall';\n\n// Test-case recording contract (impl lives in http-server; hooks in http-client)\nexport { TestCaseRecorder, RecorderKeys } from './http/recorder/TestCaseRecorder';\nexport { RecordedEndpoint, RecordedError, RecordedTestCase } from './http/recorder/RecordedEndpoint';\nexport { DoNotRecord, getDoNotRecordFields } from './http/recorder/DoNotRecord';\nexport { RecordSerializer, SerializedMap, SerializedError } from './http/recorder/RecordSerializer';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/core/core-util/src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @webpieces/core-util\n *\n * Utility functions for WebPieces applications.\n * This package works in both browser and Node.js environments.\n *\n * @packageDocumentation\n */\n\nexport { toError } from './lib/errorUtils';\nexport { Header } from './Header';\nexport { ContextKey } from './ContextKey';\n\n// @DocumentDesign — DI-design-root marker. Applies to ANY project kind (server\n// controllers AND library impl classes), so it lives here (browser + Node) rather\n// than in a server-only routing package.\nexport { DocumentDesign, isDocumentDesign, DESIGN_METADATA_KEYS } from './DocumentDesign';\n\n// Logging (merged from former @webpieces/wp-logging).\n// Pluggable logging interface + a browser-safe console default; apps plug in\n// bunyan/winston/pino/etc. via LogManager.setFactory(...). Browser + Node.\nexport type { Logger, LogLevel } from './logging/Logger';\nexport type { LoggerFactory } from './logging/LoggerFactory';\nexport { ConsoleLogger } from './logging/ConsoleLogger';\nexport { ConsoleLoggerFactory } from './logging/ConsoleLoggerFactory';\nexport { LogManager } from './logging/LogManager';\n\n// HTTP API contract (merged from former @webpieces/http-api).\n// Shared HTTP API definition consumed by both client and server: REST\n// decorators, the HttpError hierarchy, datetime DTOs, platform-header\n// registry/readers, ValidateImplementation, and the test-case recorder\n// contract. Pure definitions — express-free, browser + Node safe.\n\n// API definition decorators\nexport {\n ApiPath,\n Endpoint,\n Authentication,\n AuthenticationConfig,\n // Auth mode decorators (clean service-to-service + user JWT model)\n Public,\n AuthJwt,\n AuthOidc,\n AuthSharedSecret,\n // API kind (RPC vs PubSub/Cloud Tasks) + queue naming\n Rpc,\n PubSub,\n Queue,\n getApiPath,\n getEndpoints,\n isApiPath,\n getAuthMeta,\n getAuthMode,\n assertEveryEndpointHasAuthMode,\n getApiKind,\n assertApiKind,\n assertPubSubConventions,\n getQueueName,\n validateNoConflictingDecorators,\n AuthMeta,\n RouteMetadata,\n METADATA_KEYS,\n} from './http/decorators';\nexport type { AuthMode, ApiKind } from './http/decorators';\n\n// Type validators\nexport { ValidateImplementation } from './http/validators';\n\n// HTTP errors\nexport {\n ProtocolError,\n HttpError,\n HttpNotFoundError,\n EndpointNotFoundError,\n HttpBadRequestError,\n HttpUnauthorizedError,\n HttpForbiddenError,\n HttpTimeoutError,\n HttpBadGatewayError,\n HttpGatewayTimeoutError,\n HttpInternalServerError,\n HttpVendorError,\n HttpUserError,\n // Error subtype constants\n ENTITY_NOT_FOUND,\n WRONG_LOGIN_TYPE,\n WRONG_LOGIN,\n NOT_APPROVED,\n EMAIL_NOT_CONFIRMED,\n WRONG_DOMAIN,\n WRONG_COMPANY,\n NO_REG_CODE,\n} from './http/errors';\n\n// Date/Time DTOs and Utilities (inspired by Java Time / JSR-310)\nexport {\n InstantDto,\n DateDto,\n TimeDto,\n DateTimeDto,\n InstantUtil,\n DateUtil,\n TimeUtil,\n DateTimeUtil,\n} from './http/datetime';\n\n// Platform Headers\nexport { PlatformHeader } from './http/PlatformHeader';\nexport { PlatformHeadersExtension } from './http/PlatformHeadersExtension';\nexport { HeaderRegistry } from './http/HeaderRegistry';\nexport { WebpiecesCoreHeaders } from './http/WebpiecesCoreHeaders';\nexport { HeaderMethods } from './http/HeaderMethods';\nexport { ContextReader } from './http/ContextReader';\nexport { HEADER_TYPES } from './http/HeaderTypes';\n\n// Outbound-header machinery (context reader + registry -> outbound HTTP headers).\n// Browser-safe — the server-side reader (RequestContextReader) and browser store\n// (MutableContextStore) both implement ContextReader, so this lives here rather\n// than in the Node-only @webpieces/core-context (which re-exports for back-compat).\nexport { ContextMgr } from './http/ContextMgr';\nexport { RequestIdChainProcessor } from './http/RequestIdChainProcessor';\n\n// API-call logging helper (uses LogManager above)\nexport { LogApiCall } from './http/LogApiCall';\n\n// Test-case recording contract (impl lives in http-server; hooks in http-client)\nexport { TestCaseRecorder, RecorderKeys } from './http/recorder/TestCaseRecorder';\nexport { RecordedEndpoint, RecordedError, RecordedTestCase } from './http/recorder/RecordedEndpoint';\nexport { DoNotRecord, getDoNotRecordFields } from './http/recorder/DoNotRecord';\nexport { RecordSerializer, SerializedMap, SerializedError } from './http/recorder/RecordSerializer';\n"]}
@@ -5,10 +5,10 @@ import { LoggerFactory } from './LoggerFactory';
5
5
  *
6
6
  * Produces (and caches per name) {@link ConsoleLogger}s. This is what
7
7
  * {@link LogManager} uses until an app installs a different backend
8
- * (bunyan/winston/pino/...) via {@link LogManager.setLogger}.
8
+ * (bunyan/winston/pino/...) via {@link LogManager.setFactory}.
9
9
  *
10
10
  * When constructed with `isBootstrap = true` (the framework default before any
11
- * app calls `setLogger`), every line is prefixed with an AWAITING banner so it's
11
+ * app calls `setFactory`), every line is prefixed with an AWAITING banner so it's
12
12
  * obvious no real backend was wired. An app that genuinely wants console logging
13
13
  * installs `new ConsoleLoggerFactory()` (isBootstrap defaults to false → no banner).
14
14
  */
@@ -7,10 +7,10 @@ const ConsoleLogger_1 = require("./ConsoleLogger");
7
7
  *
8
8
  * Produces (and caches per name) {@link ConsoleLogger}s. This is what
9
9
  * {@link LogManager} uses until an app installs a different backend
10
- * (bunyan/winston/pino/...) via {@link LogManager.setLogger}.
10
+ * (bunyan/winston/pino/...) via {@link LogManager.setFactory}.
11
11
  *
12
12
  * When constructed with `isBootstrap = true` (the framework default before any
13
- * app calls `setLogger`), every line is prefixed with an AWAITING banner so it's
13
+ * app calls `setFactory`), every line is prefixed with an AWAITING banner so it's
14
14
  * obvious no real backend was wired. An app that genuinely wants console logging
15
15
  * installs `new ConsoleLoggerFactory()` (isBootstrap defaults to false → no banner).
16
16
  */
@@ -19,7 +19,7 @@ class ConsoleLoggerFactory {
19
19
  bootstrapPrefix;
20
20
  constructor(isBootstrap = false) {
21
21
  this.bootstrapPrefix = isBootstrap
22
- ? '[AWAITING LogManager.setLogger(...) — see .webpieces/instruct-ai/webpieces.logging.md] '
22
+ ? '[AWAITING LogManager.setFactory(...) — see .webpieces/instruct-ai/webpieces.logging.md] '
23
23
  : '';
24
24
  }
25
25
  getLogger(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleLoggerFactory.js","sourceRoot":"","sources":["../../../../../../packages/core/core-util/src/logging/ConsoleLoggerFactory.ts"],"names":[],"mappings":";;;AAEA,mDAAgD;AAEhD;;;;;;;;;;;GAWG;AACH,MAAa,oBAAoB;IACZ,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,eAAe,CAAS;IAEzC,YAAY,WAAW,GAAG,KAAK;QAC3B,IAAI,CAAC,eAAe,GAAG,WAAW;YAC9B,CAAC,CAAC,yFAAyF;YAC3F,CAAC,CAAC,EAAE,CAAC;IACb,CAAC;IAED,SAAS,CAAC,IAAY;QAClB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,GAAG,IAAI,6BAAa,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAlBD,oDAkBC","sourcesContent":["import { Logger } from './Logger';\nimport { LoggerFactory } from './LoggerFactory';\nimport { ConsoleLogger } from './ConsoleLogger';\n\n/**\n * ConsoleLoggerFactory - the default {@link LoggerFactory}, browser-safe.\n *\n * Produces (and caches per name) {@link ConsoleLogger}s. This is what\n * {@link LogManager} uses until an app installs a different backend\n * (bunyan/winston/pino/...) via {@link LogManager.setLogger}.\n *\n * When constructed with `isBootstrap = true` (the framework default before any\n * app calls `setLogger`), every line is prefixed with an AWAITING banner so it's\n * obvious no real backend was wired. An app that genuinely wants console logging\n * installs `new ConsoleLoggerFactory()` (isBootstrap defaults to false → no banner).\n */\nexport class ConsoleLoggerFactory implements LoggerFactory {\n private readonly loggers = new Map<string, Logger>();\n private readonly bootstrapPrefix: string;\n\n constructor(isBootstrap = false) {\n this.bootstrapPrefix = isBootstrap\n ? '[AWAITING LogManager.setLogger(...) — see .webpieces/instruct-ai/webpieces.logging.md] '\n : '';\n }\n\n getLogger(name: string): Logger {\n let logger = this.loggers.get(name);\n if (!logger) {\n logger = new ConsoleLogger(name, this.bootstrapPrefix);\n this.loggers.set(name, logger);\n }\n return logger;\n }\n}\n"]}
1
+ {"version":3,"file":"ConsoleLoggerFactory.js","sourceRoot":"","sources":["../../../../../../packages/core/core-util/src/logging/ConsoleLoggerFactory.ts"],"names":[],"mappings":";;;AAEA,mDAAgD;AAEhD;;;;;;;;;;;GAWG;AACH,MAAa,oBAAoB;IACZ,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,eAAe,CAAS;IAEzC,YAAY,WAAW,GAAG,KAAK;QAC3B,IAAI,CAAC,eAAe,GAAG,WAAW;YAC9B,CAAC,CAAC,0FAA0F;YAC5F,CAAC,CAAC,EAAE,CAAC;IACb,CAAC;IAED,SAAS,CAAC,IAAY;QAClB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,GAAG,IAAI,6BAAa,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAlBD,oDAkBC","sourcesContent":["import { Logger } from './Logger';\nimport { LoggerFactory } from './LoggerFactory';\nimport { ConsoleLogger } from './ConsoleLogger';\n\n/**\n * ConsoleLoggerFactory - the default {@link LoggerFactory}, browser-safe.\n *\n * Produces (and caches per name) {@link ConsoleLogger}s. This is what\n * {@link LogManager} uses until an app installs a different backend\n * (bunyan/winston/pino/...) via {@link LogManager.setFactory}.\n *\n * When constructed with `isBootstrap = true` (the framework default before any\n * app calls `setFactory`), every line is prefixed with an AWAITING banner so it's\n * obvious no real backend was wired. An app that genuinely wants console logging\n * installs `new ConsoleLoggerFactory()` (isBootstrap defaults to false → no banner).\n */\nexport class ConsoleLoggerFactory implements LoggerFactory {\n private readonly loggers = new Map<string, Logger>();\n private readonly bootstrapPrefix: string;\n\n constructor(isBootstrap = false) {\n this.bootstrapPrefix = isBootstrap\n ? '[AWAITING LogManager.setFactory(...) — see .webpieces/instruct-ai/webpieces.logging.md] '\n : '';\n }\n\n getLogger(name: string): Logger {\n let logger = this.loggers.get(name);\n if (!logger) {\n logger = new ConsoleLogger(name, this.bootstrapPrefix);\n this.loggers.set(name, logger);\n }\n return logger;\n }\n}\n"]}
@@ -15,11 +15,11 @@ import { LoggerFactory } from './LoggerFactory';
15
15
  * startup by installing a {@link LoggerFactory}:
16
16
  *
17
17
  * ```ts
18
- * LogManager.setLogger(new BunyanLoggerFactory(...)); // node-only app
18
+ * LogManager.setFactory(new BunyanLoggerFactory(...)); // node-only app
19
19
  * ```
20
20
  *
21
21
  * Until one is installed, logging goes to a bootstrap {@link ConsoleLoggerFactory}
22
- * that prefixes every line with an AWAITING banner (so a forgotten `setLogger` is
22
+ * that prefixes every line with an AWAITING banner (so a forgotten `setFactory` is
23
23
  * obvious). See `.webpieces/instruct-ai/webpieces.logging.md`.
24
24
  */
25
25
  export declare class LogManager {
@@ -30,7 +30,7 @@ export declare class LogManager {
30
30
  * already handed out via {@link getLogger} switch to it immediately (they are
31
31
  * deferred facades), so import-time loggers are covered too.
32
32
  */
33
- static setLogger(factory: LoggerFactory): void;
33
+ static setFactory(factory: LoggerFactory): void;
34
34
  /** Get a named logger (a stable deferred facade over the current backend). */
35
35
  static getLogger(name: string): Logger;
36
36
  /** The currently installed factory (mainly for tests / diagnostics). */
@@ -6,7 +6,7 @@ const ConsoleLoggerFactory_1 = require("./ConsoleLoggerFactory");
6
6
  * A stable per-name facade that re-resolves the currently installed factory on
7
7
  * EVERY call. This is why a module-scope `const log = LogManager.getLogger('X')`
8
8
  * captured at import time (before the app runs) still starts using the real
9
- * backend the instant `LogManager.setLogger(...)` installs it — and the bootstrap
9
+ * backend the instant `LogManager.setFactory(...)` installs it — and the bootstrap
10
10
  * AWAITING banner disappears. Backends cache their concrete logger per name, so
11
11
  * this indirection is a cheap Map lookup.
12
12
  */
@@ -46,11 +46,11 @@ class DeferredLogger {
46
46
  * startup by installing a {@link LoggerFactory}:
47
47
  *
48
48
  * ```ts
49
- * LogManager.setLogger(new BunyanLoggerFactory(...)); // node-only app
49
+ * LogManager.setFactory(new BunyanLoggerFactory(...)); // node-only app
50
50
  * ```
51
51
  *
52
52
  * Until one is installed, logging goes to a bootstrap {@link ConsoleLoggerFactory}
53
- * that prefixes every line with an AWAITING banner (so a forgotten `setLogger` is
53
+ * that prefixes every line with an AWAITING banner (so a forgotten `setFactory` is
54
54
  * obvious). See `.webpieces/instruct-ai/webpieces.logging.md`.
55
55
  */
56
56
  class LogManager {
@@ -61,7 +61,7 @@ class LogManager {
61
61
  * already handed out via {@link getLogger} switch to it immediately (they are
62
62
  * deferred facades), so import-time loggers are covered too.
63
63
  */
64
- static setLogger(factory) {
64
+ static setFactory(factory) {
65
65
  LogManager.factory = factory;
66
66
  }
67
67
  /** Get a named logger (a stable deferred facade over the current backend). */
@@ -1 +1 @@
1
- {"version":3,"file":"LogManager.js","sourceRoot":"","sources":["../../../../../../packages/core/core-util/src/logging/LogManager.ts"],"names":[],"mappings":";;;AAEA,iEAA8D;AAE9D;;;;;;;GAOG;AACH,MAAM,cAAc;IACa;IAA7B,YAA6B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE7C,KAAK,CAAC,OAAe,EAAE,GAAW;QAC9B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAW;QAC9B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAW;QAC7B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAW;QAC7B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAW;QAC9B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAa,UAAU;IACX,MAAM,CAAC,OAAO,GAAkB,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAU,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7D;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,OAAsB;QACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,8EAA8E;IAC9E,MAAM,CAAC,SAAS,CAAC,IAAY;QACzB,IAAI,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;YAClC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,UAAU;QACb,OAAO,UAAU,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,cAAc,CAAC,IAAY;QAC9B,OAAO,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;;AA/BL,gCAgCC","sourcesContent":["import { Logger } from './Logger';\nimport { LoggerFactory } from './LoggerFactory';\nimport { ConsoleLoggerFactory } from './ConsoleLoggerFactory';\n\n/**\n * A stable per-name facade that re-resolves the currently installed factory on\n * EVERY call. This is why a module-scope `const log = LogManager.getLogger('X')`\n * captured at import time (before the app runs) still starts using the real\n * backend the instant `LogManager.setLogger(...)` installs it — and the bootstrap\n * AWAITING banner disappears. Backends cache their concrete logger per name, so\n * this indirection is a cheap Map lookup.\n */\nclass DeferredLogger implements Logger {\n constructor(private readonly name: string) {}\n\n trace(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).trace(message, err);\n }\n\n debug(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).debug(message, err);\n }\n\n info(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).info(message, err);\n }\n\n warn(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).warn(message, err);\n }\n\n error(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).error(message, err);\n }\n}\n\n/**\n * LogManager - the global, slf4j-style entry point for logging.\n *\n * Every call site in the codebase does:\n *\n * ```ts\n * const log = LogManager.getLogger('MyClass');\n * log.info('did the thing');\n * log.error('it failed', err); // err?: Error — the ONLY extra arg\n * ```\n *\n * and never knows which backend is behind it. Apps choose their backend ONCE at\n * startup by installing a {@link LoggerFactory}:\n *\n * ```ts\n * LogManager.setLogger(new BunyanLoggerFactory(...)); // node-only app\n * ```\n *\n * Until one is installed, logging goes to a bootstrap {@link ConsoleLoggerFactory}\n * that prefixes every line with an AWAITING banner (so a forgotten `setLogger` is\n * obvious). See `.webpieces/instruct-ai/webpieces.logging.md`.\n */\nexport class LogManager {\n private static factory: LoggerFactory = new ConsoleLoggerFactory(true);\n private static readonly deferred = new Map<string, Logger>();\n\n /**\n * Install the process-wide logging backend. Call once at app startup. Loggers\n * already handed out via {@link getLogger} switch to it immediately (they are\n * deferred facades), so import-time loggers are covered too.\n */\n static setLogger(factory: LoggerFactory): void {\n LogManager.factory = factory;\n }\n\n /** Get a named logger (a stable deferred facade over the current backend). */\n static getLogger(name: string): Logger {\n let logger = LogManager.deferred.get(name);\n if (!logger) {\n logger = new DeferredLogger(name);\n LogManager.deferred.set(name, logger);\n }\n return logger;\n }\n\n /** The currently installed factory (mainly for tests / diagnostics). */\n static getFactory(): LoggerFactory {\n return LogManager.factory;\n }\n\n /** Internal: resolve the concrete backend logger for a name (used by DeferredLogger). */\n static resolveBackend(name: string): Logger {\n return LogManager.factory.getLogger(name);\n }\n}\n"]}
1
+ {"version":3,"file":"LogManager.js","sourceRoot":"","sources":["../../../../../../packages/core/core-util/src/logging/LogManager.ts"],"names":[],"mappings":";;;AAEA,iEAA8D;AAE9D;;;;;;;GAOG;AACH,MAAM,cAAc;IACa;IAA7B,YAA6B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE7C,KAAK,CAAC,OAAe,EAAE,GAAW;QAC9B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAW;QAC9B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAW;QAC7B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAW;QAC7B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAW;QAC9B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAa,UAAU;IACX,MAAM,CAAC,OAAO,GAAkB,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAU,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7D;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,OAAsB;QACpC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,8EAA8E;IAC9E,MAAM,CAAC,SAAS,CAAC,IAAY;QACzB,IAAI,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;YAClC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,UAAU;QACb,OAAO,UAAU,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,cAAc,CAAC,IAAY;QAC9B,OAAO,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;;AA/BL,gCAgCC","sourcesContent":["import { Logger } from './Logger';\nimport { LoggerFactory } from './LoggerFactory';\nimport { ConsoleLoggerFactory } from './ConsoleLoggerFactory';\n\n/**\n * A stable per-name facade that re-resolves the currently installed factory on\n * EVERY call. This is why a module-scope `const log = LogManager.getLogger('X')`\n * captured at import time (before the app runs) still starts using the real\n * backend the instant `LogManager.setFactory(...)` installs it — and the bootstrap\n * AWAITING banner disappears. Backends cache their concrete logger per name, so\n * this indirection is a cheap Map lookup.\n */\nclass DeferredLogger implements Logger {\n constructor(private readonly name: string) {}\n\n trace(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).trace(message, err);\n }\n\n debug(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).debug(message, err);\n }\n\n info(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).info(message, err);\n }\n\n warn(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).warn(message, err);\n }\n\n error(message: string, err?: Error): void {\n LogManager.resolveBackend(this.name).error(message, err);\n }\n}\n\n/**\n * LogManager - the global, slf4j-style entry point for logging.\n *\n * Every call site in the codebase does:\n *\n * ```ts\n * const log = LogManager.getLogger('MyClass');\n * log.info('did the thing');\n * log.error('it failed', err); // err?: Error — the ONLY extra arg\n * ```\n *\n * and never knows which backend is behind it. Apps choose their backend ONCE at\n * startup by installing a {@link LoggerFactory}:\n *\n * ```ts\n * LogManager.setFactory(new BunyanLoggerFactory(...)); // node-only app\n * ```\n *\n * Until one is installed, logging goes to a bootstrap {@link ConsoleLoggerFactory}\n * that prefixes every line with an AWAITING banner (so a forgotten `setFactory` is\n * obvious). See `.webpieces/instruct-ai/webpieces.logging.md`.\n */\nexport class LogManager {\n private static factory: LoggerFactory = new ConsoleLoggerFactory(true);\n private static readonly deferred = new Map<string, Logger>();\n\n /**\n * Install the process-wide logging backend. Call once at app startup. Loggers\n * already handed out via {@link getLogger} switch to it immediately (they are\n * deferred facades), so import-time loggers are covered too.\n */\n static setFactory(factory: LoggerFactory): void {\n LogManager.factory = factory;\n }\n\n /** Get a named logger (a stable deferred facade over the current backend). */\n static getLogger(name: string): Logger {\n let logger = LogManager.deferred.get(name);\n if (!logger) {\n logger = new DeferredLogger(name);\n LogManager.deferred.set(name, logger);\n }\n return logger;\n }\n\n /** The currently installed factory (mainly for tests / diagnostics). */\n static getFactory(): LoggerFactory {\n return LogManager.factory;\n }\n\n /** Internal: resolve the concrete backend logger for a name (used by DeferredLogger). */\n static resolveBackend(name: string): Logger {\n return LogManager.factory.getLogger(name);\n }\n}\n"]}
@@ -4,7 +4,7 @@ import { Logger } from './Logger';
4
4
  *
5
5
  * BUSINESS-LOGIC interface (a method with behavior). An app selects its logging
6
6
  * backend by installing one implementation of this factory globally via
7
- * {@link LogManager.setLogger}. Everything else in the codebase asks
7
+ * {@link LogManager.setFactory}. Everything else in the codebase asks
8
8
  * {@link LogManager.getLogger} for a named logger and never knows which backend
9
9
  * is behind it.
10
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"LoggerFactory.js","sourceRoot":"","sources":["../../../../../../packages/core/core-util/src/logging/LoggerFactory.ts"],"names":[],"mappings":"","sourcesContent":["import { Logger } from './Logger';\n\n/**\n * LoggerFactory - the pluggable seam that produces named {@link Logger}s.\n *\n * BUSINESS-LOGIC interface (a method with behavior). An app selects its logging\n * backend by installing one implementation of this factory globally via\n * {@link LogManager.setLogger}. Everything else in the codebase asks\n * {@link LogManager.getLogger} for a named logger and never knows which backend\n * is behind it.\n *\n * `name` is conventionally the class or module name (slf4j style), e.g.\n * `LogManager.getLogger('LogApiCall')`.\n */\nexport interface LoggerFactory {\n getLogger(name: string): Logger;\n}\n"]}
1
+ {"version":3,"file":"LoggerFactory.js","sourceRoot":"","sources":["../../../../../../packages/core/core-util/src/logging/LoggerFactory.ts"],"names":[],"mappings":"","sourcesContent":["import { Logger } from './Logger';\n\n/**\n * LoggerFactory - the pluggable seam that produces named {@link Logger}s.\n *\n * BUSINESS-LOGIC interface (a method with behavior). An app selects its logging\n * backend by installing one implementation of this factory globally via\n * {@link LogManager.setFactory}. Everything else in the codebase asks\n * {@link LogManager.getLogger} for a named logger and never knows which backend\n * is behind it.\n *\n * `name` is conventionally the class or module name (slf4j style), e.g.\n * `LogManager.getLogger('LogApiCall')`.\n */\nexport interface LoggerFactory {\n getLogger(name: string): Logger;\n}\n"]}