@elliemae/pui-app-sdk 5.22.0 → 5.23.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.
- package/dist/cjs/analytics/index.js +2 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/utils/micro-frontend/app-bridge.js +38 -0
- package/dist/cjs/utils/micro-frontend/guest.js +101 -14
- package/dist/cjs/utils/micro-frontend/host.js +36 -3
- package/dist/cjs/utils/micro-frontend/scripting-objects/analytics.js +8 -14
- package/dist/cjs/utils/micro-frontend/tests/app.config.json +200 -0
- package/dist/cjs/utils/micro-frontend/tests/utils.js +116 -0
- package/dist/cjs/utils/testing/index.js +15 -1
- package/dist/cjs/view/guest-microapp.js +113 -0
- package/dist/cjs/view/micro-iframe-app/iframe/index.js +1 -1
- package/dist/cjs/view/micro-iframe-app/iframe.html +5 -1
- package/dist/cjs/view/micro-iframe-app/use-frame-loaded.js +3 -1
- package/dist/cjs/view/tests/__snapshots__/guest-microapp.test.tsx.snap +21 -0
- package/dist/cjs/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
- package/dist/cjs/view/tests/app.config.json +200 -0
- package/dist/cjs/view/tests/constants.js +44 -0
- package/dist/cjs/view/tests/flights/23.1/app.checksum1.css +3 -0
- package/dist/cjs/view/tests/flights/23.1/app.checksum1.js +52 -0
- package/dist/cjs/view/tests/flights/23.1/manifest.json +4 -0
- package/dist/cjs/view/tests/flights/latest/app.checksum.css +3 -0
- package/dist/cjs/view/tests/flights/latest/app.checksum.js +52 -0
- package/dist/cjs/view/tests/flights/latest/manifest.json +4 -0
- package/dist/cjs/view/tests/hotels/23.1/app.checksum.css +3 -0
- package/dist/cjs/view/tests/hotels/23.1/app.checksum.js +52 -0
- package/dist/cjs/view/tests/hotels/23.1/manifest.json +4 -0
- package/dist/cjs/view/tests/hotels/latest/app.checksum.css +3 -0
- package/dist/cjs/view/tests/hotels/latest/app.checksum.js +52 -0
- package/dist/cjs/view/tests/hotels/latest/manifest.json +4 -0
- package/dist/cjs/view/tests/loan/latest/index.js +116 -0
- package/dist/cjs/view/tests/loan/latest/manifest.json +3 -0
- package/dist/cjs/view/tests/scriptingObjects/appraisalServiceModule.js +81 -0
- package/dist/cjs/{utils/micro-frontend/host-app.js → view/tests/scriptingObjects/constant.js} +5 -10
- package/dist/cjs/view/tests/scriptingObjects/global.js +40 -0
- package/dist/cjs/view/tests/scriptingObjects/loan.js +200 -0
- package/dist/cjs/view/tests/server.js +29 -0
- package/dist/cjs/view/tests/serverHandlers.js +210 -0
- package/dist/cjs/view/tests/task/latest/index.dev.js +67 -0
- package/dist/cjs/view/tests/task/latest/index.js +67 -0
- package/dist/cjs/view/tests/task/latest/manifest.json +4 -0
- package/dist/cjs/view/tests/travelhub/23.1/app.checksum.css +3 -0
- package/dist/cjs/view/tests/travelhub/23.1/app.checksum.js +25 -0
- package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
- package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.js +6 -0
- package/dist/cjs/view/tests/travelhub/23.1/manifest.json +6 -0
- package/dist/cjs/view/tests/travelhub/latest/app.checksum.css +3 -0
- package/dist/cjs/view/tests/travelhub/latest/app.checksum.js +30 -0
- package/dist/cjs/view/tests/travelhub/latest/landing.checksum.css +3 -0
- package/dist/cjs/view/tests/travelhub/latest/landing.checksum.js +8 -0
- package/dist/cjs/view/tests/travelhub/latest/manifest.json +6 -0
- package/dist/cjs/{utils/micro-frontend/ssfguest-adapter.js → view/tests/utils.js} +34 -29
- package/dist/esm/analytics/index.js +2 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/utils/micro-frontend/app-bridge.js +18 -0
- package/dist/esm/utils/micro-frontend/guest.js +101 -14
- package/dist/esm/utils/micro-frontend/host.js +36 -3
- package/dist/esm/utils/micro-frontend/scripting-objects/analytics.js +8 -4
- package/dist/esm/utils/micro-frontend/tests/app.config.json +200 -0
- package/dist/esm/utils/micro-frontend/tests/utils.js +96 -0
- package/dist/esm/utils/testing/index.js +5 -1
- package/dist/esm/view/guest-microapp.js +83 -0
- package/dist/esm/view/micro-iframe-app/iframe/index.js +1 -1
- package/dist/esm/view/micro-iframe-app/iframe.html +5 -1
- package/dist/esm/view/micro-iframe-app/use-frame-loaded.js +3 -1
- package/dist/esm/view/tests/__snapshots__/guest-microapp.test.tsx.snap +21 -0
- package/dist/esm/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
- package/dist/esm/view/tests/app.config.json +200 -0
- package/dist/esm/view/tests/constants.js +24 -0
- package/dist/esm/view/tests/flights/23.1/app.checksum1.css +3 -0
- package/dist/esm/view/tests/flights/23.1/app.checksum1.js +51 -0
- package/dist/esm/view/tests/flights/23.1/manifest.json +4 -0
- package/dist/esm/view/tests/flights/latest/app.checksum.css +3 -0
- package/dist/esm/view/tests/flights/latest/app.checksum.js +51 -0
- package/dist/esm/view/tests/flights/latest/manifest.json +4 -0
- package/dist/esm/view/tests/hotels/23.1/app.checksum.css +3 -0
- package/dist/esm/view/tests/hotels/23.1/app.checksum.js +51 -0
- package/dist/esm/view/tests/hotels/23.1/manifest.json +4 -0
- package/dist/esm/view/tests/hotels/latest/app.checksum.css +3 -0
- package/dist/esm/view/tests/hotels/latest/app.checksum.js +51 -0
- package/dist/esm/view/tests/hotels/latest/manifest.json +4 -0
- package/dist/esm/view/tests/loan/latest/index.js +115 -0
- package/dist/esm/view/tests/loan/latest/manifest.json +3 -0
- package/dist/esm/view/tests/scriptingObjects/appraisalServiceModule.js +63 -0
- package/dist/esm/view/tests/scriptingObjects/constant.js +4 -0
- package/dist/esm/view/tests/scriptingObjects/global.js +22 -0
- package/dist/esm/view/tests/scriptingObjects/loan.js +180 -0
- package/dist/esm/view/tests/server.js +9 -0
- package/dist/esm/view/tests/serverHandlers.js +180 -0
- package/dist/esm/view/tests/task/latest/index.dev.js +66 -0
- package/dist/esm/view/tests/task/latest/index.js +66 -0
- package/dist/esm/view/tests/task/latest/manifest.json +4 -0
- package/dist/esm/view/tests/travelhub/23.1/app.checksum.css +3 -0
- package/dist/esm/view/tests/travelhub/23.1/app.checksum.js +24 -0
- package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
- package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.js +5 -0
- package/dist/esm/view/tests/travelhub/23.1/manifest.json +6 -0
- package/dist/esm/view/tests/travelhub/latest/app.checksum.css +3 -0
- package/dist/esm/view/tests/travelhub/latest/app.checksum.js +29 -0
- package/dist/esm/view/tests/travelhub/latest/landing.checksum.css +3 -0
- package/dist/esm/view/tests/travelhub/latest/landing.checksum.js +7 -0
- package/dist/esm/view/tests/travelhub/latest/manifest.json +6 -0
- package/dist/esm/view/tests/utils.js +33 -0
- package/dist/types/lib/index.d.ts +2 -1
- package/dist/types/lib/utils/micro-frontend/app-bridge.d.ts +4 -0
- package/dist/types/lib/utils/micro-frontend/guest.d.ts +46 -11
- package/dist/types/lib/utils/micro-frontend/host.d.ts +27 -10
- package/dist/types/lib/utils/micro-frontend/scripting-objects/analytics.d.ts +8 -5
- package/dist/types/lib/utils/micro-frontend/tests/utils.d.ts +39 -0
- package/dist/types/lib/utils/micro-frontend/types.d.ts +2 -1
- package/dist/types/lib/utils/testing/index.d.ts +57 -1
- package/dist/types/lib/utils/window.d.ts +13 -6
- package/dist/types/lib/view/guest-microapp.d.ts +13 -0
- package/dist/types/lib/view/micro-app/index.d.ts +5 -0
- package/dist/types/lib/view/micro-iframe-app/index.d.ts +5 -0
- package/dist/types/lib/view/tests/constants.d.ts +11 -0
- package/dist/types/lib/view/tests/flights/23.1/app.checksum1.d.ts +7 -0
- package/dist/types/lib/view/tests/flights/latest/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/hotels/23.1/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/hotels/latest/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/loan/latest/index.d.ts +11 -0
- package/dist/types/lib/view/tests/micro-iframe-app.test.d.ts +1 -0
- package/dist/types/lib/view/tests/scriptingObjects/appraisalServiceModule.d.ts +36 -0
- package/dist/types/lib/view/tests/scriptingObjects/constant.d.ts +1 -0
- package/dist/types/lib/view/tests/scriptingObjects/global.d.ts +9 -0
- package/dist/types/lib/view/tests/scriptingObjects/loan.d.ts +31 -0
- package/dist/types/lib/view/tests/server.d.ts +1 -0
- package/dist/types/lib/view/tests/serverHandlers.d.ts +5 -0
- package/dist/types/lib/view/tests/task/latest/index.d.ts +10 -0
- package/dist/types/lib/view/tests/task/latest/index.dev.d.ts +10 -0
- package/dist/types/lib/view/tests/travelhub/23.1/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/travelhub/23.1/landing.checksum1.d.ts +2 -0
- package/dist/types/lib/view/tests/travelhub/latest/app.checksum.d.ts +0 -0
- package/dist/types/lib/view/tests/travelhub/latest/landing.checksum.d.ts +0 -0
- package/dist/types/lib/view/tests/utils.d.ts +7 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +44 -44
- package/dist/esm/utils/micro-frontend/host-app.js +0 -9
- package/dist/esm/utils/micro-frontend/ssfguest-adapter.js +0 -28
- package/dist/types/lib/utils/micro-frontend/host-app.d.ts +0 -11
- package/dist/types/lib/utils/micro-frontend/ssfguest-adapter.d.ts +0 -7
- /package/dist/types/lib/{utils/micro-frontend/tests/guest-ssf-host.test.d.ts → view/tests/guest-microapp.test.d.ts} +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ScriptingObjectNames
|
|
3
|
+
} from "@elliemae/pui-scripting-object";
|
|
4
|
+
import { ScriptingObject, Event } from "@elliemae/microfe-common";
|
|
5
|
+
class Global extends ScriptingObject {
|
|
6
|
+
#data = /* @__PURE__ */ new Map();
|
|
7
|
+
constructor() {
|
|
8
|
+
super("Global");
|
|
9
|
+
}
|
|
10
|
+
Change = new Event({
|
|
11
|
+
name: "Change",
|
|
12
|
+
objectId: ScriptingObjectNames.Global
|
|
13
|
+
});
|
|
14
|
+
set = (key, value) => {
|
|
15
|
+
this.#data.set(key, value);
|
|
16
|
+
return Promise.resolve();
|
|
17
|
+
};
|
|
18
|
+
get = (key) => Promise.resolve(this.#data.get(key) || "");
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
Global
|
|
22
|
+
};
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { ScriptingObject, Event } from "@elliemae/pui-app-bridge";
|
|
2
|
+
class Loan extends ScriptingObject {
|
|
3
|
+
#loanData;
|
|
4
|
+
#appBridge;
|
|
5
|
+
constructor(appBridge) {
|
|
6
|
+
super("loan");
|
|
7
|
+
this.#appBridge = appBridge;
|
|
8
|
+
this.#loanData = {
|
|
9
|
+
id: "1234567890",
|
|
10
|
+
status: "active",
|
|
11
|
+
loanAmount: 1e5,
|
|
12
|
+
interestRate: 3.5,
|
|
13
|
+
term: 30
|
|
14
|
+
};
|
|
15
|
+
window.__TEST__ = window.__TEST__ ?? {};
|
|
16
|
+
window.__TEST__.soLogs = window.__TEST__.soLogs ?? [];
|
|
17
|
+
}
|
|
18
|
+
#log(message) {
|
|
19
|
+
window.__TEST__.soLogs.push(message);
|
|
20
|
+
}
|
|
21
|
+
ApplicationSelected = new Event({
|
|
22
|
+
name: "applicationselected",
|
|
23
|
+
objectId: "loan"
|
|
24
|
+
});
|
|
25
|
+
Close = new Event({
|
|
26
|
+
name: "close",
|
|
27
|
+
objectId: "loan"
|
|
28
|
+
});
|
|
29
|
+
Change = new Event({
|
|
30
|
+
name: "change",
|
|
31
|
+
objectId: "loan"
|
|
32
|
+
});
|
|
33
|
+
Committed = new Event({
|
|
34
|
+
name: "committed",
|
|
35
|
+
objectId: "loan"
|
|
36
|
+
});
|
|
37
|
+
EditModeChange = new Event({
|
|
38
|
+
name: "editmodechange",
|
|
39
|
+
objectId: "loan"
|
|
40
|
+
});
|
|
41
|
+
MilestoneCompleted = new Event({
|
|
42
|
+
name: "milestonecompleted",
|
|
43
|
+
objectId: "loan"
|
|
44
|
+
});
|
|
45
|
+
Open = new Event({
|
|
46
|
+
name: "open",
|
|
47
|
+
objectId: "loan"
|
|
48
|
+
});
|
|
49
|
+
PreCommit = new Event({
|
|
50
|
+
name: "precommit",
|
|
51
|
+
objectId: "loan"
|
|
52
|
+
});
|
|
53
|
+
PreMilestoneComplete = new Event({
|
|
54
|
+
name: "premilestonecomplete",
|
|
55
|
+
objectId: "loan"
|
|
56
|
+
});
|
|
57
|
+
Sync = new Event({
|
|
58
|
+
name: "sync",
|
|
59
|
+
objectId: "loan"
|
|
60
|
+
});
|
|
61
|
+
all = () => {
|
|
62
|
+
this.#log("loan.all");
|
|
63
|
+
return Promise.resolve(this.#loanData);
|
|
64
|
+
};
|
|
65
|
+
applyLock = (fieldId, lock) => {
|
|
66
|
+
this.#log(`loan.applyLock: fieldId: ${fieldId}, lock: ${String(lock)}`);
|
|
67
|
+
return Promise.resolve();
|
|
68
|
+
};
|
|
69
|
+
calculate = () => {
|
|
70
|
+
this.#log("loan.calculate");
|
|
71
|
+
return Promise.resolve(this.#loanData);
|
|
72
|
+
};
|
|
73
|
+
commit = async () => {
|
|
74
|
+
this.#log("loan.commit");
|
|
75
|
+
const feedBack = await this.#appBridge.dispatchEvent({
|
|
76
|
+
event: this.PreCommit,
|
|
77
|
+
eventParams: {
|
|
78
|
+
id: this.#loanData.id
|
|
79
|
+
},
|
|
80
|
+
eventOptions: {
|
|
81
|
+
timeout: 1e3
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
this.#log(`loan.precommit:event:feedback: ${JSON.stringify(feedBack)}`);
|
|
85
|
+
if (feedBack.every((item) => item === true)) {
|
|
86
|
+
this.#log("loan.commit:succeed");
|
|
87
|
+
} else {
|
|
88
|
+
this.#log("loan.commit:failed");
|
|
89
|
+
}
|
|
90
|
+
return this.#loanData.id;
|
|
91
|
+
};
|
|
92
|
+
execAction = (type, params) => {
|
|
93
|
+
this.#log(
|
|
94
|
+
`loan.execAction: type: ${type}, params: ${JSON.stringify(params)}`
|
|
95
|
+
);
|
|
96
|
+
return Promise.resolve({
|
|
97
|
+
status: "success",
|
|
98
|
+
message: "Action executed successfully"
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
getCollection = (name) => {
|
|
102
|
+
this.#log(`loan.getCollection: name: ${name}`);
|
|
103
|
+
return Promise.resolve({
|
|
104
|
+
name,
|
|
105
|
+
data: [],
|
|
106
|
+
id: "collection-id",
|
|
107
|
+
objectType: "LoanCollection",
|
|
108
|
+
removeAt: (index) => {
|
|
109
|
+
this.#log(`loan.getCollection.removeAt: index: ${index}`);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
getCurrentApplication = () => {
|
|
114
|
+
this.#log("loan.getCurrentApplication");
|
|
115
|
+
return Promise.resolve({
|
|
116
|
+
...this.#loanData,
|
|
117
|
+
index: 0,
|
|
118
|
+
legacyId: "legacy-id"
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
getField = (id) => {
|
|
122
|
+
this.#log(`loan.getField: id: ${id}`);
|
|
123
|
+
return Promise.resolve(this.#loanData.name);
|
|
124
|
+
};
|
|
125
|
+
getFieldOptions = (param) => {
|
|
126
|
+
this.#log(`loan.getFieldOptions: param: ${JSON.stringify(param)}`);
|
|
127
|
+
return Promise.resolve({
|
|
128
|
+
fieldId: [
|
|
129
|
+
{
|
|
130
|
+
id: "option1",
|
|
131
|
+
label: "Option 1",
|
|
132
|
+
name: "OptionName1",
|
|
133
|
+
value: "OptionValue1"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: "option2",
|
|
137
|
+
label: "Option 2",
|
|
138
|
+
name: "OptionName2",
|
|
139
|
+
value: "OptionValue2"
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
getFields = (ids) => {
|
|
145
|
+
this.#log(`loan.getFields: ids: ${JSON.stringify(ids)}`);
|
|
146
|
+
const fields = ids.reduce((acc, id) => {
|
|
147
|
+
acc[id] = this.#loanData.name;
|
|
148
|
+
return acc;
|
|
149
|
+
}, {});
|
|
150
|
+
return Promise.resolve(fields);
|
|
151
|
+
};
|
|
152
|
+
isReadOnly = () => {
|
|
153
|
+
this.#log("loan.isReadOnly");
|
|
154
|
+
return Promise.resolve(false);
|
|
155
|
+
};
|
|
156
|
+
merge = () => {
|
|
157
|
+
this.#log("loan.merge");
|
|
158
|
+
return Promise.resolve();
|
|
159
|
+
};
|
|
160
|
+
setCurrentApplication = (options) => {
|
|
161
|
+
this.#log(
|
|
162
|
+
`loan.setCurrentApplication: options: ${JSON.stringify(options)}`
|
|
163
|
+
);
|
|
164
|
+
return Promise.resolve();
|
|
165
|
+
};
|
|
166
|
+
setEditMode = (options) => {
|
|
167
|
+
this.#log(`loan.setEditMode: options: ${JSON.stringify(options)}`);
|
|
168
|
+
return Promise.resolve();
|
|
169
|
+
};
|
|
170
|
+
setFields = (fields) => {
|
|
171
|
+
this.#log(`loan.setFields: fields: ${JSON.stringify(fields)}`);
|
|
172
|
+
Object.keys(fields).forEach((key) => {
|
|
173
|
+
const field = fields[key];
|
|
174
|
+
});
|
|
175
|
+
return Promise.resolve();
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
export {
|
|
179
|
+
Loan
|
|
180
|
+
};
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { rest } from "msw";
|
|
2
|
+
import { readFile } from "fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import appConfig from "./app.config.json";
|
|
5
|
+
import loanAppManifest from "./loan/latest/manifest.json";
|
|
6
|
+
import latestTaskManifest from "./task/latest/manifest.json";
|
|
7
|
+
import latestAppManifest from "./travelhub/latest/manifest.json";
|
|
8
|
+
import versionedAppManifest from "./travelhub/23.1/manifest.json";
|
|
9
|
+
import latestFlightsManifest from "./flights/latest/manifest.json";
|
|
10
|
+
import versionedFlightsManifest from "./flights/23.1/manifest.json";
|
|
11
|
+
import latestHotelsManifest from "./hotels/latest/manifest.json";
|
|
12
|
+
import versionedHotelsManifest from "./hotels/23.1/manifest.json";
|
|
13
|
+
import { LATEST_VERSION, RELEASE_VERSION } from "./constants.js";
|
|
14
|
+
import { getMajorMinorVersion } from "./utils.js";
|
|
15
|
+
const relMajorMinorVersion = getMajorMinorVersion(RELEASE_VERSION);
|
|
16
|
+
var ResourceType = /* @__PURE__ */ ((ResourceType2) => {
|
|
17
|
+
ResourceType2["JS"] = "js";
|
|
18
|
+
ResourceType2["CSS"] = "css";
|
|
19
|
+
return ResourceType2;
|
|
20
|
+
})(ResourceType || {});
|
|
21
|
+
const manifests = {
|
|
22
|
+
task: {
|
|
23
|
+
latest: latestTaskManifest
|
|
24
|
+
},
|
|
25
|
+
travelHub: {
|
|
26
|
+
latest: latestAppManifest
|
|
27
|
+
},
|
|
28
|
+
flights: {
|
|
29
|
+
latest: latestFlightsManifest
|
|
30
|
+
},
|
|
31
|
+
hotels: {
|
|
32
|
+
latest: latestHotelsManifest
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
manifests.task[relMajorMinorVersion] = {};
|
|
36
|
+
manifests.travelHub[relMajorMinorVersion] = versionedAppManifest;
|
|
37
|
+
manifests.flights[relMajorMinorVersion] = versionedFlightsManifest;
|
|
38
|
+
manifests.hotels[relMajorMinorVersion] = versionedHotelsManifest;
|
|
39
|
+
const sendResource = async (res, ctx, filePath, type = "js" /* JS */) => {
|
|
40
|
+
const fileContent = await readFile(path.join(__dirname, filePath), "utf-8");
|
|
41
|
+
return res(
|
|
42
|
+
ctx.status(200),
|
|
43
|
+
ctx.set(
|
|
44
|
+
"Content-Type",
|
|
45
|
+
type === "js" /* JS */ ? "application/javascript" : "text/css"
|
|
46
|
+
),
|
|
47
|
+
ctx.body(fileContent)
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
const getAppResourceHandlers = (urls, baseFolder) => urls.map((url) => {
|
|
51
|
+
const handler = rest.get(url, async (req, res, ctx) => {
|
|
52
|
+
const newRes = await sendResource(
|
|
53
|
+
res,
|
|
54
|
+
ctx,
|
|
55
|
+
`${baseFolder}${url}`,
|
|
56
|
+
url.includes(".css") ? "css" /* CSS */ : "js" /* JS */
|
|
57
|
+
);
|
|
58
|
+
return newRes;
|
|
59
|
+
});
|
|
60
|
+
return handler;
|
|
61
|
+
});
|
|
62
|
+
const sendJS = async (res, ctx, filePath) => {
|
|
63
|
+
const fileContent = await readFile(path.join(__dirname, filePath), "utf-8");
|
|
64
|
+
return res(
|
|
65
|
+
ctx.status(200),
|
|
66
|
+
ctx.set("Content-Type", "application/javascript"),
|
|
67
|
+
ctx.body(fileContent)
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
const getServerHandlers = () => {
|
|
71
|
+
const relVersion = getMajorMinorVersion(RELEASE_VERSION);
|
|
72
|
+
const versionedHandlers = [LATEST_VERSION, relVersion].reduce(
|
|
73
|
+
(prevValue, version) => {
|
|
74
|
+
prevValue = prevValue.concat([
|
|
75
|
+
rest.get(
|
|
76
|
+
`/travelhub/${version}/manifest.json`,
|
|
77
|
+
(req, res, ctx) => res(ctx.json(manifests.travelHub[version]))
|
|
78
|
+
),
|
|
79
|
+
rest.get(
|
|
80
|
+
`/subfolder/${version}/manifest.json`,
|
|
81
|
+
(req, res, ctx) => res(ctx.json(manifests.travelHub[version]))
|
|
82
|
+
),
|
|
83
|
+
rest.get(
|
|
84
|
+
`/task/${version}/manifest.json`,
|
|
85
|
+
(req, res, ctx) => res(ctx.json(manifests.task[version]))
|
|
86
|
+
),
|
|
87
|
+
rest.get(
|
|
88
|
+
`/flights/${version}/manifest.json`,
|
|
89
|
+
(req, res, ctx) => res(ctx.json(manifests.flights[version]))
|
|
90
|
+
),
|
|
91
|
+
rest.get(
|
|
92
|
+
`/hotels/${version}/manifest.json`,
|
|
93
|
+
(req, res, ctx) => res(ctx.json(manifests.hotels[version]))
|
|
94
|
+
),
|
|
95
|
+
...getAppResourceHandlers(
|
|
96
|
+
[
|
|
97
|
+
`/task/${version}/index.js`,
|
|
98
|
+
`/task/${version}/index.dev.js`,
|
|
99
|
+
`/travelhub/${version}/app.checksum.js`,
|
|
100
|
+
`/travelhub/${version}/app.checksum.css`,
|
|
101
|
+
`/travelhub/${version}/landing.checksum.js`,
|
|
102
|
+
`/travelhub/${version}/landing.checksum.css`,
|
|
103
|
+
`/travelhub/${version}/landing.checksum1.js`,
|
|
104
|
+
`/travelhub/${version}/landing.checksum1.css`,
|
|
105
|
+
`/flights/${version}/app.checksum.js`,
|
|
106
|
+
`/flights/${version}/app.checksum.css`,
|
|
107
|
+
`/flights/${version}/app.checksum1.js`,
|
|
108
|
+
`/flights/${version}/app.checksum1.css`,
|
|
109
|
+
`/hotels/${version}/app.checksum.js`,
|
|
110
|
+
`/hotels/${version}/app.checksum.css`,
|
|
111
|
+
`/hotels/${version}/app.checksum1.js`,
|
|
112
|
+
`/hotels/${version}/app.checksum1.css`
|
|
113
|
+
],
|
|
114
|
+
"./"
|
|
115
|
+
)
|
|
116
|
+
]);
|
|
117
|
+
return prevValue;
|
|
118
|
+
},
|
|
119
|
+
[]
|
|
120
|
+
);
|
|
121
|
+
return versionedHandlers;
|
|
122
|
+
};
|
|
123
|
+
const serverHandlers = [
|
|
124
|
+
rest.get(
|
|
125
|
+
"https://www.google-analytics.com/analytics.js",
|
|
126
|
+
(req, res, ctx) => res(
|
|
127
|
+
ctx.status(200),
|
|
128
|
+
ctx.set("Content-Type", "application/javascript"),
|
|
129
|
+
ctx.body("")
|
|
130
|
+
)
|
|
131
|
+
),
|
|
132
|
+
rest.get(
|
|
133
|
+
"/latest/app.config.json",
|
|
134
|
+
(req, res, ctx) => res(ctx.json(appConfig))
|
|
135
|
+
),
|
|
136
|
+
rest.get(
|
|
137
|
+
`/${relMajorMinorVersion}/app.config.json`,
|
|
138
|
+
(req, res, ctx) => res(ctx.json(appConfig))
|
|
139
|
+
),
|
|
140
|
+
// frame html
|
|
141
|
+
rest.get("/iframe.html", async (req, res, ctx) => {
|
|
142
|
+
const fileContent = await readFile(
|
|
143
|
+
path.join(__dirname, "../micro-iframe-app/iframe.html"),
|
|
144
|
+
"utf-8"
|
|
145
|
+
);
|
|
146
|
+
return res(
|
|
147
|
+
ctx.status(200),
|
|
148
|
+
ctx.set("Content-Type", "text/html"),
|
|
149
|
+
ctx.body(fileContent)
|
|
150
|
+
);
|
|
151
|
+
}),
|
|
152
|
+
rest.get("/frame.html", async (req, res, ctx) => {
|
|
153
|
+
const fileContent = await readFile(
|
|
154
|
+
path.join(
|
|
155
|
+
process.cwd(),
|
|
156
|
+
"node_modules/@elliemae/pui-app-bridge/dist/esm/frame.html"
|
|
157
|
+
),
|
|
158
|
+
"utf-8"
|
|
159
|
+
);
|
|
160
|
+
return res(
|
|
161
|
+
ctx.status(200),
|
|
162
|
+
ctx.set("Content-Type", "text/html"),
|
|
163
|
+
ctx.body(fileContent)
|
|
164
|
+
);
|
|
165
|
+
}),
|
|
166
|
+
rest.get("/loan/latest/index.js", async (req, res, ctx) => {
|
|
167
|
+
const newRes = await sendJS(res, ctx, "./loan/latest/index.js");
|
|
168
|
+
return newRes;
|
|
169
|
+
}),
|
|
170
|
+
// loan microapp handler
|
|
171
|
+
rest.get(
|
|
172
|
+
"/loan/latest/manifest.json",
|
|
173
|
+
(req, res, ctx) => res(ctx.json(loanAppManifest))
|
|
174
|
+
),
|
|
175
|
+
...getServerHandlers()
|
|
176
|
+
];
|
|
177
|
+
export {
|
|
178
|
+
getServerHandlers,
|
|
179
|
+
serverHandlers
|
|
180
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
const browserWindow = getWindow();
|
|
18
|
+
browserWindow.__TEST__ = browserWindow.__TEST__ ?? {
|
|
19
|
+
logs: []
|
|
20
|
+
};
|
|
21
|
+
window.emui = window.emui || { uuid: crypto.randomUUID() };
|
|
22
|
+
window.emui.app = {
|
|
23
|
+
uuid: window.emui.uuid,
|
|
24
|
+
init: async (options) => {
|
|
25
|
+
browserWindow.__TEST__.logs.push(`${appId} initializing`);
|
|
26
|
+
host = options.host;
|
|
27
|
+
parentHistory = options.history;
|
|
28
|
+
logger = options.logger;
|
|
29
|
+
},
|
|
30
|
+
mount: async () => {
|
|
31
|
+
browserWindow.__TEST__.logs.push(`${appId} mounting`);
|
|
32
|
+
const appContainer = document.getElementById(appElementId);
|
|
33
|
+
if (appContainer) {
|
|
34
|
+
const mainElement = document.createElement("main");
|
|
35
|
+
appContainer.appendChild(mainElement);
|
|
36
|
+
const pageHeaderEle = document.createElement("h1");
|
|
37
|
+
pageHeaderEle.textContent = appName;
|
|
38
|
+
mainElement.appendChild(pageHeaderEle);
|
|
39
|
+
const contentEle = document.createElement("p");
|
|
40
|
+
contentEle.textContent = "Go to ";
|
|
41
|
+
mainElement.appendChild(contentEle);
|
|
42
|
+
const linkEle = document.createElement("a");
|
|
43
|
+
linkEle.href = "#";
|
|
44
|
+
linkEle.onclick = () => {
|
|
45
|
+
parentHistory?.push?.(pipelinePath);
|
|
46
|
+
};
|
|
47
|
+
linkEle.textContent = pipelineLinkText;
|
|
48
|
+
contentEle.appendChild(linkEle);
|
|
49
|
+
browserWindow.__TEST__.logs.push(`${appId} mounted`);
|
|
50
|
+
} else {
|
|
51
|
+
throw new Error(
|
|
52
|
+
`App container element with id ${appElementId} not found`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
unmount: () => {
|
|
57
|
+
browserWindow.__TEST__.logs.push(`${appId} unmounting`);
|
|
58
|
+
const appContainer = document.getElementById(appElementId);
|
|
59
|
+
if (appContainer) {
|
|
60
|
+
appContainer.removeChild(appContainer.getElementsByTagName("main")[0]);
|
|
61
|
+
}
|
|
62
|
+
browserWindow.__TEST__.logs.push(`${appId} unmounted`);
|
|
63
|
+
return Promise.resolve();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
const browserWindow = getWindow();
|
|
18
|
+
browserWindow.__TEST__ = browserWindow.__TEST__ ?? {
|
|
19
|
+
logs: []
|
|
20
|
+
};
|
|
21
|
+
window.emui = window.emui || { uuid: crypto.randomUUID() };
|
|
22
|
+
window.emui.app = {
|
|
23
|
+
uuid: window.emui.uuid,
|
|
24
|
+
init: async (options) => {
|
|
25
|
+
browserWindow.__TEST__.logs.push(`${appId} initializing`);
|
|
26
|
+
host = options.host;
|
|
27
|
+
parentHistory = options.history;
|
|
28
|
+
logger = options.logger;
|
|
29
|
+
},
|
|
30
|
+
mount: async () => {
|
|
31
|
+
browserWindow.__TEST__.logs.push(`${appId} mounting`);
|
|
32
|
+
const appContainer = document.getElementById(appElementId);
|
|
33
|
+
if (appContainer) {
|
|
34
|
+
const mainElement = document.createElement("main");
|
|
35
|
+
appContainer.appendChild(mainElement);
|
|
36
|
+
const pageHeaderEle = document.createElement("h1");
|
|
37
|
+
pageHeaderEle.textContent = appName;
|
|
38
|
+
mainElement.appendChild(pageHeaderEle);
|
|
39
|
+
const contentEle = document.createElement("p");
|
|
40
|
+
contentEle.textContent = "Go to ";
|
|
41
|
+
mainElement.appendChild(contentEle);
|
|
42
|
+
const linkEle = document.createElement("a");
|
|
43
|
+
linkEle.href = "#";
|
|
44
|
+
linkEle.onclick = () => {
|
|
45
|
+
parentHistory?.push?.(pipelinePath);
|
|
46
|
+
};
|
|
47
|
+
linkEle.textContent = pipelineLinkText;
|
|
48
|
+
contentEle.appendChild(linkEle);
|
|
49
|
+
browserWindow.__TEST__.logs.push(`${appId} mounted`);
|
|
50
|
+
} else {
|
|
51
|
+
throw new Error(
|
|
52
|
+
`App container element with id ${appElementId} not found`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
unmount: () => {
|
|
57
|
+
browserWindow.__TEST__.logs.push(`${appId} unmounting`);
|
|
58
|
+
const appContainer = document.getElementById(appElementId);
|
|
59
|
+
if (appContainer) {
|
|
60
|
+
appContainer.removeChild(appContainer.getElementsByTagName("main")[0]);
|
|
61
|
+
}
|
|
62
|
+
browserWindow.__TEST__.logs.push(`${appId} unmounted`);
|
|
63
|
+
return Promise.resolve();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
|
|
@@ -0,0 +1,24 @@
|
|
|
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);
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
browserWindow.__TEST__ = browserWindow.__TEST__ ?? {
|
|
16
|
+
logs: []
|
|
17
|
+
};
|
|
18
|
+
const mainElement = document.createElement("main");
|
|
19
|
+
mainElement.id = "travelhub";
|
|
20
|
+
const pageHeaderEle = document.createElement("h1");
|
|
21
|
+
pageHeaderEle.id = "header";
|
|
22
|
+
pageHeaderEle.textContent = appName;
|
|
23
|
+
mainElement.appendChild(pageHeaderEle);
|
|
24
|
+
const versionEle = document.createElement("p");
|
|
25
|
+
versionEle.id = "version";
|
|
26
|
+
versionEle.textContent = "Version: latest";
|
|
27
|
+
mainElement.appendChild(versionEle);
|
|
28
|
+
document.body.appendChild(mainElement);
|
|
29
|
+
})();
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { logger as puiLogger, Console } from "@elliemae/pui-diagnostics";
|
|
4
|
+
const getMajorMinorVersion = (version) => version.split(".").slice(0, 2).join(".");
|
|
5
|
+
const sendJS = async (res, ctx, filePath) => {
|
|
6
|
+
const fileContent = await readFile(path.join(__dirname, filePath), "utf-8");
|
|
7
|
+
return res.once(
|
|
8
|
+
ctx.status(200),
|
|
9
|
+
ctx.set("Content-Type", "application/javascript"),
|
|
10
|
+
ctx.body(fileContent)
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
const sendJSText = async (res, ctx, fileContent) => res.once(
|
|
14
|
+
ctx.status(200),
|
|
15
|
+
ctx.set("Content-Type", "application/javascript"),
|
|
16
|
+
ctx.body(fileContent)
|
|
17
|
+
);
|
|
18
|
+
const releaseJSThread = () => new Promise((resolve) => {
|
|
19
|
+
setTimeout(resolve, 0);
|
|
20
|
+
});
|
|
21
|
+
const logger = puiLogger({
|
|
22
|
+
transport: Console(),
|
|
23
|
+
index: "microfe",
|
|
24
|
+
team: "ui platform",
|
|
25
|
+
appName: "MicroFE Tests"
|
|
26
|
+
});
|
|
27
|
+
export {
|
|
28
|
+
getMajorMinorVersion,
|
|
29
|
+
logger,
|
|
30
|
+
releaseJSThread,
|
|
31
|
+
sendJS,
|
|
32
|
+
sendJSText
|
|
33
|
+
};
|