@servicetitan/web-components 22.1.0 → 22.2.1
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/loader.d.ts +3 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +13 -8
- package/dist/loader.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/loader.tsx +33 -11
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":"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"}
|
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,kGAkNlB,CAAC"}
|
package/dist/loader.js
CHANGED
|
@@ -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,7 +99,7 @@ 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
104
|
const bus = useEventBus();
|
|
101
105
|
const [logService, historyManager, exposedDependencies = EXPOSED_DEPENDENCIES, eventBus = bus,] = useOptionalDependencies(Log, HistoryManager, EXPOSED_DEPENDENCIES_TOKEN, EVENT_BUS_TOKEN);
|
|
@@ -107,8 +111,7 @@ export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadi
|
|
|
107
111
|
const Loader = useMemo(() => {
|
|
108
112
|
const Component = forwardRef((_0, ref) => {
|
|
109
113
|
const cancelation = useCancelation();
|
|
110
|
-
useImperativeHandle(ref, () => eventBus, []
|
|
111
|
-
);
|
|
114
|
+
useImperativeHandle(ref, () => eventBus, []);
|
|
112
115
|
useEffect(() => {
|
|
113
116
|
setIsLoading(true);
|
|
114
117
|
return () => {
|
|
@@ -118,7 +121,7 @@ export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadi
|
|
|
118
121
|
const Lazy = useMemo(() => lazy(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
119
122
|
let bundleInfo;
|
|
120
123
|
try {
|
|
121
|
-
bundleInfo = yield getBundleInfo(src, fallbackSrc, exposedDependencies, cancelation.signal);
|
|
124
|
+
bundleInfo = yield getBundleInfo(src, fallbackSrc, exposedDependencies, cancelation.signal, retries, onRequestError);
|
|
122
125
|
}
|
|
123
126
|
catch (e) {
|
|
124
127
|
if (cancelation.signal.aborted) {
|
|
@@ -195,11 +198,13 @@ export const Loader = forwardRef(({ src, fallbackSrc, data = {}, basename, loadi
|
|
|
195
198
|
}, [
|
|
196
199
|
src,
|
|
197
200
|
fallbackSrc,
|
|
198
|
-
|
|
201
|
+
exposedDependencies,
|
|
202
|
+
retries,
|
|
203
|
+
onRequestError,
|
|
199
204
|
logService,
|
|
200
205
|
historyManager,
|
|
201
|
-
exposedDependencies,
|
|
202
206
|
basename,
|
|
207
|
+
className,
|
|
203
208
|
dataAttrs,
|
|
204
209
|
eventBus,
|
|
205
210
|
]);
|
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/web-components",
|
|
3
|
-
"version": "22.1
|
|
3
|
+
"version": "22.2.1",
|
|
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.1
|
|
18
|
+
"@servicetitan/error-boundary": "22.2.1",
|
|
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.1
|
|
26
|
-
"@servicetitan/react-ioc": "22.1
|
|
25
|
+
"@servicetitan/log-service": "22.2.1",
|
|
26
|
+
"@servicetitan/react-ioc": "22.2.1",
|
|
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.1
|
|
39
|
-
"@servicetitan/react-ioc": "22.1
|
|
38
|
+
"@servicetitan/log-service": "22.2.1",
|
|
39
|
+
"@servicetitan/react-ioc": "22.2.1",
|
|
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": "e6385a40fd3deb32a0083f5252c74e26172ae227"
|
|
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/loader.tsx
CHANGED
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
EXPOSED_DEPENDENCIES_TOKEN,
|
|
24
24
|
useCancelation,
|
|
25
25
|
getJson,
|
|
26
|
+
GetJsonError,
|
|
26
27
|
IWebComponent,
|
|
27
28
|
} from './common';
|
|
28
29
|
import { EventBus, EVENT_BUS_TOKEN, useEventBus } from './event-bus';
|
|
@@ -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,10 +150,25 @@ 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
174
|
const bus = useEventBus();
|
|
@@ -177,11 +199,7 @@ export const Loader = forwardRef<LoaderRef, LoaderProps>(
|
|
|
177
199
|
const Component = forwardRef<LoaderRef>((_0, ref) => {
|
|
178
200
|
const cancelation = useCancelation();
|
|
179
201
|
|
|
180
|
-
useImperativeHandle(
|
|
181
|
-
ref,
|
|
182
|
-
() => eventBus,
|
|
183
|
-
[] // eslint-disable-line react-hooks/exhaustive-deps
|
|
184
|
-
);
|
|
202
|
+
useImperativeHandle(ref, () => eventBus, []);
|
|
185
203
|
|
|
186
204
|
useEffect(() => {
|
|
187
205
|
setIsLoading(true);
|
|
@@ -200,7 +218,9 @@ export const Loader = forwardRef<LoaderRef, LoaderProps>(
|
|
|
200
218
|
src,
|
|
201
219
|
fallbackSrc,
|
|
202
220
|
exposedDependencies,
|
|
203
|
-
cancelation.signal
|
|
221
|
+
cancelation.signal,
|
|
222
|
+
retries,
|
|
223
|
+
onRequestError
|
|
204
224
|
);
|
|
205
225
|
} catch (e) {
|
|
206
226
|
if (cancelation.signal.aborted) {
|
|
@@ -302,11 +322,13 @@ export const Loader = forwardRef<LoaderRef, LoaderProps>(
|
|
|
302
322
|
}, [
|
|
303
323
|
src,
|
|
304
324
|
fallbackSrc,
|
|
305
|
-
|
|
325
|
+
exposedDependencies,
|
|
326
|
+
retries,
|
|
327
|
+
onRequestError,
|
|
306
328
|
logService,
|
|
307
329
|
historyManager,
|
|
308
|
-
exposedDependencies,
|
|
309
330
|
basename,
|
|
331
|
+
className,
|
|
310
332
|
dataAttrs,
|
|
311
333
|
eventBus,
|
|
312
334
|
]);
|