@elliemae/pui-app-bridge 2.9.9 → 2.16.6

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 (115) hide show
  1. package/dist/cjs/appBridge.js +380 -93
  2. package/dist/cjs/appRegistry.js +136 -0
  3. package/dist/cjs/config/app.js +15 -2
  4. package/dist/cjs/config/microFE.js +3 -3
  5. package/dist/cjs/eventManager.js +16 -16
  6. package/dist/cjs/frame.html +2 -2
  7. package/dist/cjs/frame.js +39 -14
  8. package/dist/cjs/index.html +1 -1
  9. package/dist/cjs/loaders/script.js +5 -5
  10. package/dist/cjs/loaders/style.js +1 -0
  11. package/dist/cjs/microfeHost.js +51 -31
  12. package/dist/cjs/tests/flights/23.1/app.checksum1.js +25 -24
  13. package/dist/cjs/tests/flights/latest/app.checksum.js +25 -24
  14. package/dist/cjs/tests/hotels/23.1/app.checksum.js +27 -24
  15. package/dist/cjs/tests/hotels/latest/app.checksum.js +27 -24
  16. package/dist/cjs/tests/loan/latest/index.js +49 -57
  17. package/dist/cjs/tests/scriptingObjects/analytics.js +7 -7
  18. package/dist/cjs/tests/scriptingObjects/appraisalServiceModule.js +8 -8
  19. package/dist/cjs/tests/scriptingObjects/global.js +1 -2
  20. package/dist/cjs/tests/task/latest/index.dev.js +29 -28
  21. package/dist/cjs/tests/task/latest/index.js +29 -28
  22. package/dist/cjs/tests/travelhub/23.1/app.checksum.js +24 -26
  23. package/dist/cjs/tests/travelhub/23.1/landing.checksum1.js +5 -7
  24. package/dist/cjs/utils.js +31 -1
  25. package/dist/esm/appBridge.js +390 -95
  26. package/dist/esm/appRegistry.js +116 -0
  27. package/dist/esm/config/app.js +15 -2
  28. package/dist/esm/config/microFE.js +3 -3
  29. package/dist/esm/eventManager.js +16 -16
  30. package/dist/esm/frame.html +2 -2
  31. package/dist/esm/frame.js +29 -14
  32. package/dist/esm/index.html +1 -1
  33. package/dist/esm/loaders/script.js +5 -5
  34. package/dist/esm/loaders/style.js +1 -0
  35. package/dist/esm/microfeHost.js +55 -31
  36. package/dist/esm/tests/flights/23.1/app.checksum1.js +25 -24
  37. package/dist/esm/tests/flights/latest/app.checksum.js +25 -24
  38. package/dist/esm/tests/hotels/23.1/app.checksum.js +27 -24
  39. package/dist/esm/tests/hotels/latest/app.checksum.js +27 -24
  40. package/dist/esm/tests/loan/latest/index.js +49 -57
  41. package/dist/esm/tests/scriptingObjects/analytics.js +7 -7
  42. package/dist/esm/tests/scriptingObjects/appraisalServiceModule.js +8 -8
  43. package/dist/esm/tests/scriptingObjects/global.js +1 -2
  44. package/dist/esm/tests/task/latest/index.dev.js +29 -28
  45. package/dist/esm/tests/task/latest/index.js +29 -28
  46. package/dist/esm/tests/travelhub/23.1/app.checksum.js +24 -26
  47. package/dist/esm/tests/travelhub/23.1/landing.checksum1.js +5 -7
  48. package/dist/esm/utils.js +31 -1
  49. package/dist/public/assets/frame.671d9de68be598da64ca.html +47 -0
  50. package/dist/public/creditService/latest/creditService.checksum.js.gz +0 -0
  51. package/dist/public/frame.html +1 -1
  52. package/dist/public/guest/businessObjects.js.gz +0 -0
  53. package/dist/public/guest/util.js.gz +0 -0
  54. package/dist/public/index.html +1 -1
  55. package/dist/public/init.js.gz +0 -0
  56. package/dist/public/js/emuiAppBridge.40c8880c94dbc97b49fd.js +51 -0
  57. package/dist/public/js/emuiAppBridge.40c8880c94dbc97b49fd.js.br +0 -0
  58. package/dist/public/js/emuiAppBridge.40c8880c94dbc97b49fd.js.gz +0 -0
  59. package/dist/public/js/emuiAppBridge.40c8880c94dbc97b49fd.js.map +1 -0
  60. package/dist/public/loan-object.js +1 -1
  61. package/dist/public/loan-object.js.br +0 -0
  62. package/dist/public/loan-object.js.gz +0 -0
  63. package/dist/public/loan-object.js.map +1 -1
  64. package/dist/public/loanValidation/latest/loanValidation.checksum.js.gz +0 -0
  65. package/dist/public/pricingService/latest/pricingService.checksum.js.gz +0 -0
  66. package/dist/public/utils.js.gz +0 -0
  67. package/dist/types/lib/appBridge.d.ts +38 -28
  68. package/dist/types/lib/appRegistry.d.ts +41 -0
  69. package/dist/types/lib/eventManager.d.ts +4 -4
  70. package/dist/types/lib/frame.d.ts +45 -4
  71. package/dist/types/lib/index.d.ts +3 -3
  72. package/dist/types/lib/loaders/script.d.ts +2 -1
  73. package/dist/types/lib/microfeHost.d.ts +15 -25
  74. package/dist/types/lib/tests/flights/23.1/app.checksum1.d.ts +7 -0
  75. package/dist/types/lib/tests/flights/latest/app.checksum.d.ts +7 -0
  76. package/dist/types/lib/tests/hotels/23.1/app.checksum.d.ts +7 -0
  77. package/dist/types/lib/tests/hotels/latest/app.checksum.d.ts +7 -0
  78. package/dist/types/lib/tests/loan/latest/index.d.ts +11 -0
  79. package/dist/types/lib/tests/scriptingObjects/analytics.d.ts +3 -3
  80. package/dist/types/lib/tests/scriptingObjects/appraisalServiceModule.d.ts +2 -1
  81. package/dist/types/lib/tests/task/latest/index.d.ts +10 -0
  82. package/dist/types/lib/tests/task/latest/index.dev.d.ts +10 -0
  83. package/dist/types/lib/tests/travelhub/23.1/app.checksum.d.ts +7 -0
  84. package/dist/types/lib/tests/travelhub/23.1/landing.checksum1.d.ts +2 -0
  85. package/dist/types/lib/typings/appInfo.d.ts +1 -0
  86. package/dist/types/lib/typings/common.d.ts +0 -66
  87. package/dist/types/lib/typings/guest.d.ts +10 -3
  88. package/dist/types/lib/typings/host.d.ts +32 -32
  89. package/dist/types/lib/typings/window.d.ts +6 -1
  90. package/dist/types/lib/utils.d.ts +7 -0
  91. package/dist/types/tsconfig.tsbuildinfo +1 -1
  92. package/dist/umd/671d9de68be598da64ca.html +47 -0
  93. package/dist/umd/creditService/latest/creditService.checksum.js.gz +0 -0
  94. package/dist/umd/frame.html +1 -1
  95. package/dist/umd/guest/businessObjects.js.gz +0 -0
  96. package/dist/umd/guest/util.js.gz +0 -0
  97. package/dist/umd/index.html +1 -1
  98. package/dist/umd/index.js +35 -9
  99. package/dist/umd/index.js.br +0 -0
  100. package/dist/umd/index.js.gz +0 -0
  101. package/dist/umd/index.js.map +1 -1
  102. package/dist/umd/init.js.gz +0 -0
  103. package/dist/umd/loan-object.js +1 -1
  104. package/dist/umd/loan-object.js.br +0 -0
  105. package/dist/umd/loan-object.js.gz +0 -0
  106. package/dist/umd/loan-object.js.map +1 -1
  107. package/dist/umd/loanValidation/latest/loanValidation.checksum.js.gz +0 -0
  108. package/dist/umd/pricingService/latest/pricingService.checksum.js.gz +0 -0
  109. package/dist/umd/utils.js.gz +0 -0
  110. package/package.json +9 -12
  111. package/dist/public/js/emuiAppBridge.530390c3bb03f32357f7.js +0 -25
  112. package/dist/public/js/emuiAppBridge.530390c3bb03f32357f7.js.br +0 -0
  113. package/dist/public/js/emuiAppBridge.530390c3bb03f32357f7.js.gz +0 -0
  114. package/dist/public/js/emuiAppBridge.530390c3bb03f32357f7.js.map +0 -1
  115. package/dist/types/lib/tests/pubsubAPI.test.d.ts +0 -1
@@ -1,40 +1,43 @@
1
- (function() {
2
- const appId = "hotels";
3
- const appName = "Hotels App";
4
- const getWindow = () => {
5
- try {
6
- window.parent.document;
7
- return window.parent;
8
- } catch (err) {
9
- return window;
10
- }
11
- };
12
- let host = null;
13
- let parentHistory = null;
14
- let logger = null;
15
- const browserWindow = getWindow();
16
- browserWindow.emui = browserWindow.emui || {};
17
- browserWindow.emui[appId] = browserWindow.emui[appId] || {};
18
- browserWindow.emui[appId].init = async (options) => {
1
+ const appId = "hotels";
2
+ const appName = "Hotels App";
3
+ const getWindow = () => {
4
+ try {
5
+ window.parent.document;
6
+ return window.parent;
7
+ } catch (err) {
8
+ return window;
9
+ }
10
+ };
11
+ let host = null;
12
+ let parentHistory = null;
13
+ let logger = null;
14
+ window.emui = window.emui || { uuid: crypto.randomUUID() };
15
+ window.emui.app = {
16
+ uuid: window.emui.uuid,
17
+ init: async (options) => {
19
18
  host = options.host;
20
19
  parentHistory = options.history;
21
20
  logger = options.logger;
22
21
  return Promise.resolve();
23
- };
24
- browserWindow.emui[appId].mount = async () => {
22
+ },
23
+ mount: async () => {
25
24
  const mainElement = document.createElement("main");
26
25
  const pageHeaderEle = document.createElement("h1");
27
26
  pageHeaderEle.textContent = appName;
27
+ pageHeaderEle.id = "header";
28
28
  mainElement.appendChild(pageHeaderEle);
29
29
  const versionEle = document.createElement("p");
30
30
  versionEle.textContent = "Version: 23.1";
31
+ versionEle.id = "version";
31
32
  mainElement.appendChild(versionEle);
32
33
  document.body.appendChild(mainElement);
33
34
  return Promise.resolve();
34
- };
35
- browserWindow.emui[appId].unmount = () => {
35
+ },
36
+ unmount: () => {
36
37
  const mainEle = document.getElementsByTagName("main")[0];
37
38
  if (mainEle) mainEle.remove();
38
39
  return Promise.resolve();
39
- };
40
- })();
40
+ }
41
+ };
42
+ const browserWindow = getWindow();
43
+ browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
@@ -1,40 +1,43 @@
1
- (function() {
2
- const appId = "hotels";
3
- const appName = "Hotels App";
4
- const getWindow = () => {
5
- try {
6
- window.parent.document;
7
- return window.parent;
8
- } catch (err) {
9
- return window;
10
- }
11
- };
12
- let host = null;
13
- let parentHistory = null;
14
- let logger = null;
15
- const browserWindow = getWindow();
16
- browserWindow.emui = browserWindow.emui || {};
17
- browserWindow.emui[appId] = browserWindow.emui[appId] || {};
18
- browserWindow.emui[appId].init = async (options) => {
1
+ const appId = "hotels";
2
+ const appName = "Hotels App";
3
+ const getWindow = () => {
4
+ try {
5
+ window.parent.document;
6
+ return window.parent;
7
+ } catch (err) {
8
+ return window;
9
+ }
10
+ };
11
+ let host = null;
12
+ let parentHistory = null;
13
+ let logger = null;
14
+ window.emui = window.emui || { uuid: crypto.randomUUID() };
15
+ window.emui.app = {
16
+ uuid: window.emui.uuid,
17
+ init: async (options) => {
19
18
  host = options.host;
20
19
  parentHistory = options.history;
21
20
  logger = options.logger;
22
21
  return Promise.resolve();
23
- };
24
- browserWindow.emui[appId].mount = async () => {
22
+ },
23
+ mount: async () => {
25
24
  const mainElement = document.createElement("main");
26
25
  const pageHeaderEle = document.createElement("h1");
27
26
  pageHeaderEle.textContent = appName;
27
+ pageHeaderEle.id = "header";
28
28
  mainElement.appendChild(pageHeaderEle);
29
29
  const versionEle = document.createElement("p");
30
30
  versionEle.textContent = "Version: latest";
31
+ versionEle.id = "version";
31
32
  mainElement.appendChild(versionEle);
32
33
  document.body.appendChild(mainElement);
33
34
  return Promise.resolve();
34
- };
35
- browserWindow.emui[appId].unmount = () => {
35
+ },
36
+ unmount: () => {
36
37
  const mainEle = document.getElementsByTagName("main")[0];
37
38
  if (mainEle) mainEle.remove();
38
39
  return Promise.resolve();
39
- };
40
- })();
40
+ }
41
+ };
42
+ const browserWindow = getWindow();
43
+ browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
@@ -1,62 +1,52 @@
1
- (function() {
2
- const appId = "loanapp";
3
- const appName = "Loan App";
4
- const appElementId = `pui-app-container-${appId}`;
5
- const pipelinePath = "/pipeline";
6
- const pipelineLinkText = "Pipeline";
7
- const getWindow = () => {
8
- try {
9
- window.parent.document;
10
- return window.parent;
11
- } catch (err) {
12
- return window;
13
- }
14
- };
15
- let host = null;
16
- let parentHistory = null;
17
- let logger = null;
18
- const browserWindow = getWindow();
19
- browserWindow.emui = browserWindow.emui || {};
20
- browserWindow.emui[appId] = browserWindow.emui[appId] || {};
21
- window.__TEST__ = {};
22
- const setFrameSize = () => {
23
- const { document: document2 } = window;
24
- const iframeBody = document2.body;
25
- const iframeHTML = document2.documentElement;
26
- const size = {
27
- height: Math.max(
28
- iframeBody.scrollHeight,
29
- iframeBody.offsetHeight,
30
- iframeHTML.offsetHeight
31
- ),
32
- width: Math.max(
33
- iframeBody.scrollWidth,
34
- iframeBody.offsetWidth,
35
- iframeHTML.offsetWidth
36
- )
37
- };
38
- host.setAppWindowSize({
39
- appId,
40
- size
41
- });
1
+ const appId = "loanapp";
2
+ const appName = "Loan App";
3
+ const appElementId = `pui-app-container-${appId}`;
4
+ const pipelinePath = "/pipeline";
5
+ const pipelineLinkText = "Pipeline";
6
+ const getWindow = () => {
7
+ try {
8
+ window.parent.document;
9
+ return window.parent;
10
+ } catch (err) {
11
+ return window;
12
+ }
13
+ };
14
+ let host = null;
15
+ let parentHistory = null;
16
+ let logger = null;
17
+ window.__TEST__ = {};
18
+ const setFrameSize = () => {
19
+ const { document: document2 } = window;
20
+ const iframeBody = document2.body;
21
+ const iframeHTML = document2.documentElement;
22
+ const size = {
23
+ height: Math.max(
24
+ iframeBody.scrollHeight,
25
+ iframeBody.offsetHeight,
26
+ iframeHTML.offsetHeight
27
+ ),
28
+ width: Math.max(
29
+ iframeBody.scrollWidth,
30
+ iframeBody.offsetWidth,
31
+ iframeHTML.offsetWidth
32
+ )
42
33
  };
43
- browserWindow.emui[appId].init = async (options) => {
34
+ host.setAppWindowSize({
35
+ appId,
36
+ size
37
+ });
38
+ };
39
+ window.emui = window.emui || { uuid: crypto.randomUUID() };
40
+ window.emui.app = {
41
+ uuid: window.emui.uuid,
42
+ init: async (options) => {
44
43
  host = options.host;
45
44
  parentHistory = options.history;
46
45
  logger = options.logger;
47
46
  window.__TEST__.initOptions = options;
48
- host.subscribe("loanSaved", (msg, data) => {
49
- const appContainer = document.getElementById(appElementId);
50
- if (appContainer) {
51
- const dataEle = document.createElement("p");
52
- dataEle.id = "loanSavedData";
53
- dataEle.innerText = `Loan saved: ${JSON.stringify(data)}`;
54
- appContainer.appendChild(dataEle);
55
- }
56
- });
57
47
  setFrameSize();
58
- };
59
- browserWindow.emui[appId].mount = async (options) => {
48
+ },
49
+ mount: async (options) => {
60
50
  window.__TEST__.mountOptions = options;
61
51
  const appContainer = document.getElementById(appElementId);
62
52
  if (appContainer) {
@@ -80,12 +70,14 @@
80
70
  `App container element with id ${appElementId} not found`
81
71
  );
82
72
  }
83
- };
84
- browserWindow.emui[appId].unmount = () => {
73
+ },
74
+ unmount: () => {
85
75
  const appContainer = document.getElementById(appElementId);
86
76
  if (appContainer) {
87
77
  appContainer.removeChild(appContainer.getElementsByTagName("main")[0]);
88
78
  }
89
79
  return Promise.resolve();
90
- };
91
- })();
80
+ }
81
+ };
82
+ const browserWindow = getWindow();
83
+ browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
@@ -1,24 +1,24 @@
1
1
  import { ScriptingObject } from "@elliemae/microfe-common";
2
2
  class Analytics extends ScriptingObject {
3
3
  constructor() {
4
- super("Analytics");
4
+ super("analytics");
5
5
  }
6
- sendBAEvent(event) {
6
+ sendBAEvent = (event) => {
7
7
  console.log("Analytics.sendBAEvent", event);
8
8
  return Promise.resolve();
9
- }
10
- startTiming(name, options) {
9
+ };
10
+ startTiming = (name, options) => {
11
11
  console.log("Analytics.perfMarkStart", name);
12
12
  return Promise.resolve(performance.mark(name, { detail: options }));
13
- }
14
- endTiming(start, options) {
13
+ };
14
+ endTiming = (start, options) => {
15
15
  console.log("Analytics.perfMarkEnd", start);
16
16
  performance.measure(start, {
17
17
  detail: options,
18
18
  start
19
19
  });
20
20
  return Promise.resolve();
21
- }
21
+ };
22
22
  }
23
23
  export {
24
24
  Analytics
@@ -7,23 +7,19 @@ class AppraisalService extends ScriptingObject {
7
7
  #creditScore;
8
8
  Close = new Event({
9
9
  name: "Close",
10
- requiresFeedback: false,
11
- so: this
10
+ objectId: ScriptingObjectNames.Module
12
11
  });
13
12
  Unloading = new Event({
14
13
  name: "Unloading",
15
- requiresFeedback: false,
16
- so: this
14
+ objectId: ScriptingObjectNames.Module
17
15
  });
18
16
  onPreCommit = new Event({
19
17
  name: "onPreCommit",
20
- requiresFeedback: true,
21
- so: this
18
+ objectId: ScriptingObjectNames.Module
22
19
  });
23
20
  onSaved = new Event({
24
21
  name: "onSaved",
25
- requiresFeedback: false,
26
- so: this
22
+ objectId: ScriptingObjectNames.Module
27
23
  });
28
24
  constructor({
29
25
  loanId,
@@ -55,6 +51,10 @@ class AppraisalService extends ScriptingObject {
55
51
  delete = () => {
56
52
  throw new Error("Not implemented");
57
53
  };
54
+ log = async (message, level) => {
55
+ console.log(message, level);
56
+ return Promise.resolve();
57
+ };
58
58
  unload = async () => {
59
59
  };
60
60
  }
@@ -6,8 +6,7 @@ class Global extends ScriptingObject {
6
6
  }
7
7
  Change = new Event({
8
8
  name: "Change",
9
- requiresFeedback: false,
10
- so: this
9
+ objectId: this.constructor.name
11
10
  });
12
11
  set = (key, value) => {
13
12
  this.#data.set(key, value);
@@ -1,31 +1,30 @@
1
- (function() {
2
- const appId = "taskapp";
3
- const appName = "Task App Dev";
4
- const appElementId = `pui-app-container-${appId}`;
5
- const pipelinePath = "/pipeline";
6
- const pipelineLinkText = "Pipeline";
7
- const getWindow = () => {
8
- try {
9
- window.parent.document;
10
- return window.parent;
11
- } catch (err) {
12
- return window;
13
- }
14
- };
15
- let host = null;
16
- let parentHistory = null;
17
- let logger = null;
18
- const browserWindow = getWindow();
19
- browserWindow.emui = browserWindow.emui || {};
20
- browserWindow.emui[appId] = browserWindow.emui[appId] || {};
21
- window.__TEST__ = {};
22
- browserWindow.emui[appId].init = async (options) => {
1
+ const appId = "taskapp";
2
+ const appName = "Task App Dev";
3
+ const appElementId = `pui-app-container-${appId}`;
4
+ const pipelinePath = "/pipeline";
5
+ const pipelineLinkText = "Pipeline";
6
+ const getWindow = () => {
7
+ try {
8
+ window.parent.document;
9
+ return window.parent;
10
+ } catch (err) {
11
+ return window;
12
+ }
13
+ };
14
+ let host = null;
15
+ let parentHistory = null;
16
+ let logger = null;
17
+ window.__TEST__ = {};
18
+ window.emui = window.emui || { uuid: crypto.randomUUID() };
19
+ window.emui.app = {
20
+ uuid: window.emui.uuid,
21
+ init: async (options) => {
23
22
  window.__TEST__.initOptions = options;
24
23
  host = options.host;
25
24
  parentHistory = options.history;
26
25
  logger = options.logger;
27
- };
28
- browserWindow.emui[appId].mount = async (options) => {
26
+ },
27
+ mount: async (options) => {
29
28
  window.__TEST__.mountOptions = options;
30
29
  const appContainer = document.getElementById(appElementId);
31
30
  if (appContainer) {
@@ -49,12 +48,14 @@
49
48
  `App container element with id ${appElementId} not found`
50
49
  );
51
50
  }
52
- };
53
- browserWindow.emui[appId].unmount = () => {
51
+ },
52
+ unmount: () => {
54
53
  const appContainer = document.getElementById(appElementId);
55
54
  if (appContainer) {
56
55
  appContainer.removeChild(appContainer.getElementsByTagName("main")[0]);
57
56
  }
58
57
  return Promise.resolve();
59
- };
60
- })();
58
+ }
59
+ };
60
+ const browserWindow = getWindow();
61
+ browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
@@ -1,31 +1,30 @@
1
- (function() {
2
- const appId = "taskapp";
3
- const appName = "Task App";
4
- const appElementId = `pui-app-container-${appId}`;
5
- const pipelinePath = "/pipeline";
6
- const pipelineLinkText = "Pipeline";
7
- const getWindow = () => {
8
- try {
9
- window.parent.document;
10
- return window.parent;
11
- } catch (err) {
12
- return window;
13
- }
14
- };
15
- let host = null;
16
- let parentHistory = null;
17
- let logger = null;
18
- const browserWindow = getWindow();
19
- browserWindow.emui = browserWindow.emui || {};
20
- browserWindow.emui[appId] = browserWindow.emui[appId] || {};
21
- window.__TEST__ = {};
22
- browserWindow.emui[appId].init = async (options) => {
1
+ const appId = "taskapp";
2
+ const appName = "Task App";
3
+ const appElementId = `pui-app-container-${appId}`;
4
+ const pipelinePath = "/pipeline";
5
+ const pipelineLinkText = "Pipeline";
6
+ const getWindow = () => {
7
+ try {
8
+ window.parent.document;
9
+ return window.parent;
10
+ } catch (err) {
11
+ return window;
12
+ }
13
+ };
14
+ let host = null;
15
+ let parentHistory = null;
16
+ let logger = null;
17
+ window.__TEST__ = {};
18
+ window.emui = window.emui || { uuid: crypto.randomUUID() };
19
+ window.emui.app = {
20
+ uuid: window.emui.uuid,
21
+ init: async (options) => {
23
22
  window.__TEST__.initOptions = options;
24
23
  host = options.host;
25
24
  parentHistory = options.history;
26
25
  logger = options.logger;
27
- };
28
- browserWindow.emui[appId].mount = async (options) => {
26
+ },
27
+ mount: async (options) => {
29
28
  window.__TEST__.mountOptions = options;
30
29
  const appContainer = document.getElementById(appElementId);
31
30
  if (appContainer) {
@@ -49,12 +48,14 @@
49
48
  `App container element with id ${appElementId} not found`
50
49
  );
51
50
  }
52
- };
53
- browserWindow.emui[appId].unmount = () => {
51
+ },
52
+ unmount: () => {
54
53
  const appContainer = document.getElementById(appElementId);
55
54
  if (appContainer) {
56
55
  appContainer.removeChild(appContainer.getElementsByTagName("main")[0]);
57
56
  }
58
57
  return Promise.resolve();
59
- };
60
- })();
58
+ }
59
+ };
60
+ const browserWindow = getWindow();
61
+ browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
@@ -1,26 +1,24 @@
1
- (function() {
2
- const appId = "travelhub";
3
- const appName = "Travel Hub";
4
- const getWindow = () => {
5
- try {
6
- window.parent.document;
7
- return window.parent;
8
- } catch (err) {
9
- return window;
10
- }
11
- };
12
- const browserWindow = getWindow();
13
- browserWindow.emui = browserWindow.emui || {};
14
- browserWindow.emui[appId] = browserWindow.emui[appId] || {};
15
- const mainElement = document.createElement("main");
16
- mainElement.id = "travelhub";
17
- const pageHeaderEle = document.createElement("h1");
18
- pageHeaderEle.id = "header";
19
- pageHeaderEle.textContent = appName;
20
- mainElement.appendChild(pageHeaderEle);
21
- const versionEle = document.createElement("p");
22
- versionEle.id = "version";
23
- versionEle.textContent = "Version: 23.1";
24
- mainElement.appendChild(versionEle);
25
- document.body.appendChild(mainElement);
26
- })();
1
+ const appId = "travelhub";
2
+ const appName = "Travel Hub";
3
+ const getWindow = () => {
4
+ try {
5
+ window.parent.document;
6
+ return window.parent;
7
+ } catch (err) {
8
+ return window;
9
+ }
10
+ };
11
+ const browserWindow = getWindow();
12
+ browserWindow.emui = browserWindow.emui || {};
13
+ browserWindow.emui[appId] = browserWindow.emui[appId] || {};
14
+ const mainElement = document.createElement("main");
15
+ mainElement.id = "travelhub";
16
+ const pageHeaderEle = document.createElement("h1");
17
+ pageHeaderEle.id = "header";
18
+ pageHeaderEle.textContent = appName;
19
+ mainElement.appendChild(pageHeaderEle);
20
+ const versionEle = document.createElement("p");
21
+ versionEle.id = "version";
22
+ versionEle.textContent = "Version: 23.1";
23
+ mainElement.appendChild(versionEle);
24
+ document.body.appendChild(mainElement);
@@ -1,7 +1,5 @@
1
- (function() {
2
- const mainElement = document.getElementById("travelhub");
3
- const contentEle = document.createElement("p");
4
- contentEle.id = "greeting";
5
- contentEle.textContent = "Hello Travellers!";
6
- mainElement.appendChild(contentEle);
7
- })();
1
+ const mainElement = document.getElementById("travelhub");
2
+ const contentEle = document.createElement("p");
3
+ contentEle.id = "greeting";
4
+ contentEle.textContent = "Hello Travellers!";
5
+ mainElement.appendChild(contentEle);
package/dist/esm/utils.js CHANGED
@@ -1,3 +1,6 @@
1
+ import { throttle } from "lodash";
2
+ const KEEP_ALIVE_INTERVAL = 12e4;
3
+ const userInteractionEvents = ["click", "scroll", "keypress", "touchstart"];
1
4
  const removeDoubleSlash = (url) => url.replace(/([^:]\/)\/+/g, "$1");
2
5
  const getAbsoluteUrl = (url) => {
3
6
  const a = document.createElement("a");
@@ -5,10 +8,37 @@ const getAbsoluteUrl = (url) => {
5
8
  return a.href;
6
9
  };
7
10
  const appendTrailingSlash = (url) => url?.replace?.(/\/?$/, "/");
11
+ const appendPath = (base, path) => `${base.replace(/\/+$/, "")}/${path.replace(/^\/+/, "")}`;
8
12
  const isJSDOM = () => window.navigator.userAgent.includes("jsdom");
13
+ const startKeepSessionAlive = ({
14
+ appObj,
15
+ logger
16
+ }) => {
17
+ if (!appObj) {
18
+ logger.warn("Application object not available to send keep alive");
19
+ return;
20
+ }
21
+ const throttledKeepAlive = throttle(
22
+ async () => {
23
+ try {
24
+ await appObj.keepSessionAlive();
25
+ } catch (e) {
26
+ logger.error(`Error keeping session alive. ${e.message}`);
27
+ }
28
+ },
29
+ KEEP_ALIVE_INTERVAL,
30
+ // throttle time
31
+ { leading: false }
32
+ );
33
+ userInteractionEvents.forEach((eventType) => {
34
+ document.addEventListener(eventType, throttledKeepAlive);
35
+ });
36
+ };
9
37
  export {
38
+ appendPath,
10
39
  appendTrailingSlash,
11
40
  getAbsoluteUrl,
12
41
  isJSDOM,
13
- removeDoubleSlash
42
+ removeDoubleSlash,
43
+ startKeepSessionAlive
14
44
  };
@@ -0,0 +1,47 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="mobile-web-app-capable" content="yes" />
7
+ <link rel="icon" href="/favicon.ico" />
8
+ <title>Application</title>
9
+ <script nonce="__CSP_NONCE__">
10
+ (function (i, s, o, g, r, a, m) {
11
+ i['GoogleAnalyticsObject'] = r;
12
+ (i[r] =
13
+ i[r] ||
14
+ function () {
15
+ (i[r].q = i[r].q || []).push(arguments);
16
+ }),
17
+ (i[r].l = 1 * new Date());
18
+ (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
19
+ a.async = 1;
20
+ a.src = g;
21
+ m.parentNode.insertBefore(a, m);
22
+ })(
23
+ window,
24
+ document,
25
+ 'script',
26
+ 'https://www.google-analytics.com/analytics.js',
27
+ 'ga',
28
+ );
29
+ </script>
30
+ <style nonce="__CSP_NONCE__">
31
+ .full-width {
32
+ width: 100%;
33
+ }
34
+ .full-height {
35
+ height: 100%;
36
+ }
37
+ </style>
38
+ </head>
39
+ <body class="full-width full-height">
40
+ <noscript
41
+ >If you're seeing this message, that means
42
+ <strong>JavaScript has been disabled on your browser</strong>, please
43
+ <strong>enable JS</strong> to make this app work.</noscript
44
+ >
45
+ <div id="pui-app-container-" class="full-width full-height"></div>
46
+ </body>
47
+ </html>