@o3r/logger 12.2.0-prerelease.2 → 12.2.0-prerelease.4

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Optional, Inject, Injectable, NgModule } from '@angular/core';
2
+ import { InjectionToken, Optional, Inject, Injectable, NgModule, makeEnvironmentProviders } from '@angular/core';
3
3
 
4
4
  /**
5
5
  * Console logger used to display the logs in the browser console
@@ -184,7 +184,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
184
184
  args: [LOGGER_CLIENT_TOKEN]
185
185
  }] }] });
186
186
 
187
+ /**
188
+ * @deprecated will be removed in v14.
189
+ */
187
190
  class LoggerModule {
191
+ /**
192
+ * Provide logger at application level
193
+ * By default {@link ConsoleLogger} will be used if nothing is specified
194
+ * @param {...any} clients Registered {@link https://github.com/AmadeusITGroup/otter/blob/main/docs/logger/LOGS.md | Logger Client}
195
+ * @deprecated Please use {@link provideLogger} instead, will be removed in v14.
196
+ */
188
197
  static forRoot(...clients) {
189
198
  if (clients.length === 0) {
190
199
  clients = [new ConsoleLogger()];
@@ -214,6 +223,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
214
223
  ]
215
224
  }]
216
225
  }] });
226
+ /**
227
+ * Provide logger for the application
228
+ * By default {@link ConsoleLogger} will be used if nothing is specified
229
+ * @param clients Registered {@link https://github.com/AmadeusITGroup/otter/blob/main/docs/logger/LOGS.md | Logger Client}
230
+ */
231
+ function provideLogger(...clients) {
232
+ if (clients.length === 0) {
233
+ clients = [new ConsoleLogger()];
234
+ }
235
+ return makeEnvironmentProviders([
236
+ LoggerService,
237
+ {
238
+ provide: LOGGER_CLIENT_TOKEN,
239
+ useValue: clients,
240
+ multi: false
241
+ }
242
+ ]);
243
+ }
217
244
 
218
245
  /**
219
246
  * Console logger used to display the logs in the browser console
@@ -237,5 +264,5 @@ const noopLogger = {
237
264
  * Generated bundle index. Do not edit.
238
265
  */
239
266
 
240
- export { ConsoleLogger, LOGGER_CLIENT_TOKEN, LoggerModule, LoggerService, noopLogger };
267
+ export { ConsoleLogger, LOGGER_CLIENT_TOKEN, LoggerModule, LoggerService, noopLogger, provideLogger };
241
268
  //# sourceMappingURL=o3r-logger.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"o3r-logger.mjs","sources":["../../src/services/logger/logger.console.ts","../../src/services/logger/logger.token.ts","../../src/services/logger/logger.service.ts","../../src/services/logger/logger.module.ts","../../src/services/logger/logger.noop.ts","../../src/o3r-logger.ts"],"sourcesContent":["/* eslint-disable no-console -- this is the purpose of this logger */\nimport {\n Action,\n ActionReducer,\n MetaReducer,\n} from '@ngrx/store';\nimport type {\n LoggerClient,\n} from './logger.client';\n\n/**\n * Console logger used to display the logs in the browser console\n * Should be used in development mode.\n */\nexport class ConsoleLogger implements LoggerClient {\n /** @inheritdoc */\n public error = console.error;\n\n /** @inheritdoc */\n public warn = console.warn;\n\n /** @inheritdoc */\n public debug = console.debug;\n\n /** @inheritdoc */\n public info = console.info;\n\n /** @inheritdoc */\n public log = console.log;\n\n /** @inheritdoc */\n public identify(uuid: string) {\n this.debug('logging identify function called');\n this.log(`Identify user id ${uuid}`);\n }\n\n /** @inheritdoc */\n public event(name: string, properties?: any) {\n this.debug('logging event function called');\n this.log('event:', name);\n if (properties) {\n this.log('properties:', properties);\n }\n }\n\n /** @inheritdoc */\n public getSessionURL(): undefined {\n this.debug('logging getSessionURL function called');\n return undefined;\n }\n\n /** @inheritdoc */\n public stopRecording() {\n this.debug('logging stopRecording function called');\n }\n\n /** @inheritdoc */\n public resumeRecording() {\n this.debug('logging resumeRecording function called');\n }\n\n /** @inheritdoc */\n public createMetaReducer(): MetaReducer<any, Action> {\n this.debug('logging createMetaReducer function called but a noop reducer is returned for the console logger');\n return (reducer: ActionReducer<any>): ActionReducer<any> => reducer;\n }\n}\n","import {\n InjectionToken,\n} from '@angular/core';\nimport {\n LoggerClient,\n} from './logger.client';\n\nexport const LOGGER_CLIENT_TOKEN: InjectionToken<LoggerClient | LoggerClient[]> = new InjectionToken('Logger Client injection token');\n","import {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n Action,\n MetaReducer,\n} from '@ngrx/store';\nimport type {\n Logger,\n} from '@o3r/core';\nimport {\n LoggerClient,\n} from './logger.client';\nimport {\n ConsoleLogger,\n} from './logger.console';\nimport {\n LOGGER_CLIENT_TOKEN,\n} from './logger.token';\n\n/**\n * Logger service\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoggerService implements Logger {\n /** Loggers */\n private readonly clients: LoggerClient[];\n\n /**\n * Record the recording status to make sure that new clients recording status will be consistent with the service\n */\n private recordingState: 'default' | 'resumed' | 'stopped' = 'default';\n\n constructor(@Optional() @Inject(LOGGER_CLIENT_TOKEN) clients?: LoggerClient | LoggerClient[]) {\n this.clients = clients ? (Array.isArray(clients) ? clients : [clients]) : [new ConsoleLogger()];\n }\n\n /**\n * Identify a user.\n * @param uid Unique identifier for the current user\n * @param vars Addition information about the user\n */\n public identify(uid: string, vars?: { [key: string]: string }) {\n this.clients.forEach((client) => client.identify(uid, vars));\n }\n\n /**\n * Log custom event.\n * @param name Name of the event to log\n * @param properties Additional properties\n */\n public event(name: string, properties?: any): void {\n this.clients.forEach((client) => client.event(name, properties));\n }\n\n /**\n * Generate a link to the replay of the current session.\n */\n public getClientSessionURL(): string | string[] | undefined {\n const sessionUrls = this.clients\n .map((client) => client.getSessionURL())\n .filter((sessionUrl): sessionUrl is string => !!sessionUrl);\n return sessionUrls.length <= 1 ? sessionUrls[0] : sessionUrls;\n }\n\n /**\n * Register a new client to the logger service\n * @param client\n */\n public registerClient(client: LoggerClient) {\n if (this.clients.includes(client)) {\n this.warn(`Client ${client.constructor.name} already registered`);\n return;\n }\n if (this.recordingState === 'resumed') {\n client.resumeRecording();\n } else if (this.recordingState === 'stopped') {\n client.stopRecording();\n }\n this.clients.push(client);\n }\n\n /**\n * Stop recording.\n */\n public stopClientRecording(): void {\n this.recordingState = 'stopped';\n this.clients.forEach((client) => client.stopRecording());\n }\n\n /**\n * Resume recording.\n */\n public resumeClientRecording(): void {\n this.recordingState = 'resumed';\n this.clients.forEach((client) => client.resumeRecording());\n }\n\n /**\n * Report an error\n * @param message\n * @param optionalParams\n */\n public error(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.error(message, ...optionalParams));\n }\n\n /**\n * Report a warning\n * @param message\n * @param optionalParams\n */\n public warn(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.warn(message, ...optionalParams));\n }\n\n /**\n * Log a message\n * @param message\n * @param optionalParams\n */\n public log(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.log(message, ...optionalParams));\n }\n\n /**\n * Log a message\n * @param message\n * @param optionalParams\n */\n public info(message?: any, ...optionalParams: any[]): void {\n this.clients.forEach((client) => (client.info ? client.info(message, ...optionalParams) : client.log(message, ...optionalParams)));\n }\n\n /**\n * Log a debug message\n * @param message\n * @param optionalParams\n */\n public debug(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.debug?.(message, ...optionalParams));\n }\n\n /**\n * Create a meta reducer to log ngrx store.\n */\n public createMetaReducer(): MetaReducer<any, Action> | MetaReducer<any, Action>[] | undefined {\n const metaReducers = this.clients\n .map((client) => client.createMetaReducer())\n .filter((metaReducer): metaReducer is MetaReducer<any, Action> => !!metaReducer);\n return metaReducers.length <= 1 ? metaReducers[0] : metaReducers;\n }\n}\n","import {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n LoggerClient,\n} from './logger.client';\nimport {\n ConsoleLogger,\n} from './logger.console';\nimport {\n LoggerService,\n} from './logger.service';\nimport {\n LOGGER_CLIENT_TOKEN,\n} from './logger.token';\n\n@NgModule({\n providers: [\n LoggerService\n ]\n})\nexport class LoggerModule {\n public static forRoot(...clients: LoggerClient[]): ModuleWithProviders<LoggerModule> {\n if (clients.length === 0) {\n clients = [new ConsoleLogger()];\n }\n return {\n ngModule: LoggerModule,\n providers: [\n {\n provide: LOGGER_CLIENT_TOKEN,\n useValue: clients,\n multi: false\n }\n ]\n };\n }\n}\n","/* eslint-disable no-console -- this is the purpose of this logger */\nimport type {\n Action,\n ActionReducer,\n MetaReducer,\n} from '@ngrx/store';\nimport type {\n LoggerClient,\n} from './logger.client';\n\n/**\n * Console logger used to display the logs in the browser console\n * Should be used in development mode.\n */\nexport const noopLogger: Readonly<LoggerClient> = {\n identify: () => {},\n event: () => {},\n getSessionURL: () => undefined,\n stopRecording: () => {},\n resumeRecording: () => {},\n error: console.error,\n warn: console.warn,\n debug: console.debug,\n info: console.info,\n log: console.log,\n createMetaReducer: (): MetaReducer<any, Action> => (reducer: ActionReducer<any>): ActionReducer<any> => reducer\n} as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"o3r-logger.mjs","sources":["../../src/services/logger/logger.console.ts","../../src/services/logger/logger.token.ts","../../src/services/logger/logger.service.ts","../../src/services/logger/logger.module.ts","../../src/services/logger/logger.noop.ts","../../src/o3r-logger.ts"],"sourcesContent":["/* eslint-disable no-console -- this is the purpose of this logger */\nimport {\n Action,\n ActionReducer,\n MetaReducer,\n} from '@ngrx/store';\nimport type {\n LoggerClient,\n} from './logger.client';\n\n/**\n * Console logger used to display the logs in the browser console\n * Should be used in development mode.\n */\nexport class ConsoleLogger implements LoggerClient {\n /** @inheritdoc */\n public error = console.error;\n\n /** @inheritdoc */\n public warn = console.warn;\n\n /** @inheritdoc */\n public debug = console.debug;\n\n /** @inheritdoc */\n public info = console.info;\n\n /** @inheritdoc */\n public log = console.log;\n\n /** @inheritdoc */\n public identify(uuid: string) {\n this.debug('logging identify function called');\n this.log(`Identify user id ${uuid}`);\n }\n\n /** @inheritdoc */\n public event(name: string, properties?: any) {\n this.debug('logging event function called');\n this.log('event:', name);\n if (properties) {\n this.log('properties:', properties);\n }\n }\n\n /** @inheritdoc */\n public getSessionURL(): undefined {\n this.debug('logging getSessionURL function called');\n return undefined;\n }\n\n /** @inheritdoc */\n public stopRecording() {\n this.debug('logging stopRecording function called');\n }\n\n /** @inheritdoc */\n public resumeRecording() {\n this.debug('logging resumeRecording function called');\n }\n\n /** @inheritdoc */\n public createMetaReducer(): MetaReducer<any, Action> {\n this.debug('logging createMetaReducer function called but a noop reducer is returned for the console logger');\n return (reducer: ActionReducer<any>): ActionReducer<any> => reducer;\n }\n}\n","import {\n InjectionToken,\n} from '@angular/core';\nimport {\n LoggerClient,\n} from './logger.client';\n\nexport const LOGGER_CLIENT_TOKEN: InjectionToken<LoggerClient | LoggerClient[]> = new InjectionToken('Logger Client injection token');\n","import {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n Action,\n MetaReducer,\n} from '@ngrx/store';\nimport type {\n Logger,\n} from '@o3r/core';\nimport {\n LoggerClient,\n} from './logger.client';\nimport {\n ConsoleLogger,\n} from './logger.console';\nimport {\n LOGGER_CLIENT_TOKEN,\n} from './logger.token';\n\n/**\n * Logger service\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoggerService implements Logger {\n /** Loggers */\n private readonly clients: LoggerClient[];\n\n /**\n * Record the recording status to make sure that new clients recording status will be consistent with the service\n */\n private recordingState: 'default' | 'resumed' | 'stopped' = 'default';\n\n constructor(@Optional() @Inject(LOGGER_CLIENT_TOKEN) clients?: LoggerClient | LoggerClient[]) {\n this.clients = clients ? (Array.isArray(clients) ? clients : [clients]) : [new ConsoleLogger()];\n }\n\n /**\n * Identify a user.\n * @param uid Unique identifier for the current user\n * @param vars Addition information about the user\n */\n public identify(uid: string, vars?: { [key: string]: string }) {\n this.clients.forEach((client) => client.identify(uid, vars));\n }\n\n /**\n * Log custom event.\n * @param name Name of the event to log\n * @param properties Additional properties\n */\n public event(name: string, properties?: any): void {\n this.clients.forEach((client) => client.event(name, properties));\n }\n\n /**\n * Generate a link to the replay of the current session.\n */\n public getClientSessionURL(): string | string[] | undefined {\n const sessionUrls = this.clients\n .map((client) => client.getSessionURL())\n .filter((sessionUrl): sessionUrl is string => !!sessionUrl);\n return sessionUrls.length <= 1 ? sessionUrls[0] : sessionUrls;\n }\n\n /**\n * Register a new client to the logger service\n * @param client\n */\n public registerClient(client: LoggerClient) {\n if (this.clients.includes(client)) {\n this.warn(`Client ${client.constructor.name} already registered`);\n return;\n }\n if (this.recordingState === 'resumed') {\n client.resumeRecording();\n } else if (this.recordingState === 'stopped') {\n client.stopRecording();\n }\n this.clients.push(client);\n }\n\n /**\n * Stop recording.\n */\n public stopClientRecording(): void {\n this.recordingState = 'stopped';\n this.clients.forEach((client) => client.stopRecording());\n }\n\n /**\n * Resume recording.\n */\n public resumeClientRecording(): void {\n this.recordingState = 'resumed';\n this.clients.forEach((client) => client.resumeRecording());\n }\n\n /**\n * Report an error\n * @param message\n * @param optionalParams\n */\n public error(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.error(message, ...optionalParams));\n }\n\n /**\n * Report a warning\n * @param message\n * @param optionalParams\n */\n public warn(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.warn(message, ...optionalParams));\n }\n\n /**\n * Log a message\n * @param message\n * @param optionalParams\n */\n public log(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.log(message, ...optionalParams));\n }\n\n /**\n * Log a message\n * @param message\n * @param optionalParams\n */\n public info(message?: any, ...optionalParams: any[]): void {\n this.clients.forEach((client) => (client.info ? client.info(message, ...optionalParams) : client.log(message, ...optionalParams)));\n }\n\n /**\n * Log a debug message\n * @param message\n * @param optionalParams\n */\n public debug(message?: any, ...optionalParams: any[]) {\n this.clients.forEach((client) => client.debug?.(message, ...optionalParams));\n }\n\n /**\n * Create a meta reducer to log ngrx store.\n */\n public createMetaReducer(): MetaReducer<any, Action> | MetaReducer<any, Action>[] | undefined {\n const metaReducers = this.clients\n .map((client) => client.createMetaReducer())\n .filter((metaReducer): metaReducer is MetaReducer<any, Action> => !!metaReducer);\n return metaReducers.length <= 1 ? metaReducers[0] : metaReducers;\n }\n}\n","import {\n makeEnvironmentProviders,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n LoggerClient,\n} from './logger.client';\nimport {\n ConsoleLogger,\n} from './logger.console';\nimport {\n LoggerService,\n} from './logger.service';\nimport {\n LOGGER_CLIENT_TOKEN,\n} from './logger.token';\n\n/**\n * @deprecated will be removed in v14.\n */\n@NgModule({\n providers: [\n LoggerService\n ]\n})\nexport class LoggerModule {\n /**\n * Provide logger at application level\n * By default {@link ConsoleLogger} will be used if nothing is specified\n * @param {...any} clients Registered {@link https://github.com/AmadeusITGroup/otter/blob/main/docs/logger/LOGS.md | Logger Client}\n * @deprecated Please use {@link provideLogger} instead, will be removed in v14.\n */\n public static forRoot(...clients: LoggerClient[]): ModuleWithProviders<LoggerModule> {\n if (clients.length === 0) {\n clients = [new ConsoleLogger()];\n }\n return {\n ngModule: LoggerModule,\n providers: [\n {\n provide: LOGGER_CLIENT_TOKEN,\n useValue: clients,\n multi: false\n }\n ]\n };\n }\n}\n\n/**\n * Provide logger for the application\n * By default {@link ConsoleLogger} will be used if nothing is specified\n * @param clients Registered {@link https://github.com/AmadeusITGroup/otter/blob/main/docs/logger/LOGS.md | Logger Client}\n */\nexport function provideLogger(...clients: LoggerClient[]) {\n if (clients.length === 0) {\n clients = [new ConsoleLogger()];\n }\n return makeEnvironmentProviders([\n LoggerService,\n {\n provide: LOGGER_CLIENT_TOKEN,\n useValue: clients,\n multi: false\n }\n ]);\n}\n","/* eslint-disable no-console -- this is the purpose of this logger */\nimport type {\n Action,\n ActionReducer,\n MetaReducer,\n} from '@ngrx/store';\nimport type {\n LoggerClient,\n} from './logger.client';\n\n/**\n * Console logger used to display the logs in the browser console\n * Should be used in development mode.\n */\nexport const noopLogger: Readonly<LoggerClient> = {\n identify: () => {},\n event: () => {},\n getSessionURL: () => undefined,\n stopRecording: () => {},\n resumeRecording: () => {},\n error: console.error,\n warn: console.warn,\n debug: console.debug,\n info: console.info,\n log: console.log,\n createMetaReducer: (): MetaReducer<any, Action> => (reducer: ActionReducer<any>): ActionReducer<any> => reducer\n} as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@o3r/logger",
3
- "version": "12.2.0-prerelease.2",
3
+ "version": "12.2.0-prerelease.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -16,8 +16,8 @@
16
16
  "@angular/platform-browser-dynamic": "^19.0.0",
17
17
  "@fullstory/browser": "^2.0.0",
18
18
  "@ngrx/store": "^19.0.0",
19
- "@o3r/core": "^12.2.0-prerelease.2",
20
- "@o3r/schematics": "^12.2.0-prerelease.2",
19
+ "@o3r/core": "^12.2.0-prerelease.4",
20
+ "@o3r/schematics": "^12.2.0-prerelease.4",
21
21
  "@schematics/angular": "^19.0.0",
22
22
  "logrocket": "^9.0.0",
23
23
  "logrocket-ngrx": "^0.2.1",
@@ -1,10 +1,25 @@
1
1
  import { ModuleWithProviders } from '@angular/core';
2
2
  import { LoggerClient } from './logger.client';
3
3
  import * as i0 from "@angular/core";
4
+ /**
5
+ * @deprecated will be removed in v14.
6
+ */
4
7
  export declare class LoggerModule {
8
+ /**
9
+ * Provide logger at application level
10
+ * By default {@link ConsoleLogger} will be used if nothing is specified
11
+ * @param {...any} clients Registered {@link https://github.com/AmadeusITGroup/otter/blob/main/docs/logger/LOGS.md | Logger Client}
12
+ * @deprecated Please use {@link provideLogger} instead, will be removed in v14.
13
+ */
5
14
  static forRoot(...clients: LoggerClient[]): ModuleWithProviders<LoggerModule>;
6
15
  static ɵfac: i0.ɵɵFactoryDeclaration<LoggerModule, never>;
7
16
  static ɵmod: i0.ɵɵNgModuleDeclaration<LoggerModule, never, never, never>;
8
17
  static ɵinj: i0.ɵɵInjectorDeclaration<LoggerModule>;
9
18
  }
19
+ /**
20
+ * Provide logger for the application
21
+ * By default {@link ConsoleLogger} will be used if nothing is specified
22
+ * @param clients Registered {@link https://github.com/AmadeusITGroup/otter/blob/main/docs/logger/LOGS.md | Logger Client}
23
+ */
24
+ export declare function provideLogger(...clients: LoggerClient[]): import("@angular/core").EnvironmentProviders;
10
25
  //# sourceMappingURL=logger.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.module.d.ts","sourceRoot":"","sources":["../../../src/services/logger/logger.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAEpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACb,MAAM,iBAAiB,CAAC;;AAWzB,qBAKa,YAAY;WACT,OAAO,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC,YAAY,CAAC;yCADzE,YAAY;0CAAZ,YAAY;0CAAZ,YAAY;CAgBxB"}
1
+ {"version":3,"file":"logger.module.d.ts","sourceRoot":"","sources":["../../../src/services/logger/logger.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAEpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACb,MAAM,iBAAiB,CAAC;;AAWzB;;GAEG;AACH,qBAKa,YAAY;IACvB;;;;;OAKG;WACW,OAAO,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC,YAAY,CAAC;yCAPzE,YAAY;0CAAZ,YAAY;0CAAZ,YAAY;CAsBxB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,gDAYvD"}