@servicetitan/web-components 22.1.0 → 22.2.1-patch.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.
Files changed (36) hide show
  1. package/dist/common.d.ts +7 -1
  2. package/dist/common.d.ts.map +1 -1
  3. package/dist/common.js +9 -3
  4. package/dist/common.js.map +1 -1
  5. package/dist/contexts/index.d.ts +3 -0
  6. package/dist/contexts/index.d.ts.map +1 -0
  7. package/dist/contexts/index.js +4 -0
  8. package/dist/contexts/index.js.map +1 -0
  9. package/dist/contexts/mfe-data-context.d.ts +15 -0
  10. package/dist/contexts/mfe-data-context.d.ts.map +1 -0
  11. package/dist/contexts/mfe-data-context.js +10 -0
  12. package/dist/contexts/mfe-data-context.js.map +1 -0
  13. package/dist/contexts/mfe-metadata-context.d.ts +8 -0
  14. package/dist/contexts/mfe-metadata-context.d.ts.map +1 -0
  15. package/dist/contexts/mfe-metadata-context.js +7 -0
  16. package/dist/contexts/mfe-metadata-context.js.map +1 -0
  17. package/dist/contexts/tests/mfe-data-context.test.d.ts +2 -0
  18. package/dist/contexts/tests/mfe-data-context.test.d.ts.map +1 -0
  19. package/dist/contexts/tests/mfe-data-context.test.js +24 -0
  20. package/dist/contexts/tests/mfe-data-context.test.js.map +1 -0
  21. package/dist/contexts/tests/mfe-metadata-context.test.d.ts +2 -0
  22. package/dist/contexts/tests/mfe-metadata-context.test.d.ts.map +1 -0
  23. package/dist/contexts/tests/mfe-metadata-context.test.js +26 -0
  24. package/dist/contexts/tests/mfe-metadata-context.test.js.map +1 -0
  25. package/dist/get-mfe-supports-rerendering.d.ts +3 -0
  26. package/dist/get-mfe-supports-rerendering.d.ts.map +1 -0
  27. package/dist/get-mfe-supports-rerendering.js +22 -0
  28. package/dist/get-mfe-supports-rerendering.js.map +1 -0
  29. package/dist/loader.d.ts +3 -0
  30. package/dist/loader.d.ts.map +1 -1
  31. package/dist/loader.js +13 -8
  32. package/dist/loader.js.map +1 -1
  33. package/package.json +7 -8
  34. package/src/__tests__/common.test.ts +94 -0
  35. package/src/common.ts +17 -3
  36. 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;
@@ -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;CACvB;AAED,wBAAsB,OAAO,CAAC,CAAC,GAAG,GAAG,EACjC,GAAG,EAAE,MAAM,EACX,EAAE,OAAW,EAAE,UAAiB,EAAE,GAAG,MAAM,EAAE,GAAE,cAAmB,GACnE,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAmCrD;AAED,wBAAgB,cAAc,oBAE7B"}
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,11 +55,11 @@ 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 {
62
- response = yield fetch(url, config);
62
+ response = yield fetch(url, Object.assign({ credentials: 'omit' }, config));
63
63
  }
64
64
  catch (_c) {
65
65
  if (retries > 0) {
@@ -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: yield response.json(), headers: response.headers, url: (_b = response.url) !== null && _b !== void 0 ? _b : url };
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() {
@@ -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;AAOD,MAAM,UAAgB,OAAO,CACzB,GAAW,EACX,KAAgE,EAAE;;QAAlE,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,OAAkC,EAA7B,MAAM,cAA3C,yBAA6C,CAAF;;QAE3C,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,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,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,MAAA,QAAQ,CAAC,GAAG,mCAAI,GAAG,EAAE,CAAC;;CAC/F;AAED,MAAM,UAAU,cAAc;IAC1B,OAAO,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { useMFEDataContext } from './mfe-data-context';
2
+ export * from './mfe-metadata-context';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contexts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Specific exports below in order to exclude `MFEContextData` from being included in the bundle
2
+ export { useMFEDataContext } from './mfe-data-context';
3
+ export * from './mfe-metadata-context';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Context used to pass data from the host to the MFEs
3
+ */
4
+ /// <reference types="react" />
5
+ declare type JSONPrimitive = string | number | boolean | null | undefined;
6
+ declare type JSON = {
7
+ [key: string]: JSONPrimitive | JSON[] | JSON;
8
+ };
9
+ export declare type MFEContextData<T> = {
10
+ [P in keyof T]: T[P] extends JSONPrimitive ? T[P] : T[P] extends (infer U)[] ? MFEContextData<U>[] : T[P] extends JSON ? MFEContextData<T[P]> : never;
11
+ };
12
+ export declare const MFEDataContext: import("react").Context<JSON>;
13
+ export declare function useMFEDataContext<T extends MFEContextData<T>>(): T;
14
+ export {};
15
+ //# sourceMappingURL=mfe-data-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-data-context.d.ts","sourceRoot":"","sources":["../../src/contexts/mfe-data-context.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAIH,aAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAGlE,aAAK,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAG7D,oBAAY,cAAc,CAAC,CAAC,IAAI;KAC3B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GACpC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACxB,cAAc,CAAC,CAAC,CAAC,EAAE,GACnB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACjB,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACpB,KAAK;CACd,CAAC;AAEF,eAAO,MAAM,cAAc,+BAA0B,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,OAI5D"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Context used to pass data from the host to the MFEs
3
+ */
4
+ import { createContext, useContext } from 'react';
5
+ export const MFEDataContext = createContext({});
6
+ export function useMFEDataContext() {
7
+ const context = useContext(MFEDataContext);
8
+ return context;
9
+ }
10
+ //# sourceMappingURL=mfe-data-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-data-context.js","sourceRoot":"","sources":["../../src/contexts/mfe-data-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAkBlD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAO,EAAE,CAAC,CAAC;AAEtD,MAAM,UAAU,iBAAiB;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAM,CAAC;IAEhD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ export interface MFEMetadata {
3
+ shadowRoot: ShadowRoot;
4
+ portalShadowRoot: ShadowRoot;
5
+ }
6
+ export declare const MFEMetadataContext: import("react").Context<MFEMetadata>;
7
+ export declare function useMFEMetadataContext(): MFEMetadata;
8
+ //# sourceMappingURL=mfe-metadata-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-metadata-context.d.ts","sourceRoot":"","sources":["../../src/contexts/mfe-metadata-context.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,UAAU,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,sCAAgD,CAAC;AAEhF,wBAAgB,qBAAqB,gBAIpC"}
@@ -0,0 +1,7 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const MFEMetadataContext = createContext({});
3
+ export function useMFEMetadataContext() {
4
+ const context = useContext(MFEMetadataContext);
5
+ return context;
6
+ }
7
+ //# sourceMappingURL=mfe-metadata-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-metadata-context.js","sourceRoot":"","sources":["../../src/contexts/mfe-metadata-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAOlD,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAc,EAAiB,CAAC,CAAC;AAEhF,MAAM,UAAU,qBAAqB;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAE/C,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mfe-data-context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-data-context.test.d.ts","sourceRoot":"","sources":["../../../src/contexts/tests/mfe-data-context.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { renderHook } from '@testing-library/react-hooks';
3
+ import { MFEDataContext, useMFEDataContext } from '../mfe-data-context';
4
+ describe(`[web-components] ${useMFEDataContext.name}`, () => {
5
+ const subject = (wrapper) => renderHook(() => useMFEDataContext(), { wrapper });
6
+ describe('when the MFEDataContext is provided by a parent', () => {
7
+ const data = { foo: 'bar' };
8
+ const Wrapper = ({ children }) => {
9
+ return _jsx(MFEDataContext.Provider, Object.assign({ value: data }, { children: children }));
10
+ };
11
+ test('returns the context', () => {
12
+ expect(subject(Wrapper).result.current).toEqual(data);
13
+ });
14
+ });
15
+ describe('when the MFEDataContext is not provided by a parent', () => {
16
+ const Wrapper = ({ children }) => {
17
+ return _jsx("div", { children: children });
18
+ };
19
+ test('returns an empty object', () => {
20
+ expect(subject(Wrapper).result.current).toEqual({});
21
+ });
22
+ });
23
+ });
24
+ //# sourceMappingURL=mfe-data-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-data-context.test.js","sourceRoot":"","sources":["../../../src/contexts/tests/mfe-data-context.test.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExE,QAAQ,CAAC,oBAAoB,iBAAiB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;IACxD,MAAM,OAAO,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAErF,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC7D,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjC,OAAO,KAAC,cAAc,CAAC,QAAQ,kBAAC,KAAK,EAAE,IAAI,gBAAG,QAAQ,IAA2B,CAAC;QACtF,CAAC,CAAC;QAEF,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;QACjE,MAAM,OAAO,GAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjC,OAAO,wBAAM,QAAQ,GAAO,CAAC;QACjC,CAAC,CAAC;QAEF,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mfe-metadata-context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-metadata-context.test.d.ts","sourceRoot":"","sources":["../../../src/contexts/tests/mfe-metadata-context.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { renderHook } from '@testing-library/react-hooks';
3
+ import { MFEMetadataContext, useMFEMetadataContext } from '../mfe-metadata-context';
4
+ describe(`[web-components] ${useMFEMetadataContext.name}`, () => {
5
+ const subject = (wrapper) => renderHook(() => useMFEMetadataContext(), { wrapper });
6
+ describe('when the MFEMetadataContext is provided by a parent', () => {
7
+ const shadowRoot = document.createElement('div').attachShadow({ mode: 'open' });
8
+ const portalShadowRoot = document.createElement('span').attachShadow({ mode: 'open' });
9
+ const metadata = { shadowRoot, portalShadowRoot };
10
+ const Wrapper = ({ children }) => {
11
+ return (_jsx(MFEMetadataContext.Provider, Object.assign({ value: metadata }, { children: children })));
12
+ };
13
+ test('returns the context', () => {
14
+ expect(subject(Wrapper).result.current).toEqual(metadata);
15
+ });
16
+ });
17
+ describe('when the MFEMetadataContext is not provided by a parent', () => {
18
+ const Wrapper = ({ children }) => {
19
+ return _jsx("div", { children: children });
20
+ };
21
+ test('returns an empty object', () => {
22
+ expect(subject(Wrapper).result.current).toEqual({});
23
+ });
24
+ });
25
+ });
26
+ //# sourceMappingURL=mfe-metadata-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfe-metadata-context.test.js","sourceRoot":"","sources":["../../../src/contexts/tests/mfe-metadata-context.test.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,QAAQ,CAAC,oBAAoB,qBAAqB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;IAC5D,MAAM,OAAO,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzF,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;QACjE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;QAClD,MAAM,OAAO,GAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjC,OAAO,CACH,KAAC,kBAAkB,CAAC,QAAQ,kBAAC,KAAK,EAAE,QAAQ,gBACvC,QAAQ,IACiB,CACjC,CAAC;QACN,CAAC,CAAC;QAEF,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjC,OAAO,wBAAM,QAAQ,GAAO,CAAC;QACjC,CAAC,CAAC;QAEF,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Metadata } from './loader';
2
+ export declare function getMFESupportsRerendering(bundledWith: Metadata['bundledWith'], dependencies: Metadata['dependencies']): boolean;
3
+ //# sourceMappingURL=get-mfe-supports-rerendering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-mfe-supports-rerendering.d.ts","sourceRoot":"","sources":["../src/get-mfe-supports-rerendering.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAYpC,wBAAgB,yBAAyB,CACrC,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,EACpC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,WAOzC"}
@@ -0,0 +1,22 @@
1
+ import semver from 'semver';
2
+ /*
3
+ * Check if the MFE supports re-rendering itself when data changes
4
+ *
5
+ * `bundledWith.@servicetitan/web-components` is checked first, as that guarantees support
6
+ * `dependencies.@servicetitan/web-components` is checked second, in the case of the MFE's startup
7
+ * hasn't been updated to add web-components to bundledWith yet, and the MFE's web-component
8
+ * dependency is set in it's own package's package.json instead of the monorepo's root package.json
9
+ * `bundledWith.@servicetitan/startup` is checked third, with the hope that the startup version
10
+ * matches web-components
11
+ */
12
+ export function getMFESupportsRerendering(bundledWith, dependencies) {
13
+ var _a, _b;
14
+ return !!((_b = (_a = isSupportedVersion(bundledWith === null || bundledWith === void 0 ? void 0 : bundledWith['@servicetitan/web-components'])) !== null && _a !== void 0 ? _a : isSupportedVersion(dependencies === null || dependencies === void 0 ? void 0 : dependencies['@servicetitan/web-components'])) !== null && _b !== void 0 ? _b : isSupportedVersion(bundledWith === null || bundledWith === void 0 ? void 0 : bundledWith['@servicetitan/startup']));
15
+ }
16
+ function isSupportedVersion(version) {
17
+ const minVersion = version && semver.minVersion(version);
18
+ if (minVersion) {
19
+ return semver.gte(minVersion, '22.12.0');
20
+ }
21
+ }
22
+ //# sourceMappingURL=get-mfe-supports-rerendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-mfe-supports-rerendering.js","sourceRoot":"","sources":["../src/get-mfe-supports-rerendering.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACrC,WAAoC,EACpC,YAAsC;;IAEtC,OAAO,CAAC,CAAC,CACL,MAAA,MAAA,kBAAkB,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,8BAA8B,CAAC,CAAC,mCACjE,kBAAkB,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,8BAA8B,CAAC,CAAC,mCAClE,kBAAkB,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,uBAAuB,CAAC,CAAC,CAC7D,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IACxC,MAAM,UAAU,GAAG,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,UAAU,EAAE;QACZ,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;KAC5C;AACL,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
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EASH,SAAS,EACZ,MAAM,OAAO,CAAC;AAiBf,OAAO,EAAE,QAAQ,EAAgC,MAAM,aAAa,CAAC;AA4GrE,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;CACtB;AAED,eAAO,MAAM,MAAM,kGAqMlB,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 : undefined,
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, [] // eslint-disable-line react-hooks/exhaustive-deps
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
- className,
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
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":"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"}
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.0",
3
+ "version": "22.2.1-patch.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.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.1.0",
26
- "@servicetitan/react-ioc": "22.1.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.1.0",
39
- "@servicetitan/react-ioc": "22.1.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"
@@ -46,6 +46,5 @@
46
46
  },
47
47
  "cli": {
48
48
  "webpack": false
49
- },
50
- "gitHead": "56ffd93619b8fd85a355c00eb2d57e95389a23e8"
49
+ }
51
50
  }
@@ -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,18 +73,25 @@ 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 {
87
- response = await fetch(url, config);
94
+ response = await fetch(url, { credentials: 'omit', ...config });
88
95
  } catch {
89
96
  if (retries > 0) {
90
97
  return new Promise((resolve, reject) => {
@@ -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: await response.json(), headers: response.headers, url: response.url ?? url };
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 : undefined,
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
- ({ src, fallbackSrc, data = {}, basename, loadingFallback, errorFallback, className }, ref) => {
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
- className,
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
  ]);