@servicetitan/web-components 22.0.5 → 22.2.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/common.d.ts +7 -1
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +8 -2
- package/dist/common.js.map +1 -1
- package/dist/event-bus.d.ts +8 -4
- package/dist/event-bus.d.ts.map +1 -1
- package/dist/event-bus.js +4 -2
- package/dist/event-bus.js.map +1 -1
- package/dist/loader.d.ts +3 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +16 -9
- package/dist/loader.js.map +1 -1
- package/dist/register.js +2 -2
- package/dist/register.js.map +1 -1
- package/package.json +7 -7
- package/src/__tests__/common.test.ts +94 -0
- package/src/common.ts +16 -2
- package/src/event-bus.ts +18 -5
- package/src/loader.tsx +46 -10
- package/src/register.tsx +2 -2
package/dist/common.d.ts
CHANGED
|
@@ -22,11 +22,17 @@ export interface IWebComponent {
|
|
|
22
22
|
provide(entries: Entries): void;
|
|
23
23
|
}
|
|
24
24
|
export declare function isCompatible(hostVersion: string, packageVersion: string): boolean;
|
|
25
|
+
export interface GetJsonError {
|
|
26
|
+
status: number;
|
|
27
|
+
body: string;
|
|
28
|
+
json: object;
|
|
29
|
+
}
|
|
25
30
|
interface GetJsonOptions extends RequestInit {
|
|
26
31
|
retries?: number;
|
|
27
32
|
retryDelay?: number;
|
|
33
|
+
onRequestError?(error: GetJsonError): void;
|
|
28
34
|
}
|
|
29
|
-
export declare function getJson<T = any>(url: string, { retries, retryDelay, ...config }?: GetJsonOptions): Promise<{
|
|
35
|
+
export declare function getJson<T = any>(url: string, { retries, retryDelay, onRequestError, ...config }?: GetJsonOptions): Promise<{
|
|
30
36
|
data: T;
|
|
31
37
|
headers: Headers;
|
|
32
38
|
url: string;
|
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,oBAAY,mBAAmB,GAAG,MAAM,CACpC,MAAM,EACN;IACI,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CACJ,CAAC;AAEF,eAAO,MAAM,cAAc,uDAAwC,CAAC;AACpE,eAAO,MAAM,0BAA0B,oEAEtC,CAAC;AACF,eAAO,MAAM,sBAAsB,wDAAiD,CAAC;AACrF,eAAO,MAAM,iBAAiB,2DAA+C,CAAC;AAE9E,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,WAkCvE;AAED,UAAU,cAAe,SAAQ,WAAW;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,oBAAY,mBAAmB,GAAG,MAAM,CACpC,MAAM,EACN;IACI,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CACJ,CAAC;AAEF,eAAO,MAAM,cAAc,uDAAwC,CAAC;AACpE,eAAO,MAAM,0BAA0B,oEAEtC,CAAC;AACF,eAAO,MAAM,sBAAsB,wDAAiD,CAAC;AACrF,eAAO,MAAM,iBAAiB,2DAA+C,CAAC;AAE9E,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,WAkCvE;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,cAAe,SAAQ,WAAW;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9C;AAED,wBAAsB,OAAO,CAAC,CAAC,GAAG,GAAG,EACjC,GAAG,EAAE,MAAM,EACX,EAAE,OAAW,EAAE,UAAiB,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,GAAE,cAAmB,GACnF,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA0CrD;AAED,wBAAgB,cAAc,oBAE7B"}
|
package/dist/common.js
CHANGED
|
@@ -55,7 +55,7 @@ export function isCompatible(hostVersion, packageVersion) {
|
|
|
55
55
|
}
|
|
56
56
|
export function getJson(url, _a = {}) {
|
|
57
57
|
var _b;
|
|
58
|
-
var { retries = 5, retryDelay = 1000 } = _a, config = __rest(_a, ["retries", "retryDelay"]);
|
|
58
|
+
var { retries = 5, retryDelay = 1000, onRequestError } = _a, config = __rest(_a, ["retries", "retryDelay", "onRequestError"]);
|
|
59
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
60
|
let response;
|
|
61
61
|
try {
|
|
@@ -73,15 +73,21 @@ export function getJson(url, _a = {}) {
|
|
|
73
73
|
}
|
|
74
74
|
throw new Error(`Failed to fetch: "${url}".`);
|
|
75
75
|
}
|
|
76
|
+
const responseJSON = yield response.json().catch(() => ({}));
|
|
76
77
|
if (!response.ok) {
|
|
77
78
|
let message = `Requesting "${url}" failed with status code ${response.status}.`;
|
|
78
79
|
try {
|
|
79
80
|
message += ` Details: ${yield response.text()}.`;
|
|
80
81
|
}
|
|
81
82
|
catch (_d) { } // eslint-disable-line no-empty
|
|
83
|
+
onRequestError === null || onRequestError === void 0 ? void 0 : onRequestError({
|
|
84
|
+
status: response.status,
|
|
85
|
+
json: responseJSON,
|
|
86
|
+
body: yield response.text().catch(() => ''),
|
|
87
|
+
});
|
|
82
88
|
throw new Error(message);
|
|
83
89
|
}
|
|
84
|
-
return { data:
|
|
90
|
+
return { data: responseJSON, headers: response.headers, url: (_b = response.url) !== null && _b !== void 0 ? _b : url };
|
|
85
91
|
});
|
|
86
92
|
}
|
|
87
93
|
export function useCancelation() {
|
package/dist/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AActD,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAS,gBAAgB,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAW,CACjD,4BAA4B,CAC/B,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAU,wBAAwB,CAAC,CAAC;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAa,mBAAmB,CAAC,CAAC;AAgB9E,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,cAAsB;IACpE,IAAI,WAAW,KAAK,cAAc,EAAE;QAChC,OAAO,IAAI,CAAC;KACf;IAED,IAAI,WAAW,KAAK,GAAG,EAAE;QACrB,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,cAAc,KAAK,GAAG,EAAE;QACxB,OAAO,IAAI,CAAC;KACf;IAED,iDAAiD;IACjD,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QAC3D,OAAO,KAAK,CAAC;KAChB;IAED,+DAA+D;IAC/D,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QAChE,OAAO,KAAK,CAAC;KAChB;IAED,8CAA8C;IAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;QAChE,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;KACxD;IAED,qDAAqD;IACrD,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;QACrE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;KACrD;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AActD,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAS,gBAAgB,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAW,CACjD,4BAA4B,CAC/B,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAU,wBAAwB,CAAC,CAAC;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAa,mBAAmB,CAAC,CAAC;AAgB9E,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,cAAsB;IACpE,IAAI,WAAW,KAAK,cAAc,EAAE;QAChC,OAAO,IAAI,CAAC;KACf;IAED,IAAI,WAAW,KAAK,GAAG,EAAE;QACrB,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,cAAc,KAAK,GAAG,EAAE;QACxB,OAAO,IAAI,CAAC;KACf;IAED,iDAAiD;IACjD,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QAC3D,OAAO,KAAK,CAAC;KAChB;IAED,+DAA+D;IAC/D,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QAChE,OAAO,KAAK,CAAC;KAChB;IAED,8CAA8C;IAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;QAChE,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;KACxD;IAED,qDAAqD;IACrD,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;QACrE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;KACrD;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAcD,MAAM,UAAgB,OAAO,CACzB,GAAW,EACX,KAAgF,EAAE;;QAAlF,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE,cAAc,OAAkC,EAA7B,MAAM,cAA3D,2CAA6D,CAAF;;QAE3D,IAAI,QAAkB,CAAC;QACvB,IAAI;YACA,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SACvC;QAAC,WAAM;YACJ,IAAI,OAAO,GAAG,CAAC,EAAE;gBACb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;oBAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;wBACrC,OAAO,CAAC,GAAG,kCACJ,MAAM,KACT,OAAO,EAAE,OAAO,GAAG,CAAC,EACpB,UAAU,EAAE,UAAU,GAAG,CAAC,IAC5B,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC7B,CAAC,EAAE,UAAU,CAAC,CAAC;oBAEf,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC5E,CAAC,CAAC,CAAC;aACN;YAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;SACjD;QAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YACd,IAAI,OAAO,GAAG,eAAe,GAAG,6BAA6B,QAAQ,CAAC,MAAM,GAAG,CAAC;YAEhF,IAAI;gBACA,OAAO,IAAI,aAAa,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;aACpD;YAAC,WAAM,GAAE,CAAC,+BAA+B;YAE1C,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG;gBACb,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;aAC9C,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,MAAA,QAAQ,CAAC,GAAG,mCAAI,GAAG,EAAE,CAAC;;CACtF;AAED,MAAM,UAAU,cAAc;IAC1B,OAAO,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC;AACjD,CAAC"}
|
package/dist/event-bus.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { SymbolToken } from '@servicetitan/react-ioc';
|
|
2
|
+
export declare type EventHandler<T = unknown> = (data: T) => void;
|
|
2
3
|
export declare type JobEventHandler = (defer: {
|
|
3
4
|
resolve(): void;
|
|
4
5
|
reject(reason?: string | Error): void;
|
|
5
6
|
}) => void;
|
|
7
|
+
export declare type EventType = string | number | symbol;
|
|
8
|
+
export declare type SymbolTokenEventType<T, U extends EventType = EventType> = U extends SymbolToken<any> ? SymbolToken<T> : U;
|
|
9
|
+
export declare const EVENT_BUS_TOKEN: SymbolToken<EventBus>;
|
|
6
10
|
export declare class EventBus {
|
|
7
11
|
job: {
|
|
8
12
|
on: (type: string, handler: JobEventHandler) => void;
|
|
@@ -10,9 +14,9 @@ export declare class EventBus {
|
|
|
10
14
|
emit: (type: string) => Promise<void>;
|
|
11
15
|
};
|
|
12
16
|
private emitter;
|
|
13
|
-
on: (type:
|
|
14
|
-
off: (type:
|
|
15
|
-
emit: (type:
|
|
17
|
+
on: <T, U extends EventType = EventType>(type: SymbolTokenEventType<T, U>, handler: EventHandler<T>) => void;
|
|
18
|
+
off: <T, U extends EventType = EventType>(type: SymbolTokenEventType<T, U>, handler: EventHandler<T>) => void;
|
|
19
|
+
emit: <T, U extends EventType = EventType>(type: SymbolTokenEventType<T, U>, data?: T | undefined) => void;
|
|
16
20
|
}
|
|
17
21
|
export declare function useEventBus(): EventBus;
|
|
18
22
|
//# sourceMappingURL=event-bus.d.ts.map
|
package/dist/event-bus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEnE,oBAAY,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAC1D,oBAAY,eAAe,GAAG,CAAC,KAAK,EAAE;IAClC,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;CACzC,KAAK,IAAI,CAAC;AACX,oBAAY,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACjD,oBAAY,oBAAoB,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,GAC3F,WAAW,CAAC,CAAC,CAAC,GACd,CAAC,CAAC;AAER,eAAO,MAAM,eAAe,uBAA2C,CAAC;AAExE,qBAAa,QAAQ;IACjB,GAAG;mBACY,MAAM,WAAW,eAAe;oBAG/B,MAAM,WAAW,eAAe;qBAG/B,MAAM;MAcrB;IAEF,OAAO,CAAC,OAAO,CAAe;IAE9B,EAAE,2GAKA;IAEF,GAAG,2GAKD;IAEF,IAAI,uGAEF;CACL;AAED,wBAAgB,WAAW,aAE1B"}
|
package/dist/event-bus.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import mitt from 'mitt';
|
|
2
2
|
import { useRef } from 'react';
|
|
3
|
+
import { symbolToken } from '@servicetitan/react-ioc';
|
|
4
|
+
export const EVENT_BUS_TOKEN = symbolToken('EVENT_BUS_TOKEN');
|
|
3
5
|
export class EventBus {
|
|
4
6
|
constructor() {
|
|
5
7
|
Object.defineProperty(this, "job", {
|
|
@@ -56,8 +58,8 @@ export class EventBus {
|
|
|
56
58
|
enumerable: true,
|
|
57
59
|
configurable: true,
|
|
58
60
|
writable: true,
|
|
59
|
-
value: (type) => {
|
|
60
|
-
this.emitter.emit(type);
|
|
61
|
+
value: (type, data) => {
|
|
62
|
+
this.emitter.emit(type, data);
|
|
61
63
|
}
|
|
62
64
|
});
|
|
63
65
|
}
|
package/dist/event-bus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAe,MAAM,yBAAyB,CAAC;AAYnE,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAW,iBAAiB,CAAC,CAAC;AAExE,MAAM,OAAO,QAAQ;IAArB;QACI;;;;mBAAM;gBACF,EAAE,EAAE,CAAC,IAAY,EAAE,OAAwB,EAAE,EAAE;oBAC3C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACnC,CAAC;gBACD,GAAG,EAAE,CAAC,IAAY,EAAE,OAAwB,EAAE,EAAE;oBAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE;oBACnB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;4BACpB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;4BACxB,MAAM,EAAE,CAAC,MAAuB,EAAE,EAAE;gCAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,YAAY,KAAK,EAAE;oCACvD,MAAM,CAAC,MAAM,CAAC,CAAC;iCAClB;qCAAM;oCACH,MAAM,EAAE,CAAC;iCACZ;4BACL,CAAC;yBACJ,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC;aACJ;WAAC;QAEF;;;;mBAAkB,IAAI,EAAO;WAAC;QAE9B;;;;mBAAK,CACD,IAAgC,EAChC,OAAwB,EAC1B,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnC,CAAC;WAAC;QAEF;;;;mBAAM,CACF,IAAgC,EAChC,OAAwB,EAC1B,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;WAAC;QAEF;;;;mBAAO,CAAqC,IAAgC,EAAE,IAAQ,EAAE,EAAE;gBACtF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;WAAC;IACN,CAAC;CAAA;AAED,MAAM,UAAU,WAAW;IACvB,OAAO,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC;AAC1C,CAAC"}
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
+
import { GetJsonError } from './common';
|
|
2
3
|
import { EventBus } from './event-bus';
|
|
3
4
|
export declare type LoaderRef = EventBus;
|
|
4
5
|
export interface LoaderProps {
|
|
@@ -9,6 +10,8 @@ export interface LoaderProps {
|
|
|
9
10
|
loadingFallback?: NonNullable<ReactNode> | null;
|
|
10
11
|
errorFallback?: NonNullable<ReactNode> | null;
|
|
11
12
|
className?: string;
|
|
13
|
+
retries?: number;
|
|
14
|
+
onRequestError?(error: GetJsonError): boolean;
|
|
12
15
|
}
|
|
13
16
|
export declare const Loader: import("react").ForwardRefExoticComponent<LoaderProps & import("react").RefAttributes<EventBus>>;
|
|
14
17
|
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EASH,SAAS,EACZ,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EASH,SAAS,EACZ,MAAM,OAAO,CAAC;AAUf,OAAO,EAKH,YAAY,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,QAAQ,EAAgC,MAAM,aAAa,CAAC;AAkHrE,oBAAY,SAAS,GAAG,QAAQ,CAAC;AAEjC,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAChD,aAAa,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;CACjD;AAED,eAAO,MAAM,MAAM,kGAsNlB,CAAC"}
|
package/dist/loader.js
CHANGED
|
@@ -15,7 +15,7 @@ import { ErrorBoundary } from '@servicetitan/error-boundary';
|
|
|
15
15
|
import { Log } from '@servicetitan/log-service';
|
|
16
16
|
import { useOptionalDependencies } from '@servicetitan/react-ioc';
|
|
17
17
|
import { EXPOSED_DEPENDENCIES_TOKEN, useCancelation, getJson, } from './common';
|
|
18
|
-
import { useEventBus } from './event-bus';
|
|
18
|
+
import { EVENT_BUS_TOKEN, useEventBus } from './event-bus';
|
|
19
19
|
import { HistoryManager } from './history-manager';
|
|
20
20
|
import { EXPOSED_DEPENDENCIES } from './globals';
|
|
21
21
|
import { getVersionMismatches, isVersionedUrl } from './utils';
|
|
@@ -32,18 +32,21 @@ function getEntrypoints(url, cache, signal) {
|
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
|
-
function getBundleInfo(mainPackageUrl, fallbackPackageUrl, exposedDependencies = {}, signal) {
|
|
35
|
+
function getBundleInfo(mainPackageUrl, fallbackPackageUrl, exposedDependencies = {}, signal, retries, onRequestError) {
|
|
36
36
|
var _a, _b;
|
|
37
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
38
38
|
const { data: metadata, url: packageUrl } = yield getJson(`${mainPackageUrl}/dist/metadata.json`, {
|
|
39
39
|
cache: isVersionedUrl(mainPackageUrl) ? undefined : 'no-store',
|
|
40
|
-
retries: fallbackPackageUrl ? 0 :
|
|
40
|
+
retries: fallbackPackageUrl ? 0 : retries,
|
|
41
|
+
onRequestError,
|
|
41
42
|
signal,
|
|
42
43
|
}).catch(e => {
|
|
43
44
|
if (!fallbackPackageUrl) {
|
|
44
45
|
throw e;
|
|
45
46
|
}
|
|
46
47
|
return getJson(`${fallbackPackageUrl}/dist/metadata.json`, {
|
|
48
|
+
retries,
|
|
49
|
+
onRequestError,
|
|
47
50
|
cache: isVersionedUrl(fallbackPackageUrl) ? undefined : 'no-store',
|
|
48
51
|
signal,
|
|
49
52
|
});
|
|
@@ -56,6 +59,7 @@ function getBundleInfo(mainPackageUrl, fallbackPackageUrl, exposedDependencies =
|
|
|
56
59
|
}
|
|
57
60
|
else {
|
|
58
61
|
const { data: packageJson } = yield getJson(`${exactPackageUrl}/package.json`, {
|
|
62
|
+
retries,
|
|
59
63
|
cache,
|
|
60
64
|
signal,
|
|
61
65
|
});
|
|
@@ -95,9 +99,10 @@ function getBundleInfo(mainPackageUrl, fallbackPackageUrl, exposedDependencies =
|
|
|
95
99
|
};
|
|
96
100
|
});
|
|
97
101
|
}
|
|
98
|
-
export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadingFallback, errorFallback, className }, ref) => {
|
|
102
|
+
export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadingFallback, errorFallback, className, retries, onRequestError, }, ref) => {
|
|
99
103
|
const [isLoading, setIsLoading] = useState(true);
|
|
100
|
-
const
|
|
104
|
+
const bus = useEventBus();
|
|
105
|
+
const [logService, historyManager, exposedDependencies = EXPOSED_DEPENDENCIES, eventBus = bus,] = useOptionalDependencies(Log, HistoryManager, EXPOSED_DEPENDENCIES_TOKEN, EVENT_BUS_TOKEN);
|
|
101
106
|
const dataAttrs = useMemo(() => Object.fromEntries(Object.entries(data).map(([key, value]) => [
|
|
102
107
|
'data-' + key.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase()),
|
|
103
108
|
value,
|
|
@@ -106,7 +111,6 @@ export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadi
|
|
|
106
111
|
const Loader = useMemo(() => {
|
|
107
112
|
const Component = forwardRef((_0, ref) => {
|
|
108
113
|
const cancelation = useCancelation();
|
|
109
|
-
const eventBus = useEventBus();
|
|
110
114
|
useImperativeHandle(ref, () => eventBus, [] // eslint-disable-line react-hooks/exhaustive-deps
|
|
111
115
|
);
|
|
112
116
|
useEffect(() => {
|
|
@@ -118,7 +122,7 @@ export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadi
|
|
|
118
122
|
const Lazy = useMemo(() => lazy(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
119
123
|
let bundleInfo;
|
|
120
124
|
try {
|
|
121
|
-
bundleInfo = yield getBundleInfo(src, fallbackSrc, exposedDependencies, cancelation.signal);
|
|
125
|
+
bundleInfo = yield getBundleInfo(src, fallbackSrc, exposedDependencies, cancelation.signal, retries, onRequestError);
|
|
122
126
|
}
|
|
123
127
|
catch (e) {
|
|
124
128
|
if (cancelation.signal.aborted) {
|
|
@@ -195,12 +199,15 @@ export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadi
|
|
|
195
199
|
}, [
|
|
196
200
|
src,
|
|
197
201
|
fallbackSrc,
|
|
198
|
-
|
|
202
|
+
exposedDependencies,
|
|
203
|
+
retries,
|
|
204
|
+
onRequestError,
|
|
199
205
|
logService,
|
|
200
206
|
historyManager,
|
|
201
|
-
exposedDependencies,
|
|
202
207
|
basename,
|
|
208
|
+
className,
|
|
203
209
|
dataAttrs,
|
|
210
|
+
eventBus,
|
|
204
211
|
]);
|
|
205
212
|
const LoadingFallback = useMemo(() => () => {
|
|
206
213
|
if (loadingFallback !== undefined) {
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EACH,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,mBAAmB,GAGtB,MAAM,OAAO,CAAC;AAEf,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,GAAG,MAAM,YAAY,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAEH,0BAA0B,EAC1B,cAAc,EACd,OAAO,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":"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"}
|
package/dist/register.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Log } from '@servicetitan/log-service';
|
|
|
4
4
|
import { DefaultPortalContext, TablePopupPropsContext } from '@servicetitan/design-system';
|
|
5
5
|
import { Provider } from '@servicetitan/react-ioc';
|
|
6
6
|
import { EXPOSED_DEPENDENCIES_TOKEN, BASENAME_TOKEN, IS_WEB_COMPONENT_TOKEN, RENDER_ROOT_TOKEN, } from './common';
|
|
7
|
-
import {
|
|
7
|
+
import { EVENT_BUS_TOKEN } from './event-bus';
|
|
8
8
|
import { HistoryManager } from './history-manager';
|
|
9
9
|
import { WEB_COMPONENT_NAME } from './globals';
|
|
10
10
|
function createLink(url, onLoad) {
|
|
@@ -136,7 +136,7 @@ export function register(Component, light) {
|
|
|
136
136
|
provide: EXPOSED_DEPENDENCIES_TOKEN,
|
|
137
137
|
useValue: this.exposedDependencies,
|
|
138
138
|
},
|
|
139
|
-
{ provide:
|
|
139
|
+
{ provide: EVENT_BUS_TOKEN, useValue: this.eventBus },
|
|
140
140
|
{ provide: BASENAME_TOKEN, useValue: this.basename },
|
|
141
141
|
].filter(({ useValue }) => useValue !== undefined) }, { children: _jsx(Component, Object.assign({}, this.dataset)) })) })) })) })), this.root, this.onReady);
|
|
142
142
|
}
|
package/dist/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAEH,0BAA0B,EAG1B,cAAc,EACd,sBAAsB,EACtB,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAEH,0BAA0B,EAG1B,cAAc,EACd,sBAAsB,EACtB,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAY,eAAe,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,SAAS,UAAU,CAAC,GAAW,EAAE,MAAkB;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;IACnB,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC;IAC3B,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;IAClC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;IAEzB,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,WAAW,GAAO,GAAG,EAAE,CAAC,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAI,CAAC;AAElE,MAAM,UAAU,QAAQ,CAAC,SAAwB,EAAE,KAAc;IAC7D,MAAM,YAAa,SAAQ,WAAW;QAAtC;;YACI;;;;;eAA0B;YAC1B;;;;;eAA4B;YAE5B;;;;uBAII,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;eAAC;YAE1C;;;;;eAAyB;YACzB;;;;;eAAwC;YACxC;;;;;eAAkD;YAClD;;;;;eAA4B;YAC5B;;;;;eAA0B;YAC1B;;;;;eAA6B;YAC7B;;;;;eAA+B;YA4C/B;;;;uBAAU,CAAC,OAAgB,EAAE,EAAE;oBAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;wBAChD,IAAI,CAAC,GAA0B,CAAC,GAAG,KAAK,CAAC;qBAC5C;oBAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;wBAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;4BACvC,IAAI,CAAC,MAAM,EAAE,CAAC;yBACjB;qBACJ;gBACL,CAAC;eAAC;YAEF;;;;uBAAqB,GAAG,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAErB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;wBAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;qBACjB;gBACL,CAAC;eAAC;YAEF;;;;uBAAuB,CAAC,IAAgB,EAAE,IAAc,EAAE,EAAE;oBACxD,MAAM,QAAQ,GAAkB,EAAE,CAAC;oBAEnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;wBACpB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;wBACjD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;wBAC1B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC1B;oBAED,OAAO,QAAQ,CAAC;gBACpB,CAAC;eAAC;YAEF;;;;uBAAiB,GAAG,EAAE;oBAClB,MAAM,CACF,KAAC,QAAQ,kBACL,UAAU,EAAE;4BACR,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE;4BACnD,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE;yBACtD,gBAED,KAAC,oBAAoB,CAAC,QAAQ,kBAAC,KAAK,EAAE,IAAI,CAAC,MAAgC,gBACvE,KAAC,sBAAsB,CAAC,QAAQ,kBAC5B,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,iCACT,KAAK,KACR,QAAQ,EAAE,IAAI,CAAC,IAA8B,IAC/C,gBAEF,KAAC,QAAQ,kBACL,UAAU,EAAE;wCACR,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;wCAC3C,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;wCAC1D;4CACI,OAAO,EAAE,0BAA0B;4CACnC,QAAQ,EAAE,IAAI,CAAC,mBAAmB;yCACrC;wCACD,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;wCACrD,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qCACvD,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,gBAElD,KAAC,SAAS,oBAAK,IAAI,CAAC,OAAO,EAAI,IACxB,IACmB,IACN,IACzB,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,CACf,CAAC;gBACN,CAAC;eAAC;QACN,CAAC;QA9GG,iBAAiB;;YACb,MAAM,eAAe,GAAG,KAAK;gBACzB,CAAC,CAAC,MAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAClD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvE,0CAAE,IAAI;gBACT,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,SAAS,GAAG;gBACd,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;oBAC/B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAE,CAAC,CAAC;oBAClE,CAAC,CAAC,EAAE,CAAC;aACZ,CAAC;YAEF,IAAI,CAAC,MAAM,GAAG;gBACV,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;gBAC3B,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,EAAE;aACf,CAAC;YAEF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI;iBACtB,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;iBAC1C,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAEpC,MAAM,CAAC,KAAC,WAAW,KAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,oBAAoB;;YAChB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACxC,OAAO,CAAC,MAAM,EAAE,CAAC;aACpB;YAED,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAA,IAAI,CAAC,SAAS,oDAAI,CAAC;QACvB,CAAC;KAsEJ;IAED,IAAI,CAAC,kBAAkB,EAAE;QACrB,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO;KACV;IAED,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;AACnE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/web-components",
|
|
3
|
-
"version": "22.0
|
|
3
|
+
"version": "22.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
"src"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@servicetitan/error-boundary": "22.0
|
|
18
|
+
"@servicetitan/error-boundary": "22.2.0",
|
|
19
19
|
"lodash.get": "~4.4.2",
|
|
20
20
|
"mitt": "~3.0.0",
|
|
21
21
|
"semver": "~7.3.8"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@servicetitan/design-system": "~12.6.2",
|
|
25
|
-
"@servicetitan/log-service": "22.0
|
|
26
|
-
"@servicetitan/react-ioc": "22.0
|
|
25
|
+
"@servicetitan/log-service": "22.2.0",
|
|
26
|
+
"@servicetitan/react-ioc": "22.2.0",
|
|
27
27
|
"@types/history": "~4.7.10",
|
|
28
28
|
"@types/lodash.get": "~4.4.6",
|
|
29
29
|
"@types/react": "~17.0.38",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"@servicetitan/design-system": "~12.6.2",
|
|
38
|
-
"@servicetitan/log-service": "22.0
|
|
39
|
-
"@servicetitan/react-ioc": "22.0
|
|
38
|
+
"@servicetitan/log-service": "22.2.0",
|
|
39
|
+
"@servicetitan/react-ioc": "22.2.0",
|
|
40
40
|
"history": "~4.10.1",
|
|
41
41
|
"react": "~17.0.2",
|
|
42
42
|
"react-dom": "~17.0.2"
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"cli": {
|
|
48
48
|
"webpack": false
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "cbb2dd04f51e14f207ade193ba2a167d6f220f61"
|
|
51
51
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { getJson } from '../common';
|
|
2
|
+
|
|
3
|
+
describe('getJSON', () => {
|
|
4
|
+
let spySetTimeout = jest.spyOn(global, 'setTimeout');
|
|
5
|
+
let spyFetch = jest.spyOn(global, 'fetch');
|
|
6
|
+
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
spySetTimeout = jest.spyOn(global, 'setTimeout').mockImplementation(cb => {
|
|
9
|
+
cb();
|
|
10
|
+
return null as any;
|
|
11
|
+
});
|
|
12
|
+
spyFetch = jest.spyOn(global, 'fetch');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
jest.resetModules();
|
|
17
|
+
spySetTimeout.mockClear();
|
|
18
|
+
spyFetch.mockClear();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe('retries count', () => {
|
|
22
|
+
test('getJSON success', async () => {
|
|
23
|
+
spyFetch.mockResolvedValue({
|
|
24
|
+
ok: true,
|
|
25
|
+
json: () => Promise.resolve('test'),
|
|
26
|
+
} as any);
|
|
27
|
+
|
|
28
|
+
const result = await getJson('fake://url', { retries: 2 });
|
|
29
|
+
|
|
30
|
+
expect(result).toEqual({
|
|
31
|
+
data: 'test',
|
|
32
|
+
headers: undefined,
|
|
33
|
+
url: 'fake://url',
|
|
34
|
+
});
|
|
35
|
+
expect(spyFetch).toHaveBeenCalledTimes(1);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('getJSON API error', async () => {
|
|
39
|
+
spyFetch.mockResolvedValue({
|
|
40
|
+
ok: false,
|
|
41
|
+
status: 444,
|
|
42
|
+
json: () => Promise.resolve('test'),
|
|
43
|
+
text: () => Promise.resolve('Text'),
|
|
44
|
+
} as any);
|
|
45
|
+
|
|
46
|
+
await expect(getJson('fake://url', { retries: 2 })).rejects.toThrow(
|
|
47
|
+
`Requesting "fake://url" failed with status code 444. Details: Text.`
|
|
48
|
+
);
|
|
49
|
+
expect(spyFetch).toHaveBeenCalledTimes(1);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test('getJSON network error', async () => {
|
|
53
|
+
spyFetch.mockRejectedValue({});
|
|
54
|
+
|
|
55
|
+
await expect(getJson('fake://url', { retries: 10 })).rejects.toThrow(
|
|
56
|
+
`Failed to fetch: "fake://url".`
|
|
57
|
+
);
|
|
58
|
+
expect(spyFetch).toHaveBeenCalledTimes(11);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('onRequestError', () => {
|
|
63
|
+
test('onRequestError is called when server returns error', async () => {
|
|
64
|
+
const onRequestError = jest.fn().mockReturnValue(undefined);
|
|
65
|
+
spyFetch.mockReturnValue({
|
|
66
|
+
ok: false,
|
|
67
|
+
status: 444,
|
|
68
|
+
json: () => Promise.resolve('test'),
|
|
69
|
+
text: () => Promise.resolve('test b'),
|
|
70
|
+
} as any);
|
|
71
|
+
|
|
72
|
+
await getJson('fake://url', { onRequestError }).catch(() => null);
|
|
73
|
+
|
|
74
|
+
expect(onRequestError).toHaveBeenCalledTimes(1);
|
|
75
|
+
expect(onRequestError).toHaveBeenCalledWith({
|
|
76
|
+
status: 444,
|
|
77
|
+
json: 'test',
|
|
78
|
+
body: 'test b',
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
test('onRequestError is not called when server returns 200 OK', async () => {
|
|
82
|
+
const onRequestError = jest.fn().mockReturnValue(undefined);
|
|
83
|
+
spyFetch.mockReturnValue({
|
|
84
|
+
ok: true,
|
|
85
|
+
status: 200,
|
|
86
|
+
json: () => Promise.resolve('test'),
|
|
87
|
+
} as any);
|
|
88
|
+
|
|
89
|
+
await getJson('fake://url', { onRequestError }).catch(() => null);
|
|
90
|
+
|
|
91
|
+
expect(onRequestError).toHaveBeenCalledTimes(0);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
package/src/common.ts
CHANGED
|
@@ -73,14 +73,21 @@ export function isCompatible(hostVersion: string, packageVersion: string) {
|
|
|
73
73
|
return false;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
export interface GetJsonError {
|
|
77
|
+
status: number;
|
|
78
|
+
body: string;
|
|
79
|
+
json: object;
|
|
80
|
+
}
|
|
81
|
+
|
|
76
82
|
interface GetJsonOptions extends RequestInit {
|
|
77
83
|
retries?: number;
|
|
78
84
|
retryDelay?: number;
|
|
85
|
+
onRequestError?(error: GetJsonError): void;
|
|
79
86
|
}
|
|
80
87
|
|
|
81
88
|
export async function getJson<T = any>(
|
|
82
89
|
url: string,
|
|
83
|
-
{ retries = 5, retryDelay = 1000, ...config }: GetJsonOptions = {}
|
|
90
|
+
{ retries = 5, retryDelay = 1000, onRequestError, ...config }: GetJsonOptions = {}
|
|
84
91
|
): Promise<{ data: T; headers: Headers; url: string }> {
|
|
85
92
|
let response: Response;
|
|
86
93
|
try {
|
|
@@ -105,6 +112,8 @@ export async function getJson<T = any>(
|
|
|
105
112
|
throw new Error(`Failed to fetch: "${url}".`);
|
|
106
113
|
}
|
|
107
114
|
|
|
115
|
+
const responseJSON = await response.json().catch(() => ({}));
|
|
116
|
+
|
|
108
117
|
if (!response.ok) {
|
|
109
118
|
let message = `Requesting "${url}" failed with status code ${response.status}.`;
|
|
110
119
|
|
|
@@ -112,10 +121,15 @@ export async function getJson<T = any>(
|
|
|
112
121
|
message += ` Details: ${await response.text()}.`;
|
|
113
122
|
} catch {} // eslint-disable-line no-empty
|
|
114
123
|
|
|
124
|
+
onRequestError?.({
|
|
125
|
+
status: response.status,
|
|
126
|
+
json: responseJSON,
|
|
127
|
+
body: await response.text().catch(() => ''),
|
|
128
|
+
});
|
|
115
129
|
throw new Error(message);
|
|
116
130
|
}
|
|
117
131
|
|
|
118
|
-
return { data:
|
|
132
|
+
return { data: responseJSON, headers: response.headers, url: response.url ?? url };
|
|
119
133
|
}
|
|
120
134
|
|
|
121
135
|
export function useCancelation() {
|
package/src/event-bus.ts
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import mitt from 'mitt';
|
|
2
2
|
|
|
3
3
|
import { useRef } from 'react';
|
|
4
|
+
import { symbolToken, SymbolToken } from '@servicetitan/react-ioc';
|
|
4
5
|
|
|
5
|
-
export type EventHandler = () => void;
|
|
6
|
+
export type EventHandler<T = unknown> = (data: T) => void;
|
|
6
7
|
export type JobEventHandler = (defer: {
|
|
7
8
|
resolve(): void;
|
|
8
9
|
reject(reason?: string | Error): void;
|
|
9
10
|
}) => void;
|
|
11
|
+
export type EventType = string | number | symbol;
|
|
12
|
+
export type SymbolTokenEventType<T, U extends EventType = EventType> = U extends SymbolToken<any>
|
|
13
|
+
? SymbolToken<T>
|
|
14
|
+
: U;
|
|
15
|
+
|
|
16
|
+
export const EVENT_BUS_TOKEN = symbolToken<EventBus>('EVENT_BUS_TOKEN');
|
|
10
17
|
|
|
11
18
|
export class EventBus {
|
|
12
19
|
job = {
|
|
@@ -34,16 +41,22 @@ export class EventBus {
|
|
|
34
41
|
|
|
35
42
|
private emitter = mitt<any>();
|
|
36
43
|
|
|
37
|
-
on =
|
|
44
|
+
on = <T, U extends EventType = EventType>(
|
|
45
|
+
type: SymbolTokenEventType<T, U>,
|
|
46
|
+
handler: EventHandler<T>
|
|
47
|
+
) => {
|
|
38
48
|
this.emitter.on(type, handler);
|
|
39
49
|
};
|
|
40
50
|
|
|
41
|
-
off =
|
|
51
|
+
off = <T, U extends EventType = EventType>(
|
|
52
|
+
type: SymbolTokenEventType<T, U>,
|
|
53
|
+
handler: EventHandler<T>
|
|
54
|
+
) => {
|
|
42
55
|
this.emitter.off(type, handler);
|
|
43
56
|
};
|
|
44
57
|
|
|
45
|
-
emit = (type:
|
|
46
|
-
this.emitter.emit(type);
|
|
58
|
+
emit = <T, U extends EventType = EventType>(type: SymbolTokenEventType<T, U>, data?: T) => {
|
|
59
|
+
this.emitter.emit(type, data);
|
|
47
60
|
};
|
|
48
61
|
}
|
|
49
62
|
|
package/src/loader.tsx
CHANGED
|
@@ -23,9 +23,10 @@ import {
|
|
|
23
23
|
EXPOSED_DEPENDENCIES_TOKEN,
|
|
24
24
|
useCancelation,
|
|
25
25
|
getJson,
|
|
26
|
+
GetJsonError,
|
|
26
27
|
IWebComponent,
|
|
27
28
|
} from './common';
|
|
28
|
-
import { EventBus, useEventBus } from './event-bus';
|
|
29
|
+
import { EventBus, EVENT_BUS_TOKEN, useEventBus } from './event-bus';
|
|
29
30
|
import { HistoryManager } from './history-manager';
|
|
30
31
|
import { EXPOSED_DEPENDENCIES } from './globals';
|
|
31
32
|
import { getVersionMismatches, isVersionedUrl } from './utils';
|
|
@@ -56,13 +57,16 @@ async function getBundleInfo(
|
|
|
56
57
|
mainPackageUrl: string,
|
|
57
58
|
fallbackPackageUrl: string | undefined,
|
|
58
59
|
exposedDependencies: ExposedDependencies = {},
|
|
59
|
-
signal?: AbortSignal
|
|
60
|
+
signal?: AbortSignal,
|
|
61
|
+
retries?: number,
|
|
62
|
+
onRequestError?: (error: GetJsonError) => void
|
|
60
63
|
) {
|
|
61
64
|
const { data: metadata, url: packageUrl } = await getJson(
|
|
62
65
|
`${mainPackageUrl}/dist/metadata.json`,
|
|
63
66
|
{
|
|
64
67
|
cache: isVersionedUrl(mainPackageUrl) ? undefined : 'no-store',
|
|
65
|
-
retries: fallbackPackageUrl ? 0 :
|
|
68
|
+
retries: fallbackPackageUrl ? 0 : retries,
|
|
69
|
+
onRequestError,
|
|
66
70
|
signal,
|
|
67
71
|
}
|
|
68
72
|
).catch(e => {
|
|
@@ -71,6 +75,8 @@ async function getBundleInfo(
|
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
return getJson(`${fallbackPackageUrl}/dist/metadata.json`, {
|
|
78
|
+
retries,
|
|
79
|
+
onRequestError,
|
|
74
80
|
cache: isVersionedUrl(fallbackPackageUrl) ? undefined : 'no-store',
|
|
75
81
|
signal,
|
|
76
82
|
});
|
|
@@ -85,6 +91,7 @@ async function getBundleInfo(
|
|
|
85
91
|
dependencies = metadata.dependencies;
|
|
86
92
|
} else {
|
|
87
93
|
const { data: packageJson } = await getJson(`${exactPackageUrl}/package.json`, {
|
|
94
|
+
retries,
|
|
88
95
|
cache,
|
|
89
96
|
signal,
|
|
90
97
|
});
|
|
@@ -143,14 +150,39 @@ export interface LoaderProps {
|
|
|
143
150
|
loadingFallback?: NonNullable<ReactNode> | null;
|
|
144
151
|
errorFallback?: NonNullable<ReactNode> | null;
|
|
145
152
|
className?: string;
|
|
153
|
+
retries?: number;
|
|
154
|
+
onRequestError?(error: GetJsonError): boolean;
|
|
146
155
|
}
|
|
147
156
|
|
|
148
157
|
export const Loader = forwardRef<LoaderRef, LoaderProps>(
|
|
149
|
-
(
|
|
158
|
+
(
|
|
159
|
+
{
|
|
160
|
+
src,
|
|
161
|
+
fallbackSrc,
|
|
162
|
+
data = {},
|
|
163
|
+
basename,
|
|
164
|
+
loadingFallback,
|
|
165
|
+
errorFallback,
|
|
166
|
+
className,
|
|
167
|
+
retries,
|
|
168
|
+
onRequestError,
|
|
169
|
+
},
|
|
170
|
+
ref
|
|
171
|
+
) => {
|
|
150
172
|
const [isLoading, setIsLoading] = useState(true);
|
|
151
173
|
|
|
152
|
-
const
|
|
153
|
-
|
|
174
|
+
const bus = useEventBus();
|
|
175
|
+
const [
|
|
176
|
+
logService,
|
|
177
|
+
historyManager,
|
|
178
|
+
exposedDependencies = EXPOSED_DEPENDENCIES,
|
|
179
|
+
eventBus = bus,
|
|
180
|
+
] = useOptionalDependencies(
|
|
181
|
+
Log,
|
|
182
|
+
HistoryManager,
|
|
183
|
+
EXPOSED_DEPENDENCIES_TOKEN,
|
|
184
|
+
EVENT_BUS_TOKEN
|
|
185
|
+
);
|
|
154
186
|
|
|
155
187
|
const dataAttrs = useMemo(
|
|
156
188
|
() =>
|
|
@@ -166,7 +198,6 @@ export const Loader = forwardRef<LoaderRef, LoaderProps>(
|
|
|
166
198
|
const Loader = useMemo(() => {
|
|
167
199
|
const Component = forwardRef<LoaderRef>((_0, ref) => {
|
|
168
200
|
const cancelation = useCancelation();
|
|
169
|
-
const eventBus = useEventBus();
|
|
170
201
|
|
|
171
202
|
useImperativeHandle(
|
|
172
203
|
ref,
|
|
@@ -191,7 +222,9 @@ export const Loader = forwardRef<LoaderRef, LoaderProps>(
|
|
|
191
222
|
src,
|
|
192
223
|
fallbackSrc,
|
|
193
224
|
exposedDependencies,
|
|
194
|
-
cancelation.signal
|
|
225
|
+
cancelation.signal,
|
|
226
|
+
retries,
|
|
227
|
+
onRequestError
|
|
195
228
|
);
|
|
196
229
|
} catch (e) {
|
|
197
230
|
if (cancelation.signal.aborted) {
|
|
@@ -293,12 +326,15 @@ export const Loader = forwardRef<LoaderRef, LoaderProps>(
|
|
|
293
326
|
}, [
|
|
294
327
|
src,
|
|
295
328
|
fallbackSrc,
|
|
296
|
-
|
|
329
|
+
exposedDependencies,
|
|
330
|
+
retries,
|
|
331
|
+
onRequestError,
|
|
297
332
|
logService,
|
|
298
333
|
historyManager,
|
|
299
|
-
exposedDependencies,
|
|
300
334
|
basename,
|
|
335
|
+
className,
|
|
301
336
|
dataAttrs,
|
|
337
|
+
eventBus,
|
|
302
338
|
]);
|
|
303
339
|
|
|
304
340
|
const LoadingFallback = useMemo(
|
package/src/register.tsx
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
IS_WEB_COMPONENT_TOKEN,
|
|
15
15
|
RENDER_ROOT_TOKEN,
|
|
16
16
|
} from './common';
|
|
17
|
-
import { EventBus } from './event-bus';
|
|
17
|
+
import { EventBus, EVENT_BUS_TOKEN } from './event-bus';
|
|
18
18
|
import { HistoryManager } from './history-manager';
|
|
19
19
|
import { WEB_COMPONENT_NAME } from './globals';
|
|
20
20
|
|
|
@@ -148,7 +148,7 @@ export function register(Component: ComponentType, light: boolean) {
|
|
|
148
148
|
provide: EXPOSED_DEPENDENCIES_TOKEN,
|
|
149
149
|
useValue: this.exposedDependencies,
|
|
150
150
|
},
|
|
151
|
-
{ provide:
|
|
151
|
+
{ provide: EVENT_BUS_TOKEN, useValue: this.eventBus },
|
|
152
152
|
{ provide: BASENAME_TOKEN, useValue: this.basename },
|
|
153
153
|
].filter(({ useValue }) => useValue !== undefined)}
|
|
154
154
|
>
|