Skip to content

Commit c48930e

Browse files
gtamanahaalexs-mparticle
authored andcommitted
feat: Migrate Logger to Typescript (#1120)
1 parent 12341f0 commit c48930e

File tree

9 files changed

+229
-80
lines changed

9 files changed

+229
-80
lines changed

src/batchUploader.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,15 +257,15 @@ export class BatchUploader {
257257
return;
258258
}
259259

260-
const { verbose } = this.mpInstance.Logger;
260+
const { Logger } = this.mpInstance;
261261

262262
this.eventsQueuedForProcessing.push(event);
263263
if (this.offlineStorageEnabled && this.eventVault) {
264264
this.eventVault.store(this.eventsQueuedForProcessing);
265265
}
266266

267-
verbose(`Queuing event: ${JSON.stringify(event)}`);
268-
verbose(`Queued event count: ${this.eventsQueuedForProcessing.length}`);
267+
Logger.verbose(`Queuing event: ${JSON.stringify(event)}`);
268+
Logger.verbose(`Queued event count: ${this.eventsQueuedForProcessing.length}`);
269269

270270
if (this.shouldTriggerImmediateUpload(event.EventDataType)) {
271271
this.prepareAndUpload(false, false);

src/identityApiClient.ts

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ export default function IdentityAPIClient(
8888
aliasRequest: IAliasRequest,
8989
aliasCallback: IAliasCallback
9090
) {
91-
const { verbose, error } = mpInstance.Logger;
91+
const { Logger } = mpInstance;
9292
const { invokeAliasCallback } = mpInstance._Helpers;
9393
const { aliasUrl } = mpInstance._Store.SDKConfig;
9494
const { devToken: apiKey } = mpInstance._Store;
9595

96-
verbose(Messages.InformationMessages.SendAliasHttp);
96+
Logger.verbose(Messages.InformationMessages.SendAliasHttp);
9797

9898
// https://go.mparticle.com/work/SQDSDKS-6750
9999
const uploadUrl = `https://${aliasUrl}${apiKey}/Alias`;
@@ -136,7 +136,7 @@ export default function IdentityAPIClient(
136136
try {
137137
aliasResponseBody = await response.json();
138138
} catch (e) {
139-
verbose('The request has no response body');
139+
Logger.verbose('The request has no response body');
140140
}
141141
} else {
142142
// https://go.mparticle.com/work/SQDSDKS-6568
@@ -171,11 +171,11 @@ export default function IdentityAPIClient(
171171

172172
}
173173

174-
verbose(message);
174+
Logger.verbose(message);
175175
invokeAliasCallback(aliasCallback, response.status, errorMessage);
176176
} catch (e) {
177177
const errorMessage = (e as Error).message || e.toString();
178-
error('Error sending alias request to mParticle servers. ' + errorMessage);
178+
Logger.error('Error sending alias request to mParticle servers. ' + errorMessage);
179179
invokeAliasCallback(
180180
aliasCallback,
181181
HTTPCodes.noHttpCoverage,
@@ -193,15 +193,14 @@ export default function IdentityAPIClient(
193193
mpid: MPID,
194194
knownIdentities: UserIdentities
195195
) {
196-
const { verbose, error } = mpInstance.Logger;
197196
const { invokeCallback } = mpInstance._Helpers;
198-
199-
verbose(Messages.InformationMessages.SendIdentityBegin);
197+
const { Logger } = mpInstance;
198+
Logger.verbose(Messages.InformationMessages.SendIdentityBegin);
200199
if (!identityApiRequest) {
201-
error(Messages.ErrorMessages.APIRequestEmpty);
200+
Logger.error(Messages.ErrorMessages.APIRequestEmpty);
202201
return;
203202
}
204-
verbose(Messages.InformationMessages.SendIdentityHttp);
203+
Logger.verbose(Messages.InformationMessages.SendIdentityHttp);
205204

206205
if (mpInstance._Store.identityCallInFlight) {
207206
invokeCallback(
@@ -289,7 +288,7 @@ export default function IdentityAPIClient(
289288

290289
mpInstance._Store.identityCallInFlight = false;
291290

292-
verbose(message);
291+
Logger.verbose(message);
293292
parseIdentityResponse(
294293
identityResponse,
295294
previousMPID,
@@ -304,7 +303,7 @@ export default function IdentityAPIClient(
304303

305304
const errorMessage = (err as Error).message || err.toString();
306305

307-
error('Error sending identity request to servers' + ' - ' + errorMessage);
306+
Logger.error('Error sending identity request to servers' + ' - ' + errorMessage);
308307
invokeCallback(
309308
callback,
310309
HTTPCodes.noHttpCoverage,

src/logger.js

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/logger.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { LogLevelType, SDKInitConfig, SDKLoggerApi } from './sdkRuntimeModels';
2+
3+
export type ILoggerConfig = Pick<SDKInitConfig, 'logLevel' | 'logger'>;
4+
export type IConsoleLogger = Partial<Pick<SDKLoggerApi, 'error' | 'warning' | 'verbose'>>;
5+
6+
export class Logger {
7+
private logLevel: LogLevelType;
8+
private logger: IConsoleLogger;
9+
10+
constructor(config: ILoggerConfig) {
11+
this.logLevel = config.logLevel ?? LogLevelType.Warning;
12+
this.logger = config.logger ?? new ConsoleLogger();
13+
}
14+
15+
public verbose(msg: string): void {
16+
if(this.logLevel === LogLevelType.None)
17+
return;
18+
19+
if (this.logger.verbose && this.logLevel === LogLevelType.Verbose) {
20+
this.logger.verbose(msg);
21+
}
22+
}
23+
24+
public warning(msg: string): void {
25+
if(this.logLevel === LogLevelType.None)
26+
return;
27+
28+
if (this.logger.warning &&
29+
(this.logLevel === LogLevelType.Verbose || this.logLevel === LogLevelType.Warning)) {
30+
this.logger.warning(msg);
31+
}
32+
}
33+
34+
public error(msg: string): void {
35+
if(this.logLevel === LogLevelType.None)
36+
return;
37+
38+
if (this.logger.error) {
39+
this.logger.error(msg);
40+
}
41+
}
42+
43+
public setLogLevel(newLogLevel: LogLevelType): void {
44+
this.logLevel = newLogLevel;
45+
}
46+
}
47+
48+
export class ConsoleLogger implements IConsoleLogger {
49+
public verbose(msg: string): void {
50+
if (console && console.info) {
51+
console.info(msg);
52+
}
53+
}
54+
55+
public error(msg: string): void {
56+
if (console && console.error) {
57+
console.error(msg);
58+
}
59+
}
60+
61+
public warning(msg: string): void {
62+
if (console && console.warn) {
63+
console.warn(msg);
64+
}
65+
}
66+
}

src/mp-instance.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import CookieSyncManager, { ICookieSyncManager } from './cookieSyncManager';
2525
import SessionManager, { ISessionManager } from './sessionManager';
2626
import Ecommerce from './ecommerce';
2727
import Store, { IStore } from './store';
28-
import Logger from './logger';
28+
import { Logger } from './logger';
2929
import Persistence from './persistence';
3030
import Events from './events';
3131
import Forwarders from './forwarders';
@@ -227,6 +227,7 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
227227
if (instance._Store) {
228228
delete instance._Store;
229229
}
230+
instance.Logger = new Logger(config);
230231
instance._Store = new Store(config, instance);
231232
instance._Store.isLocalStorageAvailable = instance._Persistence.determineLocalStorageAvailability(
232233
window.localStorage

src/sdkRuntimeModels.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { SDKECommerceAPI } from './ecommerce.interfaces';
4040
import { IErrorLogMessage, IMParticleWebSDKInstance, IntegrationDelays } from './mp-instance';
4141
import Constants from './constants';
4242
import RoktManager, { IRoktLauncherOptions } from './roktManager';
43+
import { IConsoleLogger } from './logger';
4344

4445
// TODO: Resolve this with version in @mparticle/web-sdk
4546
export type SDKEventCustomFlags = Dictionary<any>;
@@ -259,7 +260,13 @@ export interface IMParticleInstanceManager extends MParticleWebSDK {
259260
export type BooleanStringLowerCase = 'false' | 'true';
260261
export type BooleanStringTitleCase = 'False' | 'True';
261262

262-
export type LogLevelType = 'none' | 'verbose' | 'warning' | 'error';
263+
export type LogLevelType = (typeof LogLevelType)[keyof typeof LogLevelType];
264+
export const LogLevelType = {
265+
None: 'none',
266+
Verbose: 'verbose',
267+
Warning: 'warning',
268+
Error: 'error',
269+
} as const;
263270

264271
// TODO: This should eventually be moved into wherever init logic lives
265272
// TODO: Replace/Merge this with MPConfiguration in @types/mparticle__web-sdk
@@ -306,6 +313,7 @@ export interface SDKInitConfig
306313
launcherOptions?: IRoktLauncherOptions;
307314

308315
rq?: Function[] | any[];
316+
logger?: IConsoleLogger;
309317
}
310318

311319
export interface DataPlanConfig {

0 commit comments

Comments
 (0)