@elliemae/pui-app-bridge 2.0.0-next.39 → 2.0.0-next.41
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/dist/cjs/{microfeFactory.js → appBridge.js} +95 -39
- package/dist/cjs/config/microFE.js +3 -1
- package/dist/cjs/eventManager.js +201 -0
- package/dist/cjs/index.js +5 -3
- package/dist/cjs/microfeHost.js +9 -58
- package/dist/cjs/tests/scriptingObjects/appraisalServiceModule.js +2 -2
- package/dist/cjs/tests/scriptingObjects/constant.js +0 -2
- package/dist/cjs/tests/task/latest/index.dev.js +4 -1
- package/dist/cjs/tests/task/latest/index.js +4 -1
- package/dist/cjs/typings/common.js +12 -0
- package/dist/esm/{microfeFactory.js → appBridge.js} +92 -36
- package/dist/esm/config/microFE.js +3 -1
- package/dist/esm/eventManager.js +182 -0
- package/dist/esm/index.js +5 -3
- package/dist/esm/microfeHost.js +10 -59
- package/dist/esm/tests/scriptingObjects/appraisalServiceModule.js +4 -2
- package/dist/esm/tests/scriptingObjects/constant.js +0 -2
- package/dist/esm/tests/task/latest/index.dev.js +4 -1
- package/dist/esm/tests/task/latest/index.js +4 -1
- package/dist/esm/typings/common.js +8 -0
- package/dist/public/frame.html +1 -1
- package/dist/public/guest/util.js +1 -1
- package/dist/public/guest/util.js.br +0 -0
- package/dist/public/guest/util.js.gz +0 -0
- package/dist/public/guest/util.js.map +1 -1
- package/dist/public/index.html +1 -1
- package/dist/public/init.js +1 -1
- package/dist/public/init.js.br +0 -0
- package/dist/public/init.js.gz +0 -0
- package/dist/public/init.js.map +1 -1
- package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js +24 -0
- package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js.br +0 -0
- package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js.gz +0 -0
- package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js.map +1 -0
- package/dist/public/loan-object.js +1 -1
- package/dist/public/loan-object.js.br +0 -0
- package/dist/public/loan-object.js.gz +0 -0
- package/dist/public/loan-object.js.map +1 -1
- package/dist/public/utils.js +1 -1
- package/dist/public/utils.js.br +0 -0
- package/dist/public/utils.js.gz +0 -0
- package/dist/public/utils.js.map +1 -1
- package/dist/types/appBridge.d.ts +122 -0
- package/dist/types/config/app.d.ts +5 -0
- package/dist/types/eventManager.d.ts +66 -0
- package/dist/types/index.d.ts +5 -3
- package/dist/types/microfeHost.d.ts +19 -35
- package/dist/types/tests/eventManager.test.d.ts +1 -0
- package/dist/types/tests/scriptingObjects/constant.d.ts +0 -1
- package/dist/types/tests/utils.d.ts +9 -2
- package/dist/types/typings/common.d.ts +77 -0
- package/dist/types/typings/guest.d.ts +1 -1
- package/dist/types/typings/host.d.ts +3 -33
- package/dist/umd/guest/util.js +1 -1
- package/dist/umd/guest/util.js.br +0 -0
- package/dist/umd/guest/util.js.gz +0 -0
- package/dist/umd/guest/util.js.map +1 -1
- package/dist/umd/index.js +7 -7
- package/dist/umd/index.js.br +0 -0
- package/dist/umd/index.js.gz +0 -0
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/init.js +1 -1
- package/dist/umd/init.js.br +0 -0
- package/dist/umd/init.js.gz +0 -0
- package/dist/umd/init.js.map +1 -1
- package/dist/umd/loan-object.js +1 -1
- package/dist/umd/loan-object.js.br +0 -0
- package/dist/umd/loan-object.js.gz +0 -0
- package/dist/umd/loan-object.js.map +1 -1
- package/dist/umd/utils.js +1 -1
- package/dist/umd/utils.js.br +0 -0
- package/dist/umd/utils.js.gz +0 -0
- package/dist/umd/utils.js.map +1 -1
- package/package.json +3 -3
- package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js +0 -24
- package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.br +0 -0
- package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.gz +0 -0
- package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.map +0 -1
- package/dist/types/microfeFactory.d.ts +0 -96
- /package/dist/types/tests/{appFactoryFailure.test.d.ts → appBridge.test.d.ts} +0 -0
- /package/dist/types/tests/{factory.test.d.ts → appBridgeFailure.test.d.ts} +0 -0
|
@@ -39,61 +39,72 @@ var __privateSet = (obj, member, value, setter) => {
|
|
|
39
39
|
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
40
40
|
return value;
|
|
41
41
|
};
|
|
42
|
-
var
|
|
43
|
-
__export(
|
|
44
|
-
|
|
42
|
+
var appBridge_exports = {};
|
|
43
|
+
__export(appBridge_exports, {
|
|
44
|
+
CAppBridge: () => CAppBridge
|
|
45
45
|
});
|
|
46
|
-
module.exports = __toCommonJS(
|
|
46
|
+
module.exports = __toCommonJS(appBridge_exports);
|
|
47
|
+
var import_pubsub_js = require("pubsub-js");
|
|
48
|
+
var import_microfe_common = require("@elliemae/microfe-common");
|
|
49
|
+
var import_eventManager = require("./eventManager.js");
|
|
47
50
|
var import_frame = require("./frame.js");
|
|
48
51
|
var import_window = require("./typings/window.js");
|
|
49
52
|
var import_app = require("./config/app.js");
|
|
50
53
|
var import_microFE = require("./config/microFE.js");
|
|
51
54
|
var import_loaders = require("./loaders/index.js");
|
|
52
55
|
var import_microfeHost = require("./microfeHost.js");
|
|
53
|
-
var _logger, _scriptLoader, _styleLoader, _appConfig, _microFEConfig,
|
|
56
|
+
var _logger, _version, _scriptLoader, _styleLoader, _appConfig, _microFEConfig, _soManager, _eventManager, _activeApps, _removeAssetsFromDOM, _addAppToActiveAppList, _waitAndInitApplication, _initApplication, _loadApp, _unloadApp, _mountApp, _unmountApp;
|
|
54
57
|
const APP_CONTAINER_ID_PREFIX = "pui-app-container-";
|
|
55
58
|
const cssType = /\.css$/;
|
|
56
59
|
const isCss = (fileName) => cssType.test(fileName);
|
|
57
|
-
class
|
|
60
|
+
class CAppBridge {
|
|
58
61
|
/**
|
|
59
|
-
* Create a new instance of the
|
|
62
|
+
* Create a new instance of the AppBridge
|
|
60
63
|
*
|
|
61
|
-
* @param {
|
|
64
|
+
* @param {AppBridgeParams} params - parameter for the constructor
|
|
62
65
|
*/
|
|
63
66
|
constructor(params) {
|
|
64
67
|
__privateAdd(this, _logger, void 0);
|
|
68
|
+
__privateAdd(this, _version, void 0);
|
|
65
69
|
__privateAdd(this, _scriptLoader, void 0);
|
|
66
70
|
__privateAdd(this, _styleLoader, void 0);
|
|
67
71
|
__privateAdd(this, _appConfig, void 0);
|
|
68
72
|
__privateAdd(this, _microFEConfig, new import_microFE.CMicroFEConfig());
|
|
69
|
-
__privateAdd(this,
|
|
70
|
-
__privateAdd(this,
|
|
71
|
-
__privateAdd(this, _activeApps,
|
|
73
|
+
__privateAdd(this, _soManager, void 0);
|
|
74
|
+
__privateAdd(this, _eventManager, void 0);
|
|
75
|
+
__privateAdd(this, _activeApps, /* @__PURE__ */ new Map());
|
|
72
76
|
__privateAdd(this, _removeAssetsFromDOM, (id, documentEle = document) => {
|
|
73
|
-
__privateGet(this,
|
|
74
|
-
const { elementIds } = __privateGet(this, _activeApps)[id] || {};
|
|
77
|
+
const { elementIds } = __privateGet(this, _activeApps).get(id) || {};
|
|
75
78
|
if (elementIds) {
|
|
76
79
|
elementIds.forEach((elementId) => {
|
|
77
80
|
const ele = documentEle.getElementById(elementId);
|
|
78
81
|
if (ele)
|
|
79
82
|
ele.remove();
|
|
80
83
|
});
|
|
81
|
-
delete __privateGet(this, _activeApps)[id];
|
|
82
84
|
}
|
|
83
85
|
});
|
|
84
86
|
__privateAdd(this, _addAppToActiveAppList, (id, documentEle, elementIds) => {
|
|
85
87
|
const app = window.emui?.[id] || {};
|
|
86
|
-
__privateGet(this, _activeApps)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
__privateGet(this, _activeApps).set(id, {
|
|
89
|
+
elementIds,
|
|
90
|
+
guest: {
|
|
91
|
+
guestWindow: documentEle?.defaultView,
|
|
92
|
+
...app
|
|
93
|
+
}
|
|
90
94
|
});
|
|
91
95
|
});
|
|
92
96
|
__privateAdd(this, _waitAndInitApplication, (options, requests) => {
|
|
93
|
-
const {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
const {
|
|
98
|
+
id,
|
|
99
|
+
name,
|
|
100
|
+
hostUrl,
|
|
101
|
+
manifestPath,
|
|
102
|
+
homeRoute,
|
|
103
|
+
history,
|
|
104
|
+
theme,
|
|
105
|
+
documentEle
|
|
106
|
+
} = options;
|
|
107
|
+
return Promise.all(requests).then(__privateGet(this, _addAppToActiveAppList).bind(null, id, documentEle)).then(
|
|
97
108
|
__privateGet(this, _initApplication).bind(null, {
|
|
98
109
|
id,
|
|
99
110
|
name,
|
|
@@ -132,8 +143,17 @@ class CMicroAppFactory {
|
|
|
132
143
|
throw new Error(
|
|
133
144
|
`Application ${name} with id ${id} doesn't expose init method`
|
|
134
145
|
);
|
|
146
|
+
const host = new import_microfeHost.CMicroFEHost({
|
|
147
|
+
guest: {
|
|
148
|
+
id
|
|
149
|
+
},
|
|
150
|
+
version: __privateGet(this, _version),
|
|
151
|
+
logger: __privateGet(this, _logger),
|
|
152
|
+
soManager: __privateGet(this, _soManager),
|
|
153
|
+
eventManager: __privateGet(this, _eventManager)
|
|
154
|
+
});
|
|
135
155
|
return app.init({
|
|
136
|
-
host
|
|
156
|
+
host,
|
|
137
157
|
hostUrl,
|
|
138
158
|
manifestPath,
|
|
139
159
|
homeRoute,
|
|
@@ -177,6 +197,7 @@ class CMicroAppFactory {
|
|
|
177
197
|
__privateGet(this, _styleLoader).removeDynamicImportedStyles(hostUrl, documentEle);
|
|
178
198
|
if (window.emui?.[id])
|
|
179
199
|
delete window.emui[id];
|
|
200
|
+
__privateGet(this, _activeApps).delete(id);
|
|
180
201
|
__privateGet(this, _logger).info({ message: "Application unloaded", appId: id });
|
|
181
202
|
});
|
|
182
203
|
__privateAdd(this, _mountApp, async ({ id, name }) => {
|
|
@@ -203,11 +224,20 @@ class CMicroAppFactory {
|
|
|
203
224
|
containerId: `${APP_CONTAINER_ID_PREFIX}${id}`
|
|
204
225
|
});
|
|
205
226
|
});
|
|
227
|
+
/**
|
|
228
|
+
* registers scripting object to the host
|
|
229
|
+
*
|
|
230
|
+
* @param {ValueOf<AppObjects>} so scripting object
|
|
231
|
+
* @param {AddScriptingObjectParams} params params to add scripting object
|
|
232
|
+
*/
|
|
233
|
+
__publicField(this, "addScriptingObject", (so, params) => {
|
|
234
|
+
__privateGet(this, _soManager).addScriptingObject(so, params);
|
|
235
|
+
});
|
|
206
236
|
/**
|
|
207
237
|
* Close all active guest micro frontend applications
|
|
208
238
|
*/
|
|
209
239
|
__publicField(this, "closeAllApps", async () => {
|
|
210
|
-
await Promise.all(
|
|
240
|
+
await Promise.all([...__privateGet(this, _activeApps).keys()].map(this.closeApp));
|
|
211
241
|
});
|
|
212
242
|
/**
|
|
213
243
|
* Close guest micro frontend application
|
|
@@ -230,29 +260,36 @@ class CMicroAppFactory {
|
|
|
230
260
|
throw new Error(`Iframe for application with id ${id} is not found`);
|
|
231
261
|
}
|
|
232
262
|
__privateGet(this, _unloadApp).call(this, { id, hostUrl, documentEle: frameEle.contentDocument });
|
|
263
|
+
__privateGet(this, _soManager).removeAllScriptingObjects(id);
|
|
233
264
|
import_frame.Frame.remove(id);
|
|
234
265
|
}
|
|
235
266
|
});
|
|
267
|
+
/**
|
|
268
|
+
* dispatch event to guest microfrontend application
|
|
269
|
+
*
|
|
270
|
+
* @param {DispatchEventParams<EventId, Params>} params - event parameters
|
|
271
|
+
*/
|
|
272
|
+
__publicField(this, "dispatchEvent", async (params) => __privateGet(this, _eventManager).dispatchEvent(params));
|
|
236
273
|
/**
|
|
237
274
|
* Get guest by id
|
|
238
275
|
*
|
|
239
276
|
* @param id unique id of guest
|
|
240
277
|
* @returns guest instance
|
|
241
278
|
*/
|
|
242
|
-
__publicField(this, "getGuest", (id) => __privateGet(this,
|
|
279
|
+
__publicField(this, "getGuest", (id) => __privateGet(this, _activeApps).get(id)?.guest);
|
|
243
280
|
/**
|
|
244
281
|
* Get list of active guests
|
|
245
282
|
*
|
|
246
283
|
* @returns list of active guests
|
|
247
284
|
*/
|
|
248
|
-
__publicField(this, "getGuests", () =>
|
|
285
|
+
__publicField(this, "getGuests", () => [...__privateGet(this, _activeApps).values()].map((app) => app.guest));
|
|
249
286
|
/**
|
|
250
|
-
* Initialize
|
|
287
|
+
* Initialize appBridge
|
|
251
288
|
*/
|
|
252
289
|
__publicField(this, "init", async () => {
|
|
253
290
|
await __privateGet(this, _appConfig).load();
|
|
254
291
|
__privateGet(this, _microFEConfig).init({
|
|
255
|
-
version: __privateGet(this,
|
|
292
|
+
version: __privateGet(this, _version),
|
|
256
293
|
appConfig: __privateGet(this, _appConfig)
|
|
257
294
|
});
|
|
258
295
|
});
|
|
@@ -298,6 +335,7 @@ class CMicroAppFactory {
|
|
|
298
335
|
documentEle: frameEle.contentDocument
|
|
299
336
|
});
|
|
300
337
|
await __privateGet(this, _mountApp).call(this, appConfig);
|
|
338
|
+
return __privateGet(this, _activeApps).get(id)?.guest;
|
|
301
339
|
} catch (err) {
|
|
302
340
|
__privateGet(this, _unloadApp).call(this, {
|
|
303
341
|
id,
|
|
@@ -308,6 +346,29 @@ class CMicroAppFactory {
|
|
|
308
346
|
throw err;
|
|
309
347
|
}
|
|
310
348
|
});
|
|
349
|
+
/**
|
|
350
|
+
* emit event to all subscribers (deprecated)
|
|
351
|
+
*
|
|
352
|
+
* @deprecated use dispatchEvent instead
|
|
353
|
+
* @param eventId unique id of the event. The format is <scripting object name>.<event name>
|
|
354
|
+
* @param data data to be sent to the subscribers of the event
|
|
355
|
+
* @returns true if event is published successfully
|
|
356
|
+
*/
|
|
357
|
+
__publicField(this, "publish", (eventId, data) => (0, import_pubsub_js.publish)(eventId, data));
|
|
358
|
+
/**
|
|
359
|
+
* remove all listeners
|
|
360
|
+
*/
|
|
361
|
+
__publicField(this, "removeAllEventListeners", () => {
|
|
362
|
+
__privateGet(this, _eventManager).unsubscribeAll();
|
|
363
|
+
});
|
|
364
|
+
/**
|
|
365
|
+
* removes scripting object from the host
|
|
366
|
+
*
|
|
367
|
+
* @param objectId unique id of the scripting object
|
|
368
|
+
*/
|
|
369
|
+
__publicField(this, "removeScriptingObject", (objectId) => {
|
|
370
|
+
__privateGet(this, _soManager).removeScriptingObject(objectId);
|
|
371
|
+
});
|
|
311
372
|
/**
|
|
312
373
|
* Unmount guest micro frontend application from DOM
|
|
313
374
|
*
|
|
@@ -327,30 +388,25 @@ class CMicroAppFactory {
|
|
|
327
388
|
if (!logger)
|
|
328
389
|
throw new Error("logger is required");
|
|
329
390
|
__privateSet(this, _logger, params.logger);
|
|
391
|
+
__privateSet(this, _version, params.version);
|
|
330
392
|
__privateSet(this, _appConfig, new import_app.CAppConfig({
|
|
331
393
|
version: params.version,
|
|
332
394
|
baseUrl: params.appConfigBaseUrl
|
|
333
395
|
}));
|
|
334
396
|
__privateSet(this, _scriptLoader, new import_loaders.ScriptLoader(logger));
|
|
335
397
|
__privateSet(this, _styleLoader, new import_loaders.StyleLoader(logger));
|
|
336
|
-
__privateSet(this,
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
* Get instance of host
|
|
340
|
-
*
|
|
341
|
-
* @returns instance of host
|
|
342
|
-
*/
|
|
343
|
-
get host() {
|
|
344
|
-
return __privateGet(this, _host);
|
|
398
|
+
__privateSet(this, _soManager, new import_microfe_common.ScriptingObjectManager());
|
|
399
|
+
__privateSet(this, _eventManager, new import_eventManager.EventManager());
|
|
345
400
|
}
|
|
346
401
|
}
|
|
347
402
|
_logger = new WeakMap();
|
|
403
|
+
_version = new WeakMap();
|
|
348
404
|
_scriptLoader = new WeakMap();
|
|
349
405
|
_styleLoader = new WeakMap();
|
|
350
406
|
_appConfig = new WeakMap();
|
|
351
407
|
_microFEConfig = new WeakMap();
|
|
352
|
-
|
|
353
|
-
|
|
408
|
+
_soManager = new WeakMap();
|
|
409
|
+
_eventManager = new WeakMap();
|
|
354
410
|
_activeApps = new WeakMap();
|
|
355
411
|
_removeAssetsFromDOM = new WeakMap();
|
|
356
412
|
_addAppToActiveAppList = new WeakMap();
|
|
@@ -57,6 +57,7 @@ module.exports = __toCommonJS(microFE_exports);
|
|
|
57
57
|
var import_merge = __toESM(require("lodash/merge"), 1);
|
|
58
58
|
var import_utils = require("../utils.js");
|
|
59
59
|
var import_constant = require("../constant.js");
|
|
60
|
+
var import_common = require("../typings/common.js");
|
|
60
61
|
var _microFrontendApps;
|
|
61
62
|
const CONFIG_KEY = "microFrontendApps";
|
|
62
63
|
const isCIBuild = () => process.env.CI === "true";
|
|
@@ -127,7 +128,8 @@ const getConfig = ({
|
|
|
127
128
|
{
|
|
128
129
|
name: id,
|
|
129
130
|
mode: "production",
|
|
130
|
-
manifestPath: "./{SYSTEM_VERSION}/"
|
|
131
|
+
manifestPath: "./{SYSTEM_VERSION}/",
|
|
132
|
+
securityContext: import_common.SecurityContext.USER
|
|
131
133
|
},
|
|
132
134
|
config,
|
|
133
135
|
envConfig
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var __publicField = (obj, key, value) => {
|
|
21
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
22
|
+
return value;
|
|
23
|
+
};
|
|
24
|
+
var __accessCheck = (obj, member, msg) => {
|
|
25
|
+
if (!member.has(obj))
|
|
26
|
+
throw TypeError("Cannot " + msg);
|
|
27
|
+
};
|
|
28
|
+
var __privateGet = (obj, member, getter) => {
|
|
29
|
+
__accessCheck(obj, member, "read from private field");
|
|
30
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
31
|
+
};
|
|
32
|
+
var __privateAdd = (obj, member, value) => {
|
|
33
|
+
if (member.has(obj))
|
|
34
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
35
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
36
|
+
};
|
|
37
|
+
var eventManager_exports = {};
|
|
38
|
+
__export(eventManager_exports, {
|
|
39
|
+
EventManager: () => EventManager
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(eventManager_exports);
|
|
42
|
+
var import_uuid = require("uuid");
|
|
43
|
+
var _listeners, _asyncCallwithTimeout, _emitEvent, _emitEventWithFeedback;
|
|
44
|
+
const flatten = (source, target = []) => {
|
|
45
|
+
const retVal = target || [];
|
|
46
|
+
if (source && source.forEach) {
|
|
47
|
+
source.forEach((item) => {
|
|
48
|
+
flatten(item, retVal);
|
|
49
|
+
});
|
|
50
|
+
} else if (typeof source !== "undefined") {
|
|
51
|
+
retVal.push(source);
|
|
52
|
+
}
|
|
53
|
+
return retVal;
|
|
54
|
+
};
|
|
55
|
+
class EventManager {
|
|
56
|
+
constructor() {
|
|
57
|
+
/**
|
|
58
|
+
* event listeners
|
|
59
|
+
*/
|
|
60
|
+
__privateAdd(this, _listeners, /* @__PURE__ */ new Map());
|
|
61
|
+
/**
|
|
62
|
+
* call an async function with a timeout
|
|
63
|
+
*
|
|
64
|
+
* @param promise async function to call
|
|
65
|
+
* @param feedbackWaitTime timeout in milliseconds
|
|
66
|
+
* @returns result of the async function or undefined if timeout
|
|
67
|
+
*/
|
|
68
|
+
__privateAdd(this, _asyncCallwithTimeout, (promise, feedbackWaitTime) => {
|
|
69
|
+
const timeout = new Promise((resolve) => {
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
resolve();
|
|
72
|
+
}, feedbackWaitTime);
|
|
73
|
+
});
|
|
74
|
+
return Promise.race([promise, timeout]);
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* emit an event to set of listeners
|
|
78
|
+
*
|
|
79
|
+
* @param {EmitEventParam} param - parameters for emitting an event
|
|
80
|
+
*/
|
|
81
|
+
__privateAdd(this, _emitEvent, (param) => {
|
|
82
|
+
const { eventName, scriptingObject, eventParams, listeners } = param;
|
|
83
|
+
listeners.map(async (listener) => {
|
|
84
|
+
try {
|
|
85
|
+
await listener.callback({
|
|
86
|
+
obj: scriptingObject,
|
|
87
|
+
eventName,
|
|
88
|
+
eventParams
|
|
89
|
+
});
|
|
90
|
+
} catch (e) {
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
__privateAdd(this, _emitEventWithFeedback, async ({
|
|
95
|
+
eventId,
|
|
96
|
+
eventName,
|
|
97
|
+
scriptingObject,
|
|
98
|
+
eventParams,
|
|
99
|
+
feedbackWaitTime
|
|
100
|
+
}) => {
|
|
101
|
+
const listeners = __privateGet(this, _listeners).get(eventId) || [];
|
|
102
|
+
const promises = listeners.map(
|
|
103
|
+
(listener) => __privateGet(this, _asyncCallwithTimeout).call(
|
|
104
|
+
this,
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
106
|
+
listener.callback({
|
|
107
|
+
obj: scriptingObject,
|
|
108
|
+
eventName,
|
|
109
|
+
eventParams
|
|
110
|
+
}),
|
|
111
|
+
feedbackWaitTime
|
|
112
|
+
)
|
|
113
|
+
);
|
|
114
|
+
const retValues = await Promise.all(promises);
|
|
115
|
+
return flatten(retValues);
|
|
116
|
+
});
|
|
117
|
+
/**
|
|
118
|
+
* dispatch an event
|
|
119
|
+
*
|
|
120
|
+
* @param {DispatchEventParam<EventId, Params>} param - parameters for dispatching an event
|
|
121
|
+
*/
|
|
122
|
+
__publicField(this, "dispatchEvent", async (param) => {
|
|
123
|
+
const {
|
|
124
|
+
event: { id, name, requiresFeedback, scriptingObject },
|
|
125
|
+
eventParams,
|
|
126
|
+
feedbackWaitTime = 1e3
|
|
127
|
+
} = param;
|
|
128
|
+
if (!id)
|
|
129
|
+
throw new Error("Event Id is required");
|
|
130
|
+
const listeners = __privateGet(this, _listeners).get(id) || [];
|
|
131
|
+
if (!requiresFeedback) {
|
|
132
|
+
__privateGet(this, _emitEvent).call(this, {
|
|
133
|
+
eventName: name,
|
|
134
|
+
scriptingObject,
|
|
135
|
+
eventParams,
|
|
136
|
+
listeners
|
|
137
|
+
});
|
|
138
|
+
return Promise.resolve();
|
|
139
|
+
}
|
|
140
|
+
return __privateGet(this, _emitEventWithFeedback).call(this, {
|
|
141
|
+
eventId: id,
|
|
142
|
+
eventName: name,
|
|
143
|
+
scriptingObject,
|
|
144
|
+
eventParams,
|
|
145
|
+
feedbackWaitTime
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
/**
|
|
149
|
+
* Subscribe to an event
|
|
150
|
+
*
|
|
151
|
+
* @param {SubscribeParam<EventId, AppEvents[EventId]>} param - parameters for subscribing to an event
|
|
152
|
+
*/
|
|
153
|
+
__publicField(this, "subscribe", (param) => {
|
|
154
|
+
const { eventId, listener } = param;
|
|
155
|
+
if (!eventId)
|
|
156
|
+
throw new Error("eventId is required");
|
|
157
|
+
if (!listener)
|
|
158
|
+
throw new Error("Listener is required");
|
|
159
|
+
const listeners = __privateGet(this, _listeners).get(eventId) || [];
|
|
160
|
+
const subscriptionId = (0, import_uuid.v4)();
|
|
161
|
+
listeners.push({
|
|
162
|
+
subscriptionId,
|
|
163
|
+
callback: listener
|
|
164
|
+
});
|
|
165
|
+
__privateGet(this, _listeners).set(eventId, listeners);
|
|
166
|
+
return subscriptionId;
|
|
167
|
+
});
|
|
168
|
+
/**
|
|
169
|
+
* Unsubscribe from an event
|
|
170
|
+
*
|
|
171
|
+
* @param {UnsubscribeParam<EventId>} param - parameters for unsubscribing from an event
|
|
172
|
+
*/
|
|
173
|
+
__publicField(this, "unsubscribe", (param) => {
|
|
174
|
+
const { eventId, subscriptionId } = param;
|
|
175
|
+
if (!eventId)
|
|
176
|
+
throw new Error("eventId id is required");
|
|
177
|
+
if (subscriptionId) {
|
|
178
|
+
const listeners = __privateGet(this, _listeners).get(eventId) || [];
|
|
179
|
+
const index = listeners.findIndex(
|
|
180
|
+
(listener) => listener.subscriptionId === subscriptionId
|
|
181
|
+
);
|
|
182
|
+
if (index > -1) {
|
|
183
|
+
listeners.splice(index, 1);
|
|
184
|
+
__privateGet(this, _listeners).set(eventId, listeners);
|
|
185
|
+
}
|
|
186
|
+
} else {
|
|
187
|
+
__privateGet(this, _listeners).delete(eventId);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
/**
|
|
191
|
+
* Unsubscribe from all events
|
|
192
|
+
*/
|
|
193
|
+
__publicField(this, "unsubscribeAll", () => {
|
|
194
|
+
__privateGet(this, _listeners).clear();
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
_listeners = new WeakMap();
|
|
199
|
+
_asyncCallwithTimeout = new WeakMap();
|
|
200
|
+
_emitEvent = new WeakMap();
|
|
201
|
+
_emitEventWithFeedback = new WeakMap();
|
package/dist/cjs/index.js
CHANGED
|
@@ -18,10 +18,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var lib_exports = {};
|
|
20
20
|
__export(lib_exports, {
|
|
21
|
-
|
|
21
|
+
CAppBridge: () => import_appBridge.CAppBridge,
|
|
22
22
|
Event: () => import_microfe_common.Event,
|
|
23
|
-
ScriptingObject: () => import_microfe_common.ScriptingObject
|
|
23
|
+
ScriptingObject: () => import_microfe_common.ScriptingObject,
|
|
24
|
+
SecurityContext: () => import_common.SecurityContext
|
|
24
25
|
});
|
|
25
26
|
module.exports = __toCommonJS(lib_exports);
|
|
27
|
+
var import_common = require("./typings/common.js");
|
|
26
28
|
var import_microfe_common = require("@elliemae/microfe-common");
|
|
27
|
-
var
|
|
29
|
+
var import_appBridge = require("./appBridge.js");
|
package/dist/cjs/microfeHost.js
CHANGED
|
@@ -45,10 +45,9 @@ __export(microfeHost_exports, {
|
|
|
45
45
|
});
|
|
46
46
|
module.exports = __toCommonJS(microfeHost_exports);
|
|
47
47
|
var import_pubsub_js = require("pubsub-js");
|
|
48
|
-
var import_microfe_common = require("@elliemae/microfe-common");
|
|
49
48
|
var import_frame = require("./frame.js");
|
|
50
49
|
var import_constant = require("./constant.js");
|
|
51
|
-
var _logger, _version,
|
|
50
|
+
var _logger, _guest, _version, _soManager, _eventManager;
|
|
52
51
|
class CMicroFEHost {
|
|
53
52
|
/**
|
|
54
53
|
* Create new instance of the host frontend application
|
|
@@ -57,9 +56,10 @@ class CMicroFEHost {
|
|
|
57
56
|
*/
|
|
58
57
|
constructor(params) {
|
|
59
58
|
__privateAdd(this, _logger, void 0);
|
|
59
|
+
__privateAdd(this, _guest, void 0);
|
|
60
60
|
__privateAdd(this, _version, void 0);
|
|
61
|
+
__privateAdd(this, _soManager, void 0);
|
|
61
62
|
__privateAdd(this, _eventManager, void 0);
|
|
62
|
-
__privateAdd(this, _scriptingObjects, /* @__PURE__ */ new Map());
|
|
63
63
|
/**
|
|
64
64
|
* add listener to the scripting object event
|
|
65
65
|
*
|
|
@@ -67,30 +67,6 @@ class CMicroFEHost {
|
|
|
67
67
|
* @returns subscription id
|
|
68
68
|
*/
|
|
69
69
|
__publicField(this, "addEventListener", (params) => __privateGet(this, _eventManager).subscribe(params));
|
|
70
|
-
/**
|
|
71
|
-
* registers scripting object to the host
|
|
72
|
-
*
|
|
73
|
-
* @param so scripting object to publish
|
|
74
|
-
*/
|
|
75
|
-
__publicField(this, "addScriptingObject", (so) => {
|
|
76
|
-
if (!so?.id || !so?._toJSON) {
|
|
77
|
-
throw new Error("Object is not derived from ScriptingObject");
|
|
78
|
-
}
|
|
79
|
-
const objectId = so.id.toLowerCase();
|
|
80
|
-
if (objectId === "module")
|
|
81
|
-
throw new Error(
|
|
82
|
-
"Do not publish the module object. Create a concrete object derived from it."
|
|
83
|
-
);
|
|
84
|
-
if (__privateGet(this, _scriptingObjects).has(objectId))
|
|
85
|
-
throw new Error(`Scripting Object ${so.id} already exists`);
|
|
86
|
-
__privateGet(this, _scriptingObjects).set(objectId, so);
|
|
87
|
-
});
|
|
88
|
-
/**
|
|
89
|
-
* dispatch event to guest microfrontend application
|
|
90
|
-
*
|
|
91
|
-
* @param {DispatchEventParams<EventId, Params>} params - event parameters
|
|
92
|
-
*/
|
|
93
|
-
__publicField(this, "dispatchEvent", async (params) => __privateGet(this, _eventManager).dispatchEvent(params));
|
|
94
70
|
/**
|
|
95
71
|
* Get reference to the scripting object (or proxy) by name
|
|
96
72
|
*
|
|
@@ -98,11 +74,7 @@ class CMicroFEHost {
|
|
|
98
74
|
* @param objectId
|
|
99
75
|
* @returns scripting object reference
|
|
100
76
|
*/
|
|
101
|
-
__publicField(this, "getObject", (objectId) =>
|
|
102
|
-
const id = objectId.toLowerCase();
|
|
103
|
-
const data = __privateGet(this, _scriptingObjects).get(id);
|
|
104
|
-
return Promise.resolve(data || null);
|
|
105
|
-
});
|
|
77
|
+
__publicField(this, "getObject", (objectId) => Promise.resolve(__privateGet(this, _soManager).getObject(objectId, __privateGet(this, _guest))));
|
|
106
78
|
/**
|
|
107
79
|
* removes listener from the scripting object event
|
|
108
80
|
*
|
|
@@ -111,22 +83,6 @@ class CMicroFEHost {
|
|
|
111
83
|
__publicField(this, "removeEventListener", (params) => {
|
|
112
84
|
__privateGet(this, _eventManager).unsubscribe(params);
|
|
113
85
|
});
|
|
114
|
-
/**
|
|
115
|
-
* remove all listeners
|
|
116
|
-
*/
|
|
117
|
-
__publicField(this, "removeAllEventListeners", () => {
|
|
118
|
-
__privateGet(this, _eventManager).unsubscribeAll();
|
|
119
|
-
});
|
|
120
|
-
/**
|
|
121
|
-
* removes scripting object from the host
|
|
122
|
-
*
|
|
123
|
-
* @param objectId unique id of the scripting object
|
|
124
|
-
*/
|
|
125
|
-
__publicField(this, "removeScriptingObject", (objectId) => {
|
|
126
|
-
__privateGet(this, _scriptingObjects).delete(
|
|
127
|
-
objectId.toLowerCase()
|
|
128
|
-
);
|
|
129
|
-
});
|
|
130
86
|
/**
|
|
131
87
|
* set the size of the guest application iframe window
|
|
132
88
|
*
|
|
@@ -142,14 +98,6 @@ class CMicroFEHost {
|
|
|
142
98
|
}
|
|
143
99
|
});
|
|
144
100
|
// deprecated legacy eventing methods (to be removed)
|
|
145
|
-
/**
|
|
146
|
-
* emit event to all subscribers (deprecated)
|
|
147
|
-
*
|
|
148
|
-
* @param eventId unique id of the event. The format is <scripting object name>.<event name>
|
|
149
|
-
* @param data data to be sent to the subscribers of the event
|
|
150
|
-
* @returns true if event is published successfully
|
|
151
|
-
*/
|
|
152
|
-
__publicField(this, "publish", (eventId, data) => (0, import_pubsub_js.publish)(eventId, data));
|
|
153
101
|
/**
|
|
154
102
|
* subscribe to an scripting object event (deprecated)
|
|
155
103
|
*
|
|
@@ -168,9 +116,11 @@ class CMicroFEHost {
|
|
|
168
116
|
__publicField(this, "unsubscribe", (token) => {
|
|
169
117
|
(0, import_pubsub_js.unsubscribe)(token);
|
|
170
118
|
});
|
|
119
|
+
__privateSet(this, _guest, params.guest);
|
|
171
120
|
__privateSet(this, _logger, params.logger);
|
|
172
121
|
__privateSet(this, _version, params?.version || import_constant.LATEST_VERSION);
|
|
173
|
-
__privateSet(this,
|
|
122
|
+
__privateSet(this, _soManager, params.soManager);
|
|
123
|
+
__privateSet(this, _eventManager, params.eventManager);
|
|
174
124
|
}
|
|
175
125
|
/**
|
|
176
126
|
* application release version
|
|
@@ -182,6 +132,7 @@ class CMicroFEHost {
|
|
|
182
132
|
}
|
|
183
133
|
}
|
|
184
134
|
_logger = new WeakMap();
|
|
135
|
+
_guest = new WeakMap();
|
|
185
136
|
_version = new WeakMap();
|
|
137
|
+
_soManager = new WeakMap();
|
|
186
138
|
_eventManager = new WeakMap();
|
|
187
|
-
_scriptingObjects = new WeakMap();
|
|
@@ -44,15 +44,15 @@ __export(appraisalServiceModule_exports, {
|
|
|
44
44
|
AppraisalService: () => AppraisalService
|
|
45
45
|
});
|
|
46
46
|
module.exports = __toCommonJS(appraisalServiceModule_exports);
|
|
47
|
+
var import_pui_scripting_object = require("@elliemae/pui-scripting-object");
|
|
47
48
|
var import_microfe_common = require("@elliemae/microfe-common");
|
|
48
|
-
var import_constant = require("./constant.js");
|
|
49
49
|
var _loanId, _creditScore;
|
|
50
50
|
class AppraisalService extends import_microfe_common.ScriptingObject {
|
|
51
51
|
constructor({
|
|
52
52
|
loanId,
|
|
53
53
|
creditScore
|
|
54
54
|
}) {
|
|
55
|
-
super(
|
|
55
|
+
super(import_pui_scripting_object.ScriptingObjectNames.Module);
|
|
56
56
|
__privateAdd(this, _loanId, void 0);
|
|
57
57
|
__privateAdd(this, _creditScore, void 0);
|
|
58
58
|
__publicField(this, "Unloading", new import_microfe_common.Event({
|
|
@@ -18,9 +18,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var constant_exports = {};
|
|
20
20
|
__export(constant_exports, {
|
|
21
|
-
OBJECT_NAME: () => OBJECT_NAME,
|
|
22
21
|
UNLOADING_EVENT_NAME: () => UNLOADING_EVENT_NAME
|
|
23
22
|
});
|
|
24
23
|
module.exports = __toCommonJS(constant_exports);
|
|
25
|
-
const OBJECT_NAME = "AppraisalService";
|
|
26
24
|
const UNLOADING_EVENT_NAME = "Unloading";
|
|
@@ -19,12 +19,15 @@
|
|
|
19
19
|
const browserWindow = getWindow();
|
|
20
20
|
browserWindow.emui = browserWindow.emui || {};
|
|
21
21
|
browserWindow.emui[appId] = browserWindow.emui[appId] || {};
|
|
22
|
+
window.__TEST__ = {};
|
|
22
23
|
browserWindow.emui[appId].init = async (options) => {
|
|
24
|
+
window.__TEST__.initOptions = options;
|
|
23
25
|
host = options.host;
|
|
24
26
|
parentHistory = options.history;
|
|
25
27
|
logger = options.logger;
|
|
26
28
|
};
|
|
27
|
-
browserWindow.emui[appId].mount = async () => {
|
|
29
|
+
browserWindow.emui[appId].mount = async (options) => {
|
|
30
|
+
window.__TEST__.mountOptions = options;
|
|
28
31
|
const appContainer = document.getElementById(appElementId);
|
|
29
32
|
if (appContainer) {
|
|
30
33
|
const mainElement = document.createElement("main");
|
|
@@ -19,12 +19,15 @@
|
|
|
19
19
|
const browserWindow = getWindow();
|
|
20
20
|
browserWindow.emui = browserWindow.emui || {};
|
|
21
21
|
browserWindow.emui[appId] = browserWindow.emui[appId] || {};
|
|
22
|
+
window.__TEST__ = {};
|
|
22
23
|
browserWindow.emui[appId].init = async (options) => {
|
|
24
|
+
window.__TEST__.initOptions = options;
|
|
23
25
|
host = options.host;
|
|
24
26
|
parentHistory = options.history;
|
|
25
27
|
logger = options.logger;
|
|
26
28
|
};
|
|
27
|
-
browserWindow.emui[appId].mount = async () => {
|
|
29
|
+
browserWindow.emui[appId].mount = async (options) => {
|
|
30
|
+
window.__TEST__.mountOptions = options;
|
|
28
31
|
const appContainer = document.getElementById(appElementId);
|
|
29
32
|
if (appContainer) {
|
|
30
33
|
const mainElement = document.createElement("main");
|