@thoughtspot/visual-embed-sdk 1.27.0-alpha.0 → 1.27.0-logger
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/cjs/package.json +1 -1
- package/cjs/src/auth.d.ts.map +1 -1
- package/cjs/src/auth.js +5 -4
- package/cjs/src/auth.js.map +1 -1
- package/cjs/src/embed/app.d.ts +1 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +3 -2
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +5 -4
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/base.d.ts.map +1 -1
- package/cjs/src/embed/base.js +5 -2
- package/cjs/src/embed/base.js.map +1 -1
- package/cjs/src/embed/base.spec.js +3 -2
- package/cjs/src/embed/base.spec.js.map +1 -1
- package/cjs/src/embed/embed.spec.js +2 -1
- package/cjs/src/embed/embed.spec.js.map +1 -1
- package/cjs/src/embed/embedConfig.d.ts +2 -1
- package/cjs/src/embed/embedConfig.d.ts.map +1 -1
- package/cjs/src/embed/embedConfig.js +2 -0
- package/cjs/src/embed/embedConfig.js.map +1 -1
- package/cjs/src/embed/events.spec.js +3 -2
- package/cjs/src/embed/events.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +1 -1
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/search.d.ts +1 -1
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +2 -3
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +0 -1
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +13 -13
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +27 -26
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +2 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/mixpanel-service.d.ts.map +1 -1
- package/cjs/src/mixpanel-service.js +2 -1
- package/cjs/src/mixpanel-service.js.map +1 -1
- package/cjs/src/react/index.spec.js +2 -2
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/types.d.ts +25 -1
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +12 -1
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/authService/authService.d.ts.map +1 -1
- package/cjs/src/utils/authService/authService.js +3 -2
- package/cjs/src/utils/authService/authService.js.map +1 -1
- package/cjs/src/utils/authService/authService.spec.js +3 -2
- package/cjs/src/utils/authService/authService.spec.js.map +1 -1
- package/cjs/src/utils/authService/tokenizedAuthService.d.ts.map +1 -1
- package/cjs/src/utils/authService/tokenizedAuthService.js +2 -1
- package/cjs/src/utils/authService/tokenizedAuthService.js.map +1 -1
- package/cjs/src/utils/logger.d.ts +18 -0
- package/cjs/src/utils/logger.d.ts.map +1 -0
- package/cjs/src/utils/logger.js +78 -0
- package/cjs/src/utils/logger.js.map +1 -0
- package/cjs/src/utils/logger.spec.d.ts +25 -0
- package/cjs/src/utils/logger.spec.d.ts.map +1 -0
- package/cjs/src/utils/logger.spec.js +80 -0
- package/cjs/src/utils/logger.spec.js.map +1 -0
- package/dist/src/auth.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +1 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/embedConfig.d.ts +2 -1
- package/dist/src/embed/embedConfig.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +1 -1
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +1 -1
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +0 -1
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mixpanel-service.d.ts.map +1 -1
- package/dist/src/types.d.ts +25 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/authService/authService.d.ts.map +1 -1
- package/dist/src/utils/authService/tokenizedAuthService.d.ts.map +1 -1
- package/dist/src/utils/logger.d.ts +18 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.spec.d.ts +25 -0
- package/dist/src/utils/logger.spec.d.ts.map +1 -0
- package/dist/tsembed-react.es.js +17309 -33
- package/dist/tsembed-react.js +17309 -33
- package/dist/tsembed.es.js +17636 -354
- package/dist/tsembed.js +32457 -15176
- package/dist/visual-embed-sdk-react-full.d.ts +28 -25
- package/dist/visual-embed-sdk-react.d.ts +28 -25
- package/dist/visual-embed-sdk.d.ts +28 -25
- package/lib/package.json +1 -1
- package/lib/src/auth.d.ts.map +1 -1
- package/lib/src/auth.js +5 -4
- package/lib/src/auth.js.map +1 -1
- package/lib/src/embed/app.d.ts +1 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +3 -2
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +5 -4
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +6 -3
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/base.spec.js +3 -2
- package/lib/src/embed/base.spec.js.map +1 -1
- package/lib/src/embed/embed.spec.js +2 -1
- package/lib/src/embed/embed.spec.js.map +1 -1
- package/lib/src/embed/embedConfig.d.ts +2 -1
- package/lib/src/embed/embedConfig.d.ts.map +1 -1
- package/lib/src/embed/embedConfig.js +2 -0
- package/lib/src/embed/embedConfig.js.map +1 -1
- package/lib/src/embed/events.spec.js +3 -2
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/sage.d.ts +1 -1
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/search.d.ts +1 -1
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +2 -3
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +0 -1
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +13 -13
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +27 -26
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/mixpanel-service.d.ts.map +1 -1
- package/lib/src/mixpanel-service.js +2 -1
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/react/index.spec.js +2 -2
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/types.d.ts +25 -1
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +11 -0
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/authService/authService.d.ts.map +1 -1
- package/lib/src/utils/authService/authService.js +3 -2
- package/lib/src/utils/authService/authService.js.map +1 -1
- package/lib/src/utils/authService/authService.spec.js +3 -2
- package/lib/src/utils/authService/authService.spec.js.map +1 -1
- package/lib/src/utils/authService/tokenizedAuthService.d.ts.map +1 -1
- package/lib/src/utils/authService/tokenizedAuthService.js +2 -1
- package/lib/src/utils/authService/tokenizedAuthService.js.map +1 -1
- package/lib/src/utils/logger.d.ts +18 -0
- package/lib/src/utils/logger.d.ts.map +1 -0
- package/lib/src/utils/logger.js +73 -0
- package/lib/src/utils/logger.js.map +1 -0
- package/lib/src/utils/logger.spec.d.ts +25 -0
- package/lib/src/utils/logger.spec.d.ts.map +1 -0
- package/lib/src/utils/logger.spec.js +57 -0
- package/lib/src/utils/logger.spec.js.map +1 -0
- package/lib/src/visual-embed-sdk.d.ts +29 -26
- package/package.json +1 -1
- package/src/auth.ts +5 -4
- package/src/embed/app.spec.ts +5 -4
- package/src/embed/app.ts +4 -3
- package/src/embed/base.spec.ts +3 -2
- package/src/embed/base.ts +10 -3
- package/src/embed/embed.spec.ts +2 -1
- package/src/embed/embedConfig.ts +2 -0
- package/src/embed/events.spec.ts +3 -2
- package/src/embed/liveboard.ts +4 -4
- package/src/embed/sage.ts +1 -1
- package/src/embed/search.ts +3 -4
- package/src/embed/ts-embed.spec.ts +27 -26
- package/src/embed/ts-embed.ts +19 -19
- package/src/index.ts +2 -0
- package/src/mixpanel-service.ts +2 -1
- package/src/react/index.spec.tsx +2 -2
- package/src/types.ts +26 -0
- package/src/utils/authService/authService.spec.ts +3 -2
- package/src/utils/authService/authService.ts +4 -2
- package/src/utils/authService/tokenizedAuthService.ts +2 -1
- package/src/utils/logger.spec.ts +67 -0
- package/src/utils/logger.ts +87 -0
|
@@ -32,6 +32,7 @@ import * as authInstance from '../auth';
|
|
|
32
32
|
import * as baseInstance from './base';
|
|
33
33
|
import { MIXPANEL_EVENT } from '../mixpanel-service';
|
|
34
34
|
import * as authService from '../utils/authService/authService';
|
|
35
|
+
import { logger } from '../utils/logger';
|
|
35
36
|
|
|
36
37
|
const defaultViewConfig = {
|
|
37
38
|
frameParams: {
|
|
@@ -425,7 +426,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
425
426
|
const searchEmbed = new SearchEmbed(getRootEl(), defaultViewConfig);
|
|
426
427
|
searchEmbed
|
|
427
428
|
.on(EmbedEvent.Save, () => {
|
|
428
|
-
|
|
429
|
+
logger.log('non callable');
|
|
429
430
|
})
|
|
430
431
|
.render();
|
|
431
432
|
|
|
@@ -468,7 +469,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
468
469
|
.on(
|
|
469
470
|
EmbedEvent.Save,
|
|
470
471
|
() => {
|
|
471
|
-
|
|
472
|
+
logger.log('non callable');
|
|
472
473
|
},
|
|
473
474
|
{ start: true },
|
|
474
475
|
)
|
|
@@ -830,7 +831,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
830
831
|
const iFrame: any = document.createElement('div');
|
|
831
832
|
iFrame.contentWindow = null;
|
|
832
833
|
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
833
|
-
spyOn(
|
|
834
|
+
spyOn(logger, 'error');
|
|
834
835
|
tsEmbed.render();
|
|
835
836
|
});
|
|
836
837
|
|
|
@@ -844,7 +845,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
844
845
|
|
|
845
846
|
describe('when visible actions are set', () => {
|
|
846
847
|
test('should throw error when there are both visible and hidden actions - pinboard', async () => {
|
|
847
|
-
spyOn(
|
|
848
|
+
spyOn(logger, 'error');
|
|
848
849
|
const pinboardEmbed = new PinboardEmbed(getRootEl(), {
|
|
849
850
|
hiddenActions: [Action.DownloadAsCsv],
|
|
850
851
|
visibleActions: [Action.DownloadAsCsv],
|
|
@@ -853,7 +854,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
853
854
|
} as LiveboardViewConfig);
|
|
854
855
|
await pinboardEmbed.render();
|
|
855
856
|
expect(pinboardEmbed['isError']).toBe(true);
|
|
856
|
-
expect(
|
|
857
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
857
858
|
'You cannot have both hidden actions and visible actions',
|
|
858
859
|
);
|
|
859
860
|
});
|
|
@@ -876,7 +877,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
876
877
|
hiddenActions: Array<Action>,
|
|
877
878
|
visibleActions: Array<Action>,
|
|
878
879
|
) {
|
|
879
|
-
spyOn(
|
|
880
|
+
spyOn(logger, 'error');
|
|
880
881
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
881
882
|
hiddenActions,
|
|
882
883
|
visibleActions,
|
|
@@ -885,7 +886,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
885
886
|
} as LiveboardViewConfig);
|
|
886
887
|
await liveboardEmbed.render();
|
|
887
888
|
expect(liveboardEmbed['isError']).toBe(true);
|
|
888
|
-
expect(
|
|
889
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
889
890
|
'You cannot have both hidden actions and visible actions',
|
|
890
891
|
);
|
|
891
892
|
}
|
|
@@ -921,7 +922,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
921
922
|
|
|
922
923
|
describe('when visible Tabs are set', () => {
|
|
923
924
|
test('should throw error when there are both visible and hidden Tabs - pinboard', async () => {
|
|
924
|
-
spyOn(
|
|
925
|
+
spyOn(logger, 'error');
|
|
925
926
|
const pinboardEmbed = new PinboardEmbed(getRootEl(), {
|
|
926
927
|
visibleTabs: [tabId1],
|
|
927
928
|
hiddenTabs: [tabId2],
|
|
@@ -930,7 +931,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
930
931
|
} as LiveboardViewConfig);
|
|
931
932
|
await pinboardEmbed.render();
|
|
932
933
|
expect(pinboardEmbed['isError']).toBe(true);
|
|
933
|
-
expect(
|
|
934
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
934
935
|
'You cannot have both hidden Tabs and visible Tabs',
|
|
935
936
|
);
|
|
936
937
|
});
|
|
@@ -953,7 +954,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
953
954
|
hiddenTabs: Array<string>,
|
|
954
955
|
visibleTabs: Array<string>,
|
|
955
956
|
) {
|
|
956
|
-
spyOn(
|
|
957
|
+
spyOn(logger, 'error');
|
|
957
958
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
958
959
|
hiddenTabs,
|
|
959
960
|
visibleTabs,
|
|
@@ -962,7 +963,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
962
963
|
} as LiveboardViewConfig);
|
|
963
964
|
await liveboardEmbed.render();
|
|
964
965
|
expect(liveboardEmbed['isError']).toBe(true);
|
|
965
|
-
expect(
|
|
966
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
966
967
|
'You cannot have both hidden Tabs and visible Tabs',
|
|
967
968
|
);
|
|
968
969
|
}
|
|
@@ -1006,11 +1007,11 @@ describe('Unit test case for ts embed', () => {
|
|
|
1006
1007
|
});
|
|
1007
1008
|
|
|
1008
1009
|
test('Error should be true', async () => {
|
|
1009
|
-
spyOn(
|
|
1010
|
+
spyOn(logger, 'error');
|
|
1010
1011
|
const tsEmbed = new SearchEmbed(getRootEl(), {});
|
|
1011
1012
|
tsEmbed.render();
|
|
1012
1013
|
expect(tsEmbed['isError']).toBe(true);
|
|
1013
|
-
expect(
|
|
1014
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
1014
1015
|
'You need to init the ThoughtSpot SDK module first',
|
|
1015
1016
|
);
|
|
1016
1017
|
});
|
|
@@ -1018,13 +1019,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
1018
1019
|
|
|
1019
1020
|
describe('V1Embed ', () => {
|
|
1020
1021
|
test('when isRendered is true than isError will be true', () => {
|
|
1021
|
-
spyOn(
|
|
1022
|
+
spyOn(logger, 'error');
|
|
1022
1023
|
const viEmbedIns = new tsEmbedInstance.V1Embed(getRootEl(), defaultViewConfig);
|
|
1023
1024
|
expect(viEmbedIns['isError']).toBe(false);
|
|
1024
1025
|
viEmbedIns.render();
|
|
1025
1026
|
viEmbedIns.on(EmbedEvent.CustomAction, jest.fn()).render();
|
|
1026
1027
|
expect(viEmbedIns['isError']).toBe(true);
|
|
1027
|
-
expect(
|
|
1028
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
1028
1029
|
'Please register event handlers before calling render',
|
|
1029
1030
|
);
|
|
1030
1031
|
});
|
|
@@ -1065,7 +1066,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1065
1066
|
});
|
|
1066
1067
|
|
|
1067
1068
|
test('navigateToPage function use before render', async () => {
|
|
1068
|
-
spyOn(
|
|
1069
|
+
spyOn(logger, 'log');
|
|
1069
1070
|
const appEmbed = new AppEmbed(getRootEl(), {
|
|
1070
1071
|
frameParams: {
|
|
1071
1072
|
width: '100%',
|
|
@@ -1074,7 +1075,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1074
1075
|
});
|
|
1075
1076
|
appEmbed.navigateToPage(path, false);
|
|
1076
1077
|
await appEmbed.render();
|
|
1077
|
-
expect(
|
|
1078
|
+
expect(logger.log).toHaveBeenCalledWith(
|
|
1078
1079
|
'Please call render before invoking this method',
|
|
1079
1080
|
);
|
|
1080
1081
|
});
|
|
@@ -1462,7 +1463,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1462
1463
|
});
|
|
1463
1464
|
|
|
1464
1465
|
// show preRender
|
|
1465
|
-
const warnSpy = spyOn(
|
|
1466
|
+
const warnSpy = spyOn(logger, 'warn');
|
|
1466
1467
|
libEmbed.showPreRender();
|
|
1467
1468
|
expect(warnSpy).toHaveBeenCalledTimes(0);
|
|
1468
1469
|
|
|
@@ -1492,13 +1493,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
1492
1493
|
it('preRender called without preRenderId should log error ', () => {
|
|
1493
1494
|
createRootEleForEmbed();
|
|
1494
1495
|
|
|
1495
|
-
spyOn(
|
|
1496
|
+
spyOn(logger, 'error');
|
|
1496
1497
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
1497
1498
|
liveboardId: 'myLiveboardId',
|
|
1498
1499
|
});
|
|
1499
1500
|
libEmbed.preRender();
|
|
1500
1501
|
|
|
1501
|
-
expect(
|
|
1502
|
+
expect(logger.error).toHaveBeenCalledWith('PreRender id is required for preRender');
|
|
1502
1503
|
});
|
|
1503
1504
|
|
|
1504
1505
|
it('showPreRender should preRender if not available', async () => {
|
|
@@ -1546,7 +1547,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1546
1547
|
|
|
1547
1548
|
libEmbed.preRender();
|
|
1548
1549
|
await waitFor(() => !!getIFrameEl());
|
|
1549
|
-
const warnSpy = jest.spyOn(
|
|
1550
|
+
const warnSpy = jest.spyOn(logger, 'warn');
|
|
1550
1551
|
const newEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
1551
1552
|
preRenderId: 'i-am-preRendered',
|
|
1552
1553
|
liveboardId: 'awdawda',
|
|
@@ -1565,10 +1566,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
1565
1566
|
liveboardId: 'myLiveboardId',
|
|
1566
1567
|
});
|
|
1567
1568
|
spyOn(libEmbed, 'preRender');
|
|
1568
|
-
spyOn(
|
|
1569
|
+
spyOn(logger, 'error');
|
|
1569
1570
|
libEmbed.showPreRender();
|
|
1570
1571
|
expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
|
|
1571
|
-
expect(
|
|
1572
|
+
expect(logger.error).toHaveBeenCalledTimes(1);
|
|
1572
1573
|
});
|
|
1573
1574
|
|
|
1574
1575
|
it('should get underlying iframe', async () => {
|
|
@@ -1596,16 +1597,16 @@ describe('Unit test case for ts embed', () => {
|
|
|
1596
1597
|
);
|
|
1597
1598
|
});
|
|
1598
1599
|
it('should log error if sync is called before preRender', async () => {
|
|
1599
|
-
jest.spyOn(
|
|
1600
|
+
jest.spyOn(logger, 'error').mockImplementation(jest.fn());
|
|
1600
1601
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
1601
1602
|
liveboardId: 'myLiveboardId',
|
|
1602
1603
|
preRenderId: 'test',
|
|
1603
1604
|
});
|
|
1604
1605
|
await libEmbed.syncPreRenderStyle();
|
|
1605
|
-
expect(
|
|
1606
|
+
expect(logger.error).toBeCalledWith(
|
|
1606
1607
|
'PreRender should be called before using syncPreRenderStyle',
|
|
1607
1608
|
);
|
|
1608
|
-
(
|
|
1609
|
+
(logger.error as any).mockClear();
|
|
1609
1610
|
});
|
|
1610
1611
|
});
|
|
1611
1612
|
});
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import isEqual from 'lodash/isEqual';
|
|
11
|
+
import { logger } from '../utils/logger';
|
|
11
12
|
import { getAuthenticationToken } from '../authToken';
|
|
12
13
|
import { AnswerService } from '../utils/graphql/answerService/answerService';
|
|
13
14
|
import {
|
|
@@ -198,7 +199,7 @@ export class TsEmbed {
|
|
|
198
199
|
error,
|
|
199
200
|
});
|
|
200
201
|
// Log error
|
|
201
|
-
|
|
202
|
+
logger.error(error);
|
|
202
203
|
}
|
|
203
204
|
|
|
204
205
|
/**
|
|
@@ -282,7 +283,7 @@ export class TsEmbed {
|
|
|
282
283
|
this.executeCallbacks(EmbedEvent.Error, {
|
|
283
284
|
offlineWarning,
|
|
284
285
|
});
|
|
285
|
-
|
|
286
|
+
logger.warn(offlineWarning);
|
|
286
287
|
};
|
|
287
288
|
window.addEventListener('offline', offlineEventListener);
|
|
288
289
|
|
|
@@ -502,6 +503,9 @@ export class TsEmbed {
|
|
|
502
503
|
queryParams[Param.ShowInsertToSlide] = insertInToSlide;
|
|
503
504
|
}
|
|
504
505
|
|
|
506
|
+
queryParams[Param.OverrideNativeConsole] = true;
|
|
507
|
+
queryParams[Param.ClientLogLevel] = this.embedConfig.logLevel;
|
|
508
|
+
|
|
505
509
|
return queryParams;
|
|
506
510
|
}
|
|
507
511
|
|
|
@@ -952,10 +956,10 @@ export class TsEmbed {
|
|
|
952
956
|
});
|
|
953
957
|
} catch (e) {
|
|
954
958
|
eventPort.postMessage({ error: e });
|
|
955
|
-
|
|
959
|
+
logger.log(e);
|
|
956
960
|
}
|
|
957
961
|
} else {
|
|
958
|
-
|
|
962
|
+
logger.log('Event Port is not defined');
|
|
959
963
|
}
|
|
960
964
|
}
|
|
961
965
|
|
|
@@ -983,10 +987,6 @@ export class TsEmbed {
|
|
|
983
987
|
return this;
|
|
984
988
|
}
|
|
985
989
|
|
|
986
|
-
public getIframeSrc(): string {
|
|
987
|
-
return '';
|
|
988
|
-
}
|
|
989
|
-
|
|
990
990
|
protected handleRenderForPrerender() {
|
|
991
991
|
this.render();
|
|
992
992
|
}
|
|
@@ -998,7 +998,7 @@ export class TsEmbed {
|
|
|
998
998
|
*/
|
|
999
999
|
public preRender(showPreRenderByDefault = false): TsEmbed {
|
|
1000
1000
|
if (!this.viewConfig.preRenderId) {
|
|
1001
|
-
|
|
1001
|
+
logger.error('PreRender id is required for preRender');
|
|
1002
1002
|
return this;
|
|
1003
1003
|
}
|
|
1004
1004
|
this.isPreRendered = true;
|
|
@@ -1047,7 +1047,7 @@ export class TsEmbed {
|
|
|
1047
1047
|
this.insertedDomEl?.parentNode.removeChild(this.insertedDomEl);
|
|
1048
1048
|
this.unsubscribeToEvents();
|
|
1049
1049
|
} catch (e) {
|
|
1050
|
-
|
|
1050
|
+
logger.log('Error destroying TS Embed', e);
|
|
1051
1051
|
}
|
|
1052
1052
|
}
|
|
1053
1053
|
|
|
@@ -1087,13 +1087,13 @@ export class TsEmbed {
|
|
|
1087
1087
|
!isUndefined(viewConfig[key])
|
|
1088
1088
|
&& !isEqual(viewConfig[key], preRenderedObject.viewConfig[key])
|
|
1089
1089
|
) {
|
|
1090
|
-
|
|
1090
|
+
logger.warn(
|
|
1091
1091
|
`${this.embedComponentType} was pre-rendered with `
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1092
|
+
+ `"${key}" as "${JSON.stringify(preRenderedObject.viewConfig[key])}" `
|
|
1093
|
+
+ `but a different value "${JSON.stringify(viewConfig[key])}" `
|
|
1094
|
+
+ 'was passed to the Embed component. '
|
|
1095
|
+
+ 'The new value provided is ignored, the value provided during '
|
|
1096
|
+
+ 'preRender is used.',
|
|
1097
1097
|
);
|
|
1098
1098
|
}
|
|
1099
1099
|
});
|
|
@@ -1108,7 +1108,7 @@ export class TsEmbed {
|
|
|
1108
1108
|
*/
|
|
1109
1109
|
public showPreRender(): void {
|
|
1110
1110
|
if (!this.viewConfig.preRenderId) {
|
|
1111
|
-
|
|
1111
|
+
logger.error('PreRender id is required for preRender');
|
|
1112
1112
|
return;
|
|
1113
1113
|
}
|
|
1114
1114
|
if (!this.isPreRenderAvailable()) {
|
|
@@ -1157,7 +1157,7 @@ export class TsEmbed {
|
|
|
1157
1157
|
*/
|
|
1158
1158
|
public syncPreRenderStyle(): void {
|
|
1159
1159
|
if (!this.isPreRenderAvailable() || !this.el) {
|
|
1160
|
-
|
|
1160
|
+
logger.error('PreRender should be called before using syncPreRenderStyle');
|
|
1161
1161
|
return;
|
|
1162
1162
|
}
|
|
1163
1163
|
const elBoundingClient = this.el.getBoundingClientRect();
|
|
@@ -1177,7 +1177,7 @@ export class TsEmbed {
|
|
|
1177
1177
|
public hidePreRender(): void {
|
|
1178
1178
|
if (!this.isPreRenderAvailable()) {
|
|
1179
1179
|
// if the embed component is not preRendered , nothing to hide
|
|
1180
|
-
|
|
1180
|
+
logger.warn('PreRender should be called before hiding it using hidePreRender.');
|
|
1181
1181
|
return;
|
|
1182
1182
|
}
|
|
1183
1183
|
const preRenderHideStyles = {
|
package/src/index.ts
CHANGED
|
@@ -45,6 +45,7 @@ import {
|
|
|
45
45
|
customCssInterface,
|
|
46
46
|
ContextMenuTriggerOptions,
|
|
47
47
|
RuntimeParameter,
|
|
48
|
+
LogLevel,
|
|
48
49
|
} from './types';
|
|
49
50
|
import { CustomCssVariables } from './css-variables';
|
|
50
51
|
import { SageEmbed, SageViewConfig } from './embed/sage';
|
|
@@ -101,4 +102,5 @@ export {
|
|
|
101
102
|
customCssInterface,
|
|
102
103
|
CustomCssVariables,
|
|
103
104
|
RuntimeParameter,
|
|
105
|
+
LogLevel,
|
|
104
106
|
};
|
package/src/mixpanel-service.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as mixpanel from 'mixpanel-browser';
|
|
2
|
+
import { logger } from './utils/logger';
|
|
2
3
|
|
|
3
4
|
export const EndPoints = {
|
|
4
5
|
CONFIG: '/callosum/v1/system/config',
|
|
@@ -77,7 +78,7 @@ export function initMixpanel(sessionInfo: any): void {
|
|
|
77
78
|
emptyQueue();
|
|
78
79
|
}
|
|
79
80
|
} catch (e) {
|
|
80
|
-
|
|
81
|
+
logger.error('Error initializing mixpanel', e);
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
|
package/src/react/index.spec.tsx
CHANGED
|
@@ -49,7 +49,7 @@ describe('React Components', () => {
|
|
|
49
49
|
),
|
|
50
50
|
).toBe(true);
|
|
51
51
|
expect(getIFrameSrc(container)).toBe(
|
|
52
|
-
`http://${thoughtSpotHost}/?hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=None&blockNonEmbedFullAppAccess=true&hideAction=[%22${Action.ReportError}%22,%22editACopy%22,%22saveAsView%22,%22updateTSL%22,%22editTSL%22,%22onDeleteAnswer%22]&enableDataPanelV2=false&dataSourceMode=hide&useLastSelectedSources=false&isSearchEmbed=true#/embed/answer`,
|
|
52
|
+
`http://${thoughtSpotHost}/?hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=None&blockNonEmbedFullAppAccess=true&hideAction=[%22${Action.ReportError}%22,%22editACopy%22,%22saveAsView%22,%22updateTSL%22,%22editTSL%22,%22onDeleteAnswer%22]&overrideConsoleLogs=true&clientLogLevel=ERROR&enableDataPanelV2=false&dataSourceMode=hide&useLastSelectedSources=false&isSearchEmbed=true#/embed/answer`,
|
|
53
53
|
);
|
|
54
54
|
});
|
|
55
55
|
|
|
@@ -222,7 +222,7 @@ describe('React Components', () => {
|
|
|
222
222
|
),
|
|
223
223
|
).toBe(true);
|
|
224
224
|
expect(getIFrameSrc(container)).toBe(
|
|
225
|
-
`http://${thoughtSpotHost}/?hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=None&blockNonEmbedFullAppAccess=true&hideAction=[%22${Action.ReportError}%22]&dataSources=[%22test%22]&searchTokenString=%5Brevenue%5D&executeSearch=true&useLastSelectedSources=false&isSearchEmbed=true#/embed/search-bar-embed`,
|
|
225
|
+
`http://${thoughtSpotHost}/?hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=None&blockNonEmbedFullAppAccess=true&hideAction=[%22${Action.ReportError}%22]&overrideConsoleLogs=true&clientLogLevel=ERROR&dataSources=[%22test%22]&searchTokenString=%5Brevenue%5D&executeSearch=true&useLastSelectedSources=false&isSearchEmbed=true#/embed/search-bar-embed`,
|
|
226
226
|
);
|
|
227
227
|
});
|
|
228
228
|
});
|
package/src/types.ts
CHANGED
|
@@ -546,6 +546,21 @@ export interface EmbedConfig {
|
|
|
546
546
|
* @version SDK: 1.26.2 | ThoughtSpot: *
|
|
547
547
|
*/
|
|
548
548
|
suppressErrorAlerts?: boolean;
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Log level for the SDK.
|
|
552
|
+
* @default LogLevel.ERROR
|
|
553
|
+
*
|
|
554
|
+
* @example
|
|
555
|
+
* ```js
|
|
556
|
+
* init({
|
|
557
|
+
* ...embedConfig,
|
|
558
|
+
* logLevel: LogLevel.SILENT
|
|
559
|
+
* })
|
|
560
|
+
* ```
|
|
561
|
+
* @version SDK: 1.26.3 | ThoughtSpot: 9.10.0.cl
|
|
562
|
+
*/
|
|
563
|
+
logLevel?: LogLevel;
|
|
549
564
|
}
|
|
550
565
|
|
|
551
566
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
@@ -2817,6 +2832,8 @@ export enum Param {
|
|
|
2817
2832
|
HideSearchBarTitle = 'hideSearchBarTitle',
|
|
2818
2833
|
HideSageAnswerHeader = 'hideSageAnswerHeader',
|
|
2819
2834
|
HideSearchBar = 'hideSearchBar',
|
|
2835
|
+
ClientLogLevel = 'clientLogLevel',
|
|
2836
|
+
OverrideNativeConsole = 'overrideConsoleLogs',
|
|
2820
2837
|
}
|
|
2821
2838
|
|
|
2822
2839
|
/**
|
|
@@ -3745,3 +3762,12 @@ export interface CustomActionPayload {
|
|
|
3745
3762
|
session: SessionInterface;
|
|
3746
3763
|
vizId?: string;
|
|
3747
3764
|
}
|
|
3765
|
+
|
|
3766
|
+
export enum LogLevel {
|
|
3767
|
+
SILENT = 'SILENT',
|
|
3768
|
+
ERROR = 'ERROR',
|
|
3769
|
+
WARN = 'WARN',
|
|
3770
|
+
INFO = 'INFO',
|
|
3771
|
+
DEBUG = 'DEBUG',
|
|
3772
|
+
TRACE = 'TRACE',
|
|
3773
|
+
}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
verifyTokenService,
|
|
8
8
|
EndPoints,
|
|
9
9
|
} from '.';
|
|
10
|
+
import { logger } from '../logger';
|
|
10
11
|
|
|
11
12
|
const thoughtSpotHost = 'http://10.79.135.124:3000';
|
|
12
13
|
|
|
@@ -74,14 +75,14 @@ describe('Unit test for authService', () => {
|
|
|
74
75
|
});
|
|
75
76
|
|
|
76
77
|
test('log error on API failures', async () => {
|
|
77
|
-
jest.spyOn(
|
|
78
|
+
jest.spyOn(logger, 'error').mockImplementation(() => undefined);
|
|
78
79
|
global.fetch = jest.fn(() => Promise.resolve({
|
|
79
80
|
text: () => Promise.resolve('error'),
|
|
80
81
|
status: 500,
|
|
81
82
|
ok: false,
|
|
82
83
|
}));
|
|
83
84
|
await fetchSessionInfoService(authVerificationUrl);
|
|
84
|
-
expect(
|
|
85
|
+
expect(logger.error).toHaveBeenCalledWith('Failure', 'error');
|
|
85
86
|
});
|
|
86
87
|
|
|
87
88
|
test('verifyTokenService', async () => {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { logger } from '../logger';
|
|
2
|
+
|
|
1
3
|
export const EndPoints = {
|
|
2
4
|
AUTH_VERIFICATION: '/callosum/v1/session/info',
|
|
3
5
|
SAML_LOGIN_TEMPLATE: (targetUrl: string) => `/callosum/v1/saml/login?targetURLPath=${targetUrl}`,
|
|
@@ -18,7 +20,7 @@ export const EndPoints = {
|
|
|
18
20
|
function failureLoggedFetch(url: string, options: RequestInit = {}): Promise<Response> {
|
|
19
21
|
return fetch(url, options).then(async (r) => {
|
|
20
22
|
if (!r.ok && r.type !== 'opaqueredirect' && r.type !== 'opaque') {
|
|
21
|
-
|
|
23
|
+
logger.error('Failure', await r.text?.());
|
|
22
24
|
}
|
|
23
25
|
return r;
|
|
24
26
|
});
|
|
@@ -45,7 +47,7 @@ export async function verifyTokenService(
|
|
|
45
47
|
});
|
|
46
48
|
return res.ok;
|
|
47
49
|
} catch (e) {
|
|
48
|
-
|
|
50
|
+
logger.error(`Token Verification Service failed : ${e.message}`);
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
return false;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { tokenizedFetch } from '../../tokenizedFetch';
|
|
2
|
+
import { logger } from '../logger';
|
|
2
3
|
import { EndPoints } from './authService';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -9,7 +10,7 @@ import { EndPoints } from './authService';
|
|
|
9
10
|
function tokenisedFailureLoggedFetch(url: string, options: RequestInit = {}): Promise<Response> {
|
|
10
11
|
return tokenizedFetch(url, options).then(async (r) => {
|
|
11
12
|
if (!r.ok && r.type !== 'opaqueredirect' && r.type !== 'opaque') {
|
|
12
|
-
|
|
13
|
+
logger.error('Failure', await r.text?.());
|
|
13
14
|
}
|
|
14
15
|
return r;
|
|
15
16
|
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
let logger: any;
|
|
2
|
+
let LogLevel: any;
|
|
3
|
+
let setGlobalLogLevelOverride: any;
|
|
4
|
+
|
|
5
|
+
const consoleErrorSpy = jest.spyOn(console, 'error');
|
|
6
|
+
const consoleWarnSpy = jest.spyOn(console, 'warn');
|
|
7
|
+
const consoleInfoSpy = jest.spyOn(console, 'info');
|
|
8
|
+
const consoleDebugSpy = jest.spyOn(console, 'debug');
|
|
9
|
+
const consoleTraceSpy = jest.spyOn(console, 'trace');
|
|
10
|
+
|
|
11
|
+
describe('Logger', () => {
|
|
12
|
+
beforeAll(async () => {
|
|
13
|
+
const a = await import('./logger');
|
|
14
|
+
logger = a.logger;
|
|
15
|
+
LogLevel = a.LogLevel;
|
|
16
|
+
setGlobalLogLevelOverride = a.setGlobalLogLevelOverride;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
// Reset the logger's log level before each test
|
|
21
|
+
setGlobalLogLevelOverride(LogLevel.TRACE);
|
|
22
|
+
logger.setLogLevel(LogLevel.ERROR);
|
|
23
|
+
|
|
24
|
+
consoleErrorSpy.mockRestore();
|
|
25
|
+
consoleWarnSpy.mockRestore();
|
|
26
|
+
consoleInfoSpy.mockRestore();
|
|
27
|
+
consoleDebugSpy.mockRestore();
|
|
28
|
+
consoleTraceSpy.mockRestore();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should set the log level correctly', () => {
|
|
32
|
+
logger.setLogLevel(LogLevel.INFO);
|
|
33
|
+
expect(logger.getLogLevel()).toBe(LogLevel.INFO);
|
|
34
|
+
|
|
35
|
+
logger.setLogLevel(LogLevel.DEBUG);
|
|
36
|
+
expect(logger.getLogLevel()).toBe(LogLevel.DEBUG);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('should log messages based on the log level', () => {
|
|
40
|
+
logger.setLogLevel(LogLevel.ERROR);
|
|
41
|
+
logger.error('Error message');
|
|
42
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith('Error message');
|
|
43
|
+
|
|
44
|
+
logger.warn('Warning message');
|
|
45
|
+
expect(consoleTraceSpy).not.toHaveBeenCalled();
|
|
46
|
+
|
|
47
|
+
logger.setLogLevel(LogLevel.WARN);
|
|
48
|
+
logger.error('Warning message');
|
|
49
|
+
logger.warn('Warning message');
|
|
50
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith('Warning message');
|
|
51
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith('Warning message');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('should log messages with the global log level override', () => {
|
|
55
|
+
setGlobalLogLevelOverride(LogLevel.WARN);
|
|
56
|
+
|
|
57
|
+
logger.error('Error message');
|
|
58
|
+
logger.warn('Warn message');
|
|
59
|
+
logger.info('Info message');
|
|
60
|
+
logger.trace('Trace message');
|
|
61
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith('Error message');
|
|
62
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith('Warn message');
|
|
63
|
+
expect(consoleInfoSpy).not.toHaveBeenCalled();
|
|
64
|
+
expect(consoleDebugSpy).not.toHaveBeenCalled();
|
|
65
|
+
expect(consoleTraceSpy).not.toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { isUndefined, noop } from 'lodash';
|
|
2
|
+
import { LogLevel } from '../types';
|
|
3
|
+
|
|
4
|
+
const logFunctions: {
|
|
5
|
+
[key: string]: (...args: any[]) => void;
|
|
6
|
+
} = {
|
|
7
|
+
[LogLevel.SILENT]: noop,
|
|
8
|
+
[LogLevel.ERROR]: console.error,
|
|
9
|
+
[LogLevel.WARN]: console.warn,
|
|
10
|
+
[LogLevel.INFO]: console.info,
|
|
11
|
+
[LogLevel.DEBUG]: console.debug,
|
|
12
|
+
[LogLevel.TRACE]: console.trace,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
let globalLogLevelOverride: LogLevel = LogLevel.TRACE;
|
|
16
|
+
const setGlobalLogLevelOverride = (logLevel: LogLevel): void => {
|
|
17
|
+
globalLogLevelOverride = logLevel;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const logLevelToNumber: { [key: string]: number } = {
|
|
21
|
+
[LogLevel.SILENT]: 0,
|
|
22
|
+
[LogLevel.ERROR]: 1,
|
|
23
|
+
[LogLevel.WARN]: 2,
|
|
24
|
+
[LogLevel.INFO]: 3,
|
|
25
|
+
[LogLevel.DEBUG]: 4,
|
|
26
|
+
[LogLevel.TRACE]: 5,
|
|
27
|
+
};
|
|
28
|
+
const compareLogLevels = (logLevel1: LogLevel, logLevel2: LogLevel): number => {
|
|
29
|
+
const logLevel1Index = logLevelToNumber[logLevel1];
|
|
30
|
+
const logLevel2Index = logLevelToNumber[logLevel2];
|
|
31
|
+
return logLevel1Index - logLevel2Index;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
class Logger {
|
|
35
|
+
private logLevel: LogLevel = LogLevel.ERROR;
|
|
36
|
+
|
|
37
|
+
public setLogLevel = (newLogLevel: LogLevel): void => {
|
|
38
|
+
this.logLevel = newLogLevel;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
public getLogLevel = (): LogLevel => this.logLevel;
|
|
42
|
+
|
|
43
|
+
public canLog(logLevel: LogLevel): boolean {
|
|
44
|
+
if (logLevel === LogLevel.SILENT) return false;
|
|
45
|
+
if (!isUndefined(globalLogLevelOverride)) {
|
|
46
|
+
return compareLogLevels(globalLogLevelOverride, logLevel) >= 0;
|
|
47
|
+
}
|
|
48
|
+
return compareLogLevels(this.logLevel, logLevel) >= 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public logMessages(args: any[], logLevel: LogLevel): void {
|
|
52
|
+
if (this.canLog(logLevel)) {
|
|
53
|
+
const logFn = logFunctions[logLevel];
|
|
54
|
+
if (logFn) {
|
|
55
|
+
logFn(...args);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public log(...args: any[]): void {
|
|
61
|
+
this.info(args);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public info(...args: any[]): void {
|
|
65
|
+
this.logMessages(args, LogLevel.INFO);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public debug(...args: any[]): void {
|
|
69
|
+
this.logMessages(args, LogLevel.DEBUG);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public trace(...args: any[]): void {
|
|
73
|
+
this.logMessages(args, LogLevel.TRACE);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public error(...args: any[]): void {
|
|
77
|
+
this.logMessages(args, LogLevel.ERROR);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public warn(...args: any[]): void {
|
|
81
|
+
this.logMessages(args, LogLevel.WARN);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const logger = new Logger();
|
|
86
|
+
|
|
87
|
+
export { LogLevel, logger, setGlobalLogLevelOverride };
|