@thoughtspot/ts-chart-sdk 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/ts-chart-sdk.d.ts +312 -0
  2. package/lib/dist/ts-chart-sdk.d.ts +312 -0
  3. package/lib/index.d.ts +8 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.js +8 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/main/custom-chart-context.d.ts +38 -0
  8. package/lib/main/custom-chart-context.d.ts.map +1 -0
  9. package/lib/main/custom-chart-context.js +176 -0
  10. package/lib/main/custom-chart-context.js.map +1 -0
  11. package/lib/main/custom-chart-context.spec.d.ts +2 -0
  12. package/lib/main/custom-chart-context.spec.d.ts.map +1 -0
  13. package/lib/main/custom-chart-context.spec.js +315 -0
  14. package/lib/main/custom-chart-context.spec.js.map +1 -0
  15. package/lib/main/post-message-event-bridge.d.ts +6 -0
  16. package/lib/main/post-message-event-bridge.d.ts.map +1 -0
  17. package/lib/main/post-message-event-bridge.js +41 -0
  18. package/lib/main/post-message-event-bridge.js.map +1 -0
  19. package/lib/main/post-message-event-bridge.spec.d.ts +2 -0
  20. package/lib/main/post-message-event-bridge.spec.d.ts.map +1 -0
  21. package/lib/main/post-message-event-bridge.spec.js +117 -0
  22. package/lib/main/post-message-event-bridge.spec.js.map +1 -0
  23. package/lib/test/test-utils.d.ts +7 -0
  24. package/lib/test/test-utils.d.ts.map +1 -0
  25. package/lib/test/test-utils.js +11 -0
  26. package/lib/test/test-utils.js.map +1 -0
  27. package/lib/types/answer-column.types.d.ts +69 -0
  28. package/lib/types/answer-column.types.d.ts.map +1 -0
  29. package/lib/types/answer-column.types.js +56 -0
  30. package/lib/types/answer-column.types.js.map +1 -0
  31. package/lib/types/chart-to-ts-event.types.d.ts +48 -0
  32. package/lib/types/chart-to-ts-event.types.d.ts.map +1 -0
  33. package/lib/types/chart-to-ts-event.types.js +16 -0
  34. package/lib/types/chart-to-ts-event.types.js.map +1 -0
  35. package/lib/types/common.types.d.ts +51 -0
  36. package/lib/types/common.types.d.ts.map +1 -0
  37. package/lib/types/common.types.js +2 -0
  38. package/lib/types/common.types.js.map +1 -0
  39. package/lib/types/configurator.types.d.ts +15 -0
  40. package/lib/types/configurator.types.d.ts.map +1 -0
  41. package/lib/types/configurator.types.js +2 -0
  42. package/lib/types/configurator.types.js.map +1 -0
  43. package/lib/types/ts-to-chart-event.types.d.ts +67 -0
  44. package/lib/types/ts-to-chart-event.types.d.ts.map +1 -0
  45. package/lib/types/ts-to-chart-event.types.js +12 -0
  46. package/lib/types/ts-to-chart-event.types.js.map +1 -0
  47. package/lib/types/visual-prop.types.d.ts +47 -0
  48. package/lib/types/visual-prop.types.d.ts.map +1 -0
  49. package/lib/types/visual-prop.types.js +2 -0
  50. package/lib/types/visual-prop.types.js.map +1 -0
  51. package/package.json +88 -0
  52. package/src/index.ts +7 -0
  53. package/src/main/custom-chart-context.spec.ts +432 -0
  54. package/src/main/custom-chart-context.ts +587 -0
  55. package/src/main/post-message-event-bridge.spec.ts +215 -0
  56. package/src/main/post-message-event-bridge.ts +88 -0
  57. package/src/test/test-utils.ts +13 -0
  58. package/src/types/answer-column.types.ts +174 -0
  59. package/src/types/chart-to-ts-event.types.ts +159 -0
  60. package/src/types/common.types.ts +187 -0
  61. package/src/types/configurator.types.ts +102 -0
  62. package/src/types/ts-to-chart-event.types.ts +257 -0
  63. package/src/types/visual-prop.types.ts +271 -0
@@ -0,0 +1,176 @@
1
+ import _ from 'lodash';
2
+ import { ErrorType, } from '../types/chart-to-ts-event.types';
3
+ import { TSToChartEvent, } from '../types/ts-to-chart-event.types';
4
+ import * as PostMessageEventBridge from './post-message-event-bridge';
5
+ let isInitialized = false;
6
+ const DEFAULT_CHART_CONTEXT_PROPS = {
7
+ validateConfig: () => ({ isValid: true }),
8
+ validateVisualProps: () => ({ isValid: true }),
9
+ chartConfigEditorDefinition: undefined,
10
+ visualPropEditorDefinition: undefined,
11
+ };
12
+ export class CustomChartContext {
13
+ constructor(chartContextProps) {
14
+ this.componentId = '';
15
+ this.hostUrl = '';
16
+ this.chartModel = {};
17
+ this.chartContextProps = DEFAULT_CHART_CONTEXT_PROPS;
18
+ this.eventListeners = {};
19
+ this.triggerInitResolve = _.noop;
20
+ this.initialize = () => {
21
+ console.log('Chart Context: initialization start');
22
+ return this.hasInitializedPromise;
23
+ };
24
+ this.getChartModel = () => this.chartModel;
25
+ this.registerEventProcessor = () => {
26
+ if (isInitialized) {
27
+ console.error('The context is already initialized. you cannot have multiple contexts');
28
+ throw new Error(ErrorType.MultipleContextsNotSupported);
29
+ }
30
+ PostMessageEventBridge.initMessageListener(this.eventProcessor);
31
+ this.registerEvents();
32
+ };
33
+ this.eventProcessor = (event) => {
34
+ if (event.data.source !== 'ts-host-app') {
35
+ return;
36
+ }
37
+ console.log('Chart Context: message received:', event.data.eventType, event.data);
38
+ const messageResponse = this.executeEventListenerCBs(event);
39
+ if (!_.isNil(event.ports[0])) {
40
+ if (!_.isNil(messageResponse)) {
41
+ event.ports[0].postMessage({
42
+ ...messageResponse,
43
+ });
44
+ }
45
+ else {
46
+ event.ports[0].postMessage({});
47
+ }
48
+ }
49
+ };
50
+ this.registerEvents = () => {
51
+ this.onInternal(TSToChartEvent.Initialize, (payload) => this.initializeContext(payload));
52
+ this.onInternal(TSToChartEvent.VisualPropsValidate, (payload) => {
53
+ if (this.chartContextProps.validateVisualProps) {
54
+ const validationResponse = this.chartContextProps.validateVisualProps(payload.visualProps, this.chartModel);
55
+ return validationResponse;
56
+ }
57
+ return { isValid: false };
58
+ });
59
+ this.onInternal(TSToChartEvent.ChartConfigValidate, (payload) => {
60
+ if (this.chartContextProps.validateConfig) {
61
+ const validationResponse = this.chartContextProps.validateConfig(payload.chartConfig, this.chartModel);
62
+ return validationResponse;
63
+ }
64
+ return { isValid: false };
65
+ });
66
+ this.onInternal(TSToChartEvent.GetDataQuery, (payload) => {
67
+ const queries = this.chartContextProps.getQueriesFromChartConfig(payload.config);
68
+ return {
69
+ queries,
70
+ };
71
+ });
72
+ this.onInternal(TSToChartEvent.TriggerRenderChart, async () => {
73
+ await this.chartContextProps.renderChart(this);
74
+ });
75
+ this.on(TSToChartEvent.ChartModelUpdate, (payload) => {
76
+ this.chartModel = payload.chartModel;
77
+ return {
78
+ triggerRenderChart: true,
79
+ };
80
+ });
81
+ this.on(TSToChartEvent.DataUpdate, (payload) => {
82
+ this.chartModel.data = payload.data;
83
+ return {
84
+ triggerRenderChart: true,
85
+ };
86
+ });
87
+ this.on(TSToChartEvent.VisualPropsUpdate, (payload) => {
88
+ this.chartModel.visualProps = payload.visualProps;
89
+ return {
90
+ triggerRenderChart: true,
91
+ };
92
+ });
93
+ };
94
+ this.initializeContext = (payload) => {
95
+ this.componentId = payload.componentId;
96
+ this.hostUrl = payload.hostUrl;
97
+ this.chartModel = payload.chartModel;
98
+ isInitialized = true;
99
+ this.triggerInitResolve();
100
+ return this.publishChartContextPropsToHost();
101
+ };
102
+ this.publishChartContextPropsToHost = () => {
103
+ var _a;
104
+ const hasChartConfig = !_.isEmpty(this.chartModel.config.chartConfig);
105
+ const { isValid } = hasChartConfig && this.chartContextProps.validateConfig
106
+ ? this.chartContextProps.validateConfig((_a = this.chartModel.config.chartConfig) !== null && _a !== void 0 ? _a : [], this.chartModel)
107
+ : { isValid: false };
108
+ let defaultChartConfig = [];
109
+ if (!isValid) {
110
+ defaultChartConfig =
111
+ this.chartContextProps.getDefaultChartConfig(this.chartModel);
112
+ }
113
+ return {
114
+ isConfigValid: isValid,
115
+ defaultChartConfig,
116
+ chartConfigEditorDefinition: this.chartContextProps.chartConfigEditorDefinition,
117
+ visualPropEditorDefinition: this.chartContextProps.visualPropEditorDefinition,
118
+ };
119
+ };
120
+ this.executeEventListenerCBs = (event) => {
121
+ var _a;
122
+ const payload = event.data.payload;
123
+ let response;
124
+ if (_.isArray(this.eventListeners[event.data.eventType])) {
125
+ this.eventListeners[event.data.eventType].forEach((callback) => {
126
+ response = callback(payload);
127
+ });
128
+ }
129
+ else {
130
+ response = {
131
+ hasError: true,
132
+ error: `Event type not recognised or processed: ${event.data.eventType}`,
133
+ };
134
+ }
135
+ console.log('ChartContext: Response:', event.data.eventType, response, (_a = this.eventListeners[event.data.eventType]) === null || _a === void 0 ? void 0 : _a.length);
136
+ return response;
137
+ };
138
+ this.chartContextProps = {
139
+ ...DEFAULT_CHART_CONTEXT_PROPS,
140
+ ...chartContextProps,
141
+ };
142
+ this.registerEventProcessor();
143
+ this.hasInitializedPromise = new Promise((resolve) => {
144
+ this.triggerInitResolve = resolve;
145
+ });
146
+ }
147
+ on(eventType, callbackFn) {
148
+ if (_.isNil(this.eventListeners[eventType])) {
149
+ this.eventListeners[eventType] = [];
150
+ }
151
+ this.eventListeners[eventType].push(callbackFn);
152
+ }
153
+ onInternal(eventType, callbackFn) {
154
+ if (_.isNil(this.eventListeners[eventType])) {
155
+ this.eventListeners[eventType] = [];
156
+ }
157
+ this.eventListeners[eventType].push(callbackFn);
158
+ }
159
+ destroy() {
160
+ PostMessageEventBridge.destroyMessageListener(this.eventProcessor);
161
+ isInitialized = false;
162
+ }
163
+ emitEvent(eventType, eventPayload) {
164
+ if (!isInitialized) {
165
+ console.log('Chart Context: not initialized the context, something went wrong');
166
+ return Promise.reject();
167
+ }
168
+ return PostMessageEventBridge.postMessageToHostApp(this.componentId, this.hostUrl, eventPayload, eventType);
169
+ }
170
+ }
171
+ export const getChartContext = async (customChartConfig) => {
172
+ const ctx = new CustomChartContext(customChartConfig);
173
+ await ctx.initialize();
174
+ return ctx;
175
+ };
176
+ //# sourceMappingURL=custom-chart-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-chart-context.js","sourceRoot":"","sources":["../../src/main/custom-chart-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=custom-chart-context.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-chart-context.spec.d.ts","sourceRoot":"","sources":["../../src/main/custom-chart-context.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,315 @@
1
+ import { mockInitializeContextPayload } from '../test/test-utils';
2
+ import { ErrorType } from '../types/chart-to-ts-event.types';
3
+ import { TSToChartEvent } from '../types/ts-to-chart-event.types';
4
+ import { CustomChartContext, getChartContext } from './custom-chart-context';
5
+ import * as PostMessageEventBridge from './post-message-event-bridge';
6
+ jest.mock('./post-message-event-bridge');
7
+ jest.spyOn(console, 'log').mockImplementation(() => {
8
+ });
9
+ describe('CustomChartContext', () => {
10
+ let eventProcesor;
11
+ let getDefaultChartConfig = jest.fn();
12
+ let getQueriesFromChartConfig = jest.fn();
13
+ let renderChart = jest.fn();
14
+ const mockInitMessage = jest.spyOn(PostMessageEventBridge, 'initMessageListener');
15
+ const mockPostMessageToHost = jest.spyOn(PostMessageEventBridge, 'postMessageToHostApp');
16
+ beforeEach(() => {
17
+ getDefaultChartConfig = jest.fn();
18
+ getQueriesFromChartConfig = jest.fn();
19
+ renderChart = jest.fn();
20
+ mockInitMessage.mockImplementation((fn) => {
21
+ eventProcesor = fn;
22
+ });
23
+ });
24
+ describe('initialize', () => {
25
+ let customChartContext;
26
+ beforeEach(() => {
27
+ customChartContext = new CustomChartContext({
28
+ getDefaultChartConfig,
29
+ getQueriesFromChartConfig,
30
+ renderChart,
31
+ });
32
+ });
33
+ afterEach(() => {
34
+ customChartContext.destroy();
35
+ jest.resetAllMocks();
36
+ eventProcesor = null;
37
+ });
38
+ test('should wait till the parent calls initialize', async () => {
39
+ expect(mockInitMessage).toHaveBeenCalled();
40
+ const promise = customChartContext.initialize();
41
+ const rej = jest.fn();
42
+ const res = jest.fn();
43
+ promise.then(() => rej()).catch(() => res());
44
+ await new global.Promise((resolve) => {
45
+ setTimeout(() => resolve(null), 3000);
46
+ });
47
+ expect(rej).not.toHaveBeenCalled();
48
+ expect(res).not.toHaveBeenCalled();
49
+ });
50
+ test('should return a promise that resolves when the chart context is initialized', async () => {
51
+ expect(mockInitMessage).toHaveBeenCalled();
52
+ const promise = customChartContext.initialize();
53
+ const mockPostMessage = jest.fn();
54
+ eventProcesor({
55
+ data: {
56
+ payload: mockInitializeContextPayload,
57
+ eventType: TSToChartEvent.Initialize,
58
+ source: 'ts-host-app',
59
+ },
60
+ ports: [{ postMessage: mockPostMessage }],
61
+ });
62
+ await expect(promise).resolves.toBeUndefined();
63
+ expect(mockPostMessage).toHaveBeenCalledWith({
64
+ isConfigValid: false,
65
+ defaultChartConfig: undefined,
66
+ chartConfigEditorDefinition: undefined,
67
+ visualPropEditorDefinition: undefined,
68
+ });
69
+ expect(mockPostMessage).toHaveBeenCalled();
70
+ expect(mockPostMessageToHost).not.toHaveBeenCalled();
71
+ });
72
+ test('multiple intializations should throw an error', async () => {
73
+ const promise = customChartContext.initialize();
74
+ const mockPostMessage = jest.fn();
75
+ eventProcesor({
76
+ data: {
77
+ payload: mockInitializeContextPayload,
78
+ eventType: TSToChartEvent.Initialize,
79
+ source: 'ts-host-app',
80
+ },
81
+ ports: [{ postMessage: mockPostMessage }],
82
+ });
83
+ await expect(promise).resolves.toBeUndefined();
84
+ let error;
85
+ try {
86
+ customChartContext = new CustomChartContext({
87
+ getDefaultChartConfig,
88
+ getQueriesFromChartConfig,
89
+ renderChart,
90
+ });
91
+ }
92
+ catch (err) {
93
+ error = err.message;
94
+ }
95
+ expect(error).toBe(ErrorType.MultipleContextsNotSupported);
96
+ try {
97
+ await getChartContext({
98
+ getDefaultChartConfig,
99
+ getQueriesFromChartConfig,
100
+ renderChart,
101
+ });
102
+ }
103
+ catch (err) {
104
+ error = err.message;
105
+ }
106
+ expect(error).toBe(ErrorType.MultipleContextsNotSupported);
107
+ });
108
+ });
109
+ describe('on', () => {
110
+ let customChartContext;
111
+ beforeEach(() => {
112
+ customChartContext = new CustomChartContext({
113
+ getDefaultChartConfig,
114
+ getQueriesFromChartConfig,
115
+ renderChart,
116
+ });
117
+ });
118
+ afterEach(() => {
119
+ jest.resetAllMocks();
120
+ customChartContext.destroy();
121
+ eventProcesor = null;
122
+ });
123
+ test('should not trigger post message if host is not accurate', () => {
124
+ expect(mockInitMessage).toHaveBeenCalled();
125
+ const mockPostMessage = jest.fn();
126
+ eventProcesor({
127
+ data: {
128
+ payload: mockInitializeContextPayload,
129
+ eventType: TSToChartEvent.ChartConfigValidate,
130
+ source: 'incorrect-source',
131
+ },
132
+ ports: [{ postMessage: mockPostMessage }],
133
+ });
134
+ expect(mockPostMessage).not.toHaveBeenCalled();
135
+ });
136
+ test('default internal function testing', () => {
137
+ expect(mockInitMessage).toHaveBeenCalled();
138
+ const mockPostMessage = jest.fn();
139
+ eventProcesor({
140
+ data: {
141
+ payload: mockInitializeContextPayload,
142
+ eventType: TSToChartEvent.ChartConfigValidate,
143
+ source: 'ts-host-app',
144
+ },
145
+ ports: [{ postMessage: mockPostMessage }],
146
+ });
147
+ expect(mockPostMessage).toHaveBeenCalledWith({
148
+ isValid: true,
149
+ });
150
+ mockPostMessage.mockReset();
151
+ eventProcesor({
152
+ data: {
153
+ payload: mockInitializeContextPayload,
154
+ eventType: TSToChartEvent.VisualPropsValidate,
155
+ source: 'ts-host-app',
156
+ },
157
+ ports: [{ postMessage: mockPostMessage }],
158
+ });
159
+ expect(mockPostMessage).toHaveBeenCalledWith({
160
+ isValid: true,
161
+ });
162
+ mockPostMessage.mockReset();
163
+ eventProcesor({
164
+ data: {
165
+ payload: mockInitializeContextPayload,
166
+ eventType: TSToChartEvent.TriggerRenderChart,
167
+ source: 'ts-host-app',
168
+ },
169
+ ports: [{ postMessage: mockPostMessage }],
170
+ });
171
+ expect(mockPostMessage).toHaveBeenCalledWith({});
172
+ expect(renderChart).toHaveBeenCalled();
173
+ mockPostMessage.mockReset();
174
+ eventProcesor({
175
+ data: {
176
+ payload: mockInitializeContextPayload,
177
+ eventType: TSToChartEvent.GetDataQuery,
178
+ source: 'ts-host-app',
179
+ },
180
+ ports: [{ postMessage: mockPostMessage }],
181
+ });
182
+ expect(mockPostMessage).toHaveBeenCalledWith({});
183
+ expect(getQueriesFromChartConfig).toHaveBeenCalled();
184
+ });
185
+ test('default external function testing', () => {
186
+ expect(mockInitMessage).toHaveBeenCalled();
187
+ const mockPostMessage = jest.fn();
188
+ eventProcesor({
189
+ data: {
190
+ payload: {
191
+ data: 'random data',
192
+ },
193
+ eventType: TSToChartEvent.DataUpdate,
194
+ source: 'ts-host-app',
195
+ },
196
+ ports: [{ postMessage: mockPostMessage }],
197
+ });
198
+ expect(mockPostMessage).toHaveBeenCalledWith({
199
+ triggerRenderChart: true,
200
+ });
201
+ expect(customChartContext.getChartModel().data).toBe('random data');
202
+ mockPostMessage.mockReset();
203
+ eventProcesor({
204
+ data: {
205
+ payload: {
206
+ chartModel: {
207
+ data: 'random data2',
208
+ visualProps: null,
209
+ },
210
+ },
211
+ eventType: TSToChartEvent.ChartModelUpdate,
212
+ source: 'ts-host-app',
213
+ },
214
+ ports: [{ postMessage: mockPostMessage }],
215
+ });
216
+ expect(mockPostMessage).toHaveBeenCalledWith({
217
+ triggerRenderChart: true,
218
+ });
219
+ expect(customChartContext.getChartModel().data).toBe('random data2');
220
+ expect(customChartContext.getChartModel().visualProps).toBe(null);
221
+ mockPostMessage.mockReset();
222
+ eventProcesor({
223
+ data: {
224
+ payload: {
225
+ visualProps: 'random data',
226
+ },
227
+ eventType: TSToChartEvent.VisualPropsUpdate,
228
+ source: 'ts-host-app',
229
+ },
230
+ ports: [{ postMessage: mockPostMessage }],
231
+ });
232
+ expect(mockPostMessage).toHaveBeenCalledWith({
233
+ triggerRenderChart: true,
234
+ });
235
+ expect(customChartContext.getChartModel().visualProps).toBe('random data');
236
+ });
237
+ test('should add an event listener to the specified event type', () => {
238
+ expect(mockInitMessage).toHaveBeenCalled();
239
+ const TEST_EVENT_TYPE = 'testEventType';
240
+ const testCallbackFn = jest.fn();
241
+ customChartContext.on(TEST_EVENT_TYPE, testCallbackFn);
242
+ const mockPostMessage = jest.fn();
243
+ eventProcesor({
244
+ data: {
245
+ payload: mockInitializeContextPayload,
246
+ eventType: TEST_EVENT_TYPE,
247
+ source: 'ts-host-app',
248
+ },
249
+ ports: [{ postMessage: mockPostMessage }],
250
+ });
251
+ expect(testCallbackFn).toHaveBeenCalled();
252
+ });
253
+ test('should respond with an error to an unspecified event type', () => {
254
+ expect(mockInitMessage).toHaveBeenCalled();
255
+ const TEST_EVENT_TYPE = 'testEventType';
256
+ const mockPostMessage = jest.fn();
257
+ eventProcesor({
258
+ data: {
259
+ payload: mockInitializeContextPayload,
260
+ eventType: TEST_EVENT_TYPE,
261
+ source: 'ts-host-app',
262
+ },
263
+ ports: [{ postMessage: mockPostMessage }],
264
+ });
265
+ expect(mockPostMessage).toHaveBeenCalledWith({
266
+ hasError: true,
267
+ error: `Event type not recognised or processed: ${TEST_EVENT_TYPE}`,
268
+ });
269
+ });
270
+ });
271
+ describe('emitEvent', () => {
272
+ let customChartContext;
273
+ beforeEach(() => {
274
+ customChartContext = new CustomChartContext({
275
+ getDefaultChartConfig,
276
+ getQueriesFromChartConfig,
277
+ renderChart,
278
+ });
279
+ });
280
+ afterEach(() => {
281
+ jest.resetAllMocks();
282
+ customChartContext.destroy();
283
+ eventProcesor = null;
284
+ });
285
+ test('should reject the promise if the chart context is not initialized', async () => {
286
+ const TEST_EVENT_TYPE = 'testEventType';
287
+ const testPayload = { value: 'testPayload' };
288
+ const result = customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
289
+ expect(mockPostMessageToHost).not.toHaveBeenCalled();
290
+ await expect(result).rejects.not.toBeDefined();
291
+ });
292
+ test('should resolve the promise if the chart context is initialized', async () => {
293
+ const mockPostMessage = jest.fn();
294
+ eventProcesor({
295
+ data: {
296
+ payload: mockInitializeContextPayload,
297
+ eventType: TSToChartEvent.Initialize,
298
+ source: 'ts-host-app',
299
+ },
300
+ ports: [{ postMessage: mockPostMessage }],
301
+ });
302
+ let resolve;
303
+ mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
304
+ resolve = res;
305
+ }));
306
+ const TEST_EVENT_TYPE = 'testEventType';
307
+ const testPayload = { value: 'testPayload' };
308
+ const result = customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
309
+ global.setTimeout(() => resolve('helloworld'), 3000);
310
+ expect(mockPostMessageToHost).toHaveBeenCalledWith(mockInitializeContextPayload.componentId, mockInitializeContextPayload.hostUrl, testPayload, TEST_EVENT_TYPE);
311
+ await expect(result).resolves.toBe('helloworld');
312
+ });
313
+ });
314
+ });
315
+ //# sourceMappingURL=custom-chart-context.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-chart-context.spec.js","sourceRoot":"","sources":["../../src/main/custom-chart-context.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ChartToTSEvent } from '../types/chart-to-ts-event.types';
2
+ declare const init: (handleMessageEvent: any) => void;
3
+ declare const destroy: (handleMessageEvent: any) => void;
4
+ declare const postMessageToHostApp: (componentId: string, hostUrl: string, eventPayload: any, eventType: ChartToTSEvent) => Promise<any>;
5
+ export { init as initMessageListener, destroy as destroyMessageListener, postMessageToHostApp, };
6
+ //# sourceMappingURL=post-message-event-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-message-event-bridge.d.ts","sourceRoot":"","sources":["../../src/main/post-message-event-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASlE,QAAA,MAAM,IAAI,uBAAwB,GAAG,SAEpC,CAAC;AAOF,QAAA,MAAM,OAAO,uBAAwB,GAAG,SAEvC,CAAC;AAUF,QAAA,MAAM,oBAAoB,gBACT,MAAM,WACV,MAAM,gBACD,GAAG,aACN,cAAc,KAC1B,QAAQ,GAAG,CA8CR,CAAC;AAEP,OAAO,EACH,IAAI,IAAI,mBAAmB,EAC3B,OAAO,IAAI,sBAAsB,EACjC,oBAAoB,GACvB,CAAC"}
@@ -0,0 +1,41 @@
1
+ const TIMEOUT_THRESHOLD = 30000;
2
+ const init = (handleMessageEvent) => {
3
+ window.addEventListener('message', handleMessageEvent);
4
+ };
5
+ const destroy = (handleMessageEvent) => {
6
+ window.removeEventListener('message', handleMessageEvent);
7
+ };
8
+ const postMessageToHostApp = (componentId, hostUrl, eventPayload, eventType) => new Promise((resolve, reject) => {
9
+ const channel = new MessageChannel();
10
+ channel.port1.onmessage = (res) => {
11
+ channel.port1.close();
12
+ const { hasError, error } = res.data;
13
+ if (hasError) {
14
+ console.log('ChartContext: message failure:', res.data);
15
+ reject(error);
16
+ }
17
+ else {
18
+ console.log('ChartContext: message success:', res.data);
19
+ resolve(null);
20
+ }
21
+ };
22
+ setTimeout(() => {
23
+ reject(new Error(`ChartContext: postMessage operation timed out. ${eventType}`, eventPayload));
24
+ }, TIMEOUT_THRESHOLD);
25
+ try {
26
+ window.parent.window.postMessage({
27
+ componentId,
28
+ payload: {
29
+ ...eventPayload,
30
+ },
31
+ eventType,
32
+ source: 'ts-chart-sdk',
33
+ }, hostUrl, [channel.port2]);
34
+ }
35
+ catch (err) {
36
+ console.error('ChartContext: error in emitting event:', err, eventType, eventPayload);
37
+ reject(err);
38
+ }
39
+ });
40
+ export { init as initMessageListener, destroy as destroyMessageListener, postMessageToHostApp, };
41
+ //# sourceMappingURL=post-message-event-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-message-event-bridge.js","sourceRoot":"","sources":["../../src/main/post-message-event-bridge.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAOhC,MAAM,IAAI,GAAG,CAAC,kBAAuB,EAAE,EAAE;IACrC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAC3D,CAAC,CAAC;AAOF,MAAM,OAAO,GAAG,CAAC,kBAAuB,EAAE,EAAE;IACxC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAC9D,CAAC,CAAC;AAUF,MAAM,oBAAoB,GAAG,CACzB,WAAmB,EACnB,OAAe,EACf,YAAiB,EACjB,SAAyB,EACb,EAAE,CACd,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5B,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE;QACnC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,QAAQ,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,CAAC;SACjB;aAAM;YACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC;SACjB;IACL,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,CACF,IAAI,KAAK,CACL,kDAAkD,SAAS,EAAE,EAC7D,YAAY,CACf,CACJ,CAAC;IACN,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAEtB,IAAI;QACA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAC5B;YACI,WAAW;YACX,OAAO,EAAE;gBACL,GAAG,YAAY;aAClB;YACD,SAAS;YACT,MAAM,EAAE,cAAc;SACzB,EACD,OAAO,EACP,CAAC,OAAO,CAAC,KAAK,CAAC,CAClB,CAAC;KACL;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CACT,wCAAwC,EACxC,GAAG,EACH,SAAS,EACT,YAAY,CACf,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC;KACf;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,EACH,IAAI,IAAI,mBAAmB,EAC3B,OAAO,IAAI,sBAAsB,EACjC,oBAAoB,GACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=post-message-event-bridge.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-message-event-bridge.spec.d.ts","sourceRoot":"","sources":["../../src/main/post-message-event-bridge.spec.ts"],"names":[],"mappings":""}