@servicetitan/web-components 33.1.0 → 34.0.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.
Files changed (87) hide show
  1. package/dist/common.d.ts +1 -4
  2. package/dist/common.d.ts.map +1 -1
  3. package/dist/common.js +4 -4
  4. package/dist/common.js.map +1 -1
  5. package/dist/contexts/tests/mfe-data-context.test.js.map +1 -1
  6. package/dist/contexts/tests/mfe-metadata-context.test.js.map +1 -1
  7. package/dist/event-bus.d.ts.map +1 -1
  8. package/dist/event-bus.js.map +1 -1
  9. package/dist/globals.d.ts +2 -1
  10. package/dist/globals.d.ts.map +1 -1
  11. package/dist/globals.js +1 -1
  12. package/dist/globals.js.map +1 -1
  13. package/dist/headless-loader.d.ts.map +1 -1
  14. package/dist/headless-loader.js.map +1 -1
  15. package/dist/history-manager.d.ts.map +1 -1
  16. package/dist/history-manager.js.map +1 -1
  17. package/dist/loader.d.ts.map +1 -1
  18. package/dist/loader.js +4 -5
  19. package/dist/loader.js.map +1 -1
  20. package/dist/register-headless.d.ts.map +1 -1
  21. package/dist/register-headless.js.map +1 -1
  22. package/dist/register.d.ts.map +1 -1
  23. package/dist/register.js +5 -6
  24. package/dist/register.js.map +1 -1
  25. package/dist/render.js +1 -1
  26. package/dist/render.js.map +1 -1
  27. package/dist/use-prefetch.d.ts.map +1 -1
  28. package/dist/use-prefetch.js.map +1 -1
  29. package/dist/utils/get-bundle-info.d.ts +2 -1
  30. package/dist/utils/get-bundle-info.d.ts.map +1 -1
  31. package/dist/utils/get-bundle-info.js +4 -4
  32. package/dist/utils/get-bundle-info.js.map +1 -1
  33. package/dist/utils/get-entry-points.js +1 -1
  34. package/dist/utils/get-entry-points.js.map +1 -1
  35. package/dist/utils/get-ld-service-token.js +1 -1
  36. package/dist/utils/get-ld-service-token.js.map +1 -1
  37. package/dist/utils/get-mfe-supports-rerendering.js +1 -1
  38. package/dist/utils/get-mfe-supports-rerendering.js.map +1 -1
  39. package/dist/utils/index.d.ts +0 -1
  40. package/dist/utils/index.d.ts.map +1 -1
  41. package/dist/utils/index.js +0 -1
  42. package/dist/utils/index.js.map +1 -1
  43. package/dist/utils/validate-bundle-info.d.ts +2 -1
  44. package/dist/utils/validate-bundle-info.d.ts.map +1 -1
  45. package/dist/utils/validate-bundle-info.js +2 -2
  46. package/dist/utils/validate-bundle-info.js.map +1 -1
  47. package/dist/utils/web-component.d.ts +4 -3
  48. package/dist/utils/web-component.d.ts.map +1 -1
  49. package/dist/utils/web-component.js +2 -2
  50. package/dist/utils/web-component.js.map +1 -1
  51. package/package.json +15 -13
  52. package/src/__mocks__/test-component.tsx +1 -1
  53. package/src/__tests__/delayed.test.tsx +0 -1
  54. package/src/__tests__/event-bus.test.ts +1 -1
  55. package/src/__tests__/loader.test.tsx +7 -6
  56. package/src/__tests__/register-anvil2.test.tsx +0 -1
  57. package/src/__tests__/register-headless.test.tsx +0 -1
  58. package/src/__tests__/register.test.tsx +1 -1
  59. package/src/__tests__/use-prefetch.test.tsx +2 -2
  60. package/src/common.ts +3 -12
  61. package/src/contexts/tests/mfe-data-context.test.tsx +1 -1
  62. package/src/contexts/tests/mfe-metadata-context.test.tsx +1 -1
  63. package/src/event-bus.ts +0 -1
  64. package/src/globals.ts +2 -1
  65. package/src/headless-loader.tsx +1 -1
  66. package/src/history-manager.ts +1 -2
  67. package/src/loader.tsx +7 -8
  68. package/src/register-headless.ts +1 -1
  69. package/src/register.tsx +6 -7
  70. package/src/use-prefetch.ts +1 -1
  71. package/src/utils/__tests__/get-mfe-supports-rerendering.test.ts +1 -1
  72. package/src/utils/get-bundle-info.ts +6 -7
  73. package/src/utils/index.ts +0 -1
  74. package/src/utils/validate-bundle-info.ts +2 -1
  75. package/src/utils/web-component.tsx +6 -6
  76. package/dist/utils/get-version-mismatches.d.ts +0 -6
  77. package/dist/utils/get-version-mismatches.d.ts.map +0 -1
  78. package/dist/utils/get-version-mismatches.js +0 -30
  79. package/dist/utils/get-version-mismatches.js.map +0 -1
  80. package/dist/utils/is-compatible.d.ts +0 -2
  81. package/dist/utils/is-compatible.d.ts.map +0 -1
  82. package/dist/utils/is-compatible.js +0 -31
  83. package/dist/utils/is-compatible.js.map +0 -1
  84. package/src/utils/__tests__/get-version-mismatches.test.ts +0 -86
  85. package/src/utils/__tests__/is-compatible.test.ts +0 -91
  86. package/src/utils/get-version-mismatches.ts +0 -36
  87. package/src/utils/is-compatible.ts +0 -37
package/dist/common.d.ts CHANGED
@@ -1,11 +1,8 @@
1
1
  import { type LDService } from '@servicetitan/launchdarkly-service';
2
2
  import { Log } from '@servicetitan/log-service';
3
+ import { ExposedDependencies } from '@servicetitan/startup-utils';
3
4
  import { EventBus } from './event-bus';
4
5
  import { HistoryManager } from './history-manager';
5
- export type ExposedDependencies = Record<string, {
6
- version: string;
7
- variable: string;
8
- }>;
9
6
  export interface ExposedInstanceDependencies {
10
7
  launchDarkly?: {
11
8
  version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,MAAM,CACpC,MAAM,EACN;IACI,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CACJ,CAAC;AAEF,MAAM,WAAW,2BAA2B;IACxC,YAAY,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;CAC7D;AAED,eAAO,MAAM,cAAc,uDAAwC,CAAC;AACpE,eAAO,MAAM,0BAA0B,oEAEtC,CAAC;AACF,eAAO,MAAM,mCAAmC,4EAE/C,CAAC;AACF,eAAO,MAAM,sBAAsB,wDAAiD,CAAC;AACrF,eAAO,MAAM,iBAAiB,2DAA+C,CAAC;AAE9E,MAAM,WAAW,OAAO;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,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,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;AAUD,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,CAiDrD;AAED,wBAAgB,cAAc,oBAE7B"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,2BAA2B;IACxC,YAAY,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;CAC7D;AAED,eAAO,MAAM,cAAc,uDAAwC,CAAC;AACpE,eAAO,MAAM,0BAA0B,oEAEtC,CAAC;AACF,eAAO,MAAM,mCAAmC,4EAE/C,CAAC;AACF,eAAO,MAAM,sBAAsB,wDAAiD,CAAC;AACrF,eAAO,MAAM,iBAAiB,2DAA+C,CAAC;AAE9E,MAAM,WAAW,OAAO;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,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,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;AAUD,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,CAiDrD;AAED,wBAAgB,cAAc,oBAE7B"}
package/dist/common.js CHANGED
@@ -1,5 +1,5 @@
1
- import { useRef } from 'react';
2
1
  import { symbolToken } from '@servicetitan/react-ioc';
2
+ import { useRef } from 'react';
3
3
  export const BASENAME_TOKEN = symbolToken('BASENAME_TOKEN');
4
4
  export const EXPOSED_DEPENDENCIES_TOKEN = symbolToken('EXPOSED_DEPENDENCIES_TOKEN');
5
5
  export const EXPOSED_INSTANCE_DEPENDENCIES_TOKEN = symbolToken('EXPOSED_INSTANCE_DEPENDENCIES_TOKEN');
@@ -11,10 +11,11 @@ function createNetworkError(message) {
11
11
  return error;
12
12
  }
13
13
  export async function getJson(url, { retries = 5, retryDelay = 1000, onRequestError, ...config } = {}) {
14
+ var _response_url;
14
15
  let response;
15
16
  try {
16
17
  response = await fetch(url, config);
17
- } catch (e) {
18
+ } catch (unused) {
18
19
  var _config_signal;
19
20
  if (retries > 0 && !((_config_signal = config.signal) === null || _config_signal === void 0 ? void 0 : _config_signal.aborted)) {
20
21
  return new Promise((resolve, reject)=>{
@@ -42,7 +43,7 @@ export async function getJson(url, { retries = 5, retryDelay = 1000, onRequestEr
42
43
  let message = `Requesting "${url}" failed with status code ${response.status}.`;
43
44
  try {
44
45
  message += ` Details: ${await response.text()}.`;
45
- } catch (e) {} // eslint-disable-line no-empty
46
+ } catch (unused) {} // eslint-disable-line no-empty
46
47
  onRequestError === null || onRequestError === void 0 ? void 0 : onRequestError({
47
48
  status: response.status,
48
49
  json: responseJSON,
@@ -50,7 +51,6 @@ export async function getJson(url, { retries = 5, retryDelay = 1000, onRequestEr
50
51
  });
51
52
  throw createNetworkError(message);
52
53
  }
53
- var _response_url;
54
54
  return {
55
55
  data: responseJSON,
56
56
  headers: response.headers,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport { symbolToken } from '@servicetitan/react-ioc';\nimport { type LDService } from '@servicetitan/launchdarkly-service';\nimport { Log } from '@servicetitan/log-service';\n\nimport { EventBus } from './event-bus';\nimport { HistoryManager } from './history-manager';\n\nexport type ExposedDependencies = Record<\n string,\n {\n version: string;\n variable: string;\n }\n>;\n\nexport interface ExposedInstanceDependencies {\n launchDarkly?: { version: string; ldService?: LDService };\n}\n\nexport const BASENAME_TOKEN = symbolToken<string>('BASENAME_TOKEN');\nexport const EXPOSED_DEPENDENCIES_TOKEN = symbolToken<ExposedDependencies>(\n 'EXPOSED_DEPENDENCIES_TOKEN'\n);\nexport const EXPOSED_INSTANCE_DEPENDENCIES_TOKEN = symbolToken<ExposedInstanceDependencies>(\n 'EXPOSED_INSTANCE_DEPENDENCIES_TOKEN'\n);\nexport const IS_WEB_COMPONENT_TOKEN = symbolToken<boolean>('IS_WEB_COMPONENT_TOKEN');\nexport const RENDER_ROOT_TOKEN = symbolToken<ShadowRoot>('RENDER_ROOT_TOKEN');\n\nexport interface Entries {\n ldService?: LDService;\n logService?: Log;\n historyManager?: HistoryManager;\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n eventBus?: EventBus;\n basename?: string;\n onReady: () => void;\n onDispose: () => void;\n}\n\nexport interface IWebComponent {\n provide(entries: Entries): void;\n}\n\nexport interface GetJsonError {\n status: number;\n body: string;\n json: object;\n}\n\ninterface GetJsonOptions extends RequestInit {\n retries?: number;\n retryDelay?: number;\n onRequestError?(error: GetJsonError): void;\n}\n\nfunction createNetworkError(message: string) {\n const error = new Error(message);\n\n error.name = 'NetworkError';\n\n return error;\n}\n\nexport async function getJson<T = any>(\n url: string,\n { retries = 5, retryDelay = 1000, onRequestError, ...config }: GetJsonOptions = {}\n): Promise<{ data: T; headers: Headers; url: string }> {\n let response: Response;\n try {\n response = await fetch(url, config);\n } catch {\n if (retries > 0 && !config.signal?.aborted) {\n return new Promise((resolve, reject) => {\n const { signal } = config;\n\n const timeoutId = window.setTimeout(() => {\n getJson(url, {\n ...config,\n onRequestError,\n retries: retries - 1,\n retryDelay: retryDelay * 4,\n }).then(resolve, reject);\n }, retryDelay);\n\n const abortHandler = () => {\n window.clearTimeout(timeoutId);\n signal?.removeEventListener('abort', abortHandler);\n reject(signal?.reason);\n };\n\n signal?.addEventListener('abort', abortHandler);\n });\n }\n\n throw createNetworkError(`Failed to fetch: \"${url}\".`);\n }\n\n const responseJSON = await response.json().catch(() => ({}));\n\n if (!response.ok) {\n let message = `Requesting \"${url}\" failed with status code ${response.status}.`;\n\n try {\n message += ` Details: ${await response.text()}.`;\n } catch {} // eslint-disable-line no-empty\n\n onRequestError?.({\n status: response.status,\n json: responseJSON,\n body: await response.text().catch(() => ''),\n });\n throw createNetworkError(message);\n }\n\n return { data: responseJSON, headers: response.headers, url: response.url ?? url };\n}\n\nexport function useCancelation() {\n return useRef(new AbortController()).current;\n}\n"],"names":["useRef","symbolToken","BASENAME_TOKEN","EXPOSED_DEPENDENCIES_TOKEN","EXPOSED_INSTANCE_DEPENDENCIES_TOKEN","IS_WEB_COMPONENT_TOKEN","RENDER_ROOT_TOKEN","createNetworkError","message","error","Error","name","getJson","url","retries","retryDelay","onRequestError","config","response","fetch","signal","aborted","Promise","resolve","reject","timeoutId","window","setTimeout","then","abortHandler","clearTimeout","removeEventListener","reason","addEventListener","responseJSON","json","catch","ok","status","text","body","data","headers","useCancelation","AbortController","current"],"mappings":"AAAA,SAASA,MAAM,QAAQ,QAAQ;AAE/B,SAASC,WAAW,QAAQ,0BAA0B;AAmBtD,OAAO,MAAMC,iBAAiBD,YAAoB,kBAAkB;AACpE,OAAO,MAAME,6BAA6BF,YACtC,8BACF;AACF,OAAO,MAAMG,sCAAsCH,YAC/C,uCACF;AACF,OAAO,MAAMI,yBAAyBJ,YAAqB,0BAA0B;AACrF,OAAO,MAAMK,oBAAoBL,YAAwB,qBAAqB;AA8B9E,SAASM,mBAAmBC,OAAe;IACvC,MAAMC,QAAQ,IAAIC,MAAMF;IAExBC,MAAME,IAAI,GAAG;IAEb,OAAOF;AACX;AAEA,OAAO,eAAeG,QAClBC,GAAW,EACX,EAAEC,UAAU,CAAC,EAAEC,aAAa,IAAI,EAAEC,cAAc,EAAE,GAAGC,QAAwB,GAAG,CAAC,CAAC;IAElF,IAAIC;IACJ,IAAI;QACAA,WAAW,MAAMC,MAAMN,KAAKI;IAChC,EAAE,UAAM;YACgBA;QAApB,IAAIH,UAAU,KAAK,GAACG,iBAAAA,OAAOG,MAAM,cAAbH,qCAAAA,eAAeI,OAAO,GAAE;YACxC,OAAO,IAAIC,QAAQ,CAACC,SAASC;gBACzB,MAAM,EAAEJ,MAAM,EAAE,GAAGH;gBAEnB,MAAMQ,YAAYC,OAAOC,UAAU,CAAC;oBAChCf,QAAQC,KAAK;wBACT,GAAGI,MAAM;wBACTD;wBACAF,SAASA,UAAU;wBACnBC,YAAYA,aAAa;oBAC7B,GAAGa,IAAI,CAACL,SAASC;gBACrB,GAAGT;gBAEH,MAAMc,eAAe;oBACjBH,OAAOI,YAAY,CAACL;oBACpBL,mBAAAA,6BAAAA,OAAQW,mBAAmB,CAAC,SAASF;oBACrCL,OAAOJ,mBAAAA,6BAAAA,OAAQY,MAAM;gBACzB;gBAEAZ,mBAAAA,6BAAAA,OAAQa,gBAAgB,CAAC,SAASJ;YACtC;QACJ;QAEA,MAAMtB,mBAAmB,CAAC,kBAAkB,EAAEM,IAAI,EAAE,CAAC;IACzD;IAEA,MAAMqB,eAAe,MAAMhB,SAASiB,IAAI,GAAGC,KAAK,CAAC,IAAO,CAAA,CAAC,CAAA;IAEzD,IAAI,CAAClB,SAASmB,EAAE,EAAE;QACd,IAAI7B,UAAU,CAAC,YAAY,EAAEK,IAAI,0BAA0B,EAAEK,SAASoB,MAAM,CAAC,CAAC,CAAC;QAE/E,IAAI;YACA9B,WAAW,CAAC,UAAU,EAAE,MAAMU,SAASqB,IAAI,GAAG,CAAC,CAAC;QACpD,EAAE,UAAM,CAAC,EAAE,+BAA+B;QAE1CvB,2BAAAA,qCAAAA,eAAiB;YACbsB,QAAQpB,SAASoB,MAAM;YACvBH,MAAMD;YACNM,MAAM,MAAMtB,SAASqB,IAAI,GAAGH,KAAK,CAAC,IAAM;QAC5C;QACA,MAAM7B,mBAAmBC;IAC7B;QAE6DU;IAA7D,OAAO;QAAEuB,MAAMP;QAAcQ,SAASxB,SAASwB,OAAO;QAAE7B,KAAKK,CAAAA,gBAAAA,SAASL,GAAG,cAAZK,2BAAAA,gBAAgBL;IAAI;AACrF;AAEA,OAAO,SAAS8B;IACZ,OAAO3C,OAAO,IAAI4C,mBAAmBC,OAAO;AAChD"}
1
+ {"version":3,"sources":["../src/common.ts"],"sourcesContent":["import { type LDService } from '@servicetitan/launchdarkly-service';\nimport { Log } from '@servicetitan/log-service';\nimport { symbolToken } from '@servicetitan/react-ioc';\nimport { ExposedDependencies } from '@servicetitan/startup-utils';\nimport { useRef } from 'react';\nimport { EventBus } from './event-bus';\nimport { HistoryManager } from './history-manager';\n\nexport interface ExposedInstanceDependencies {\n launchDarkly?: { version: string; ldService?: LDService };\n}\n\nexport const BASENAME_TOKEN = symbolToken<string>('BASENAME_TOKEN');\nexport const EXPOSED_DEPENDENCIES_TOKEN = symbolToken<ExposedDependencies>(\n 'EXPOSED_DEPENDENCIES_TOKEN'\n);\nexport const EXPOSED_INSTANCE_DEPENDENCIES_TOKEN = symbolToken<ExposedInstanceDependencies>(\n 'EXPOSED_INSTANCE_DEPENDENCIES_TOKEN'\n);\nexport const IS_WEB_COMPONENT_TOKEN = symbolToken<boolean>('IS_WEB_COMPONENT_TOKEN');\nexport const RENDER_ROOT_TOKEN = symbolToken<ShadowRoot>('RENDER_ROOT_TOKEN');\n\nexport interface Entries {\n ldService?: LDService;\n logService?: Log;\n historyManager?: HistoryManager;\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n eventBus?: EventBus;\n basename?: string;\n onReady: () => void;\n onDispose: () => void;\n}\n\nexport interface IWebComponent {\n provide(entries: Entries): void;\n}\n\nexport interface GetJsonError {\n status: number;\n body: string;\n json: object;\n}\n\ninterface GetJsonOptions extends RequestInit {\n retries?: number;\n retryDelay?: number;\n onRequestError?(error: GetJsonError): void;\n}\n\nfunction createNetworkError(message: string) {\n const error = new Error(message);\n\n error.name = 'NetworkError';\n\n return error;\n}\n\nexport async function getJson<T = any>(\n url: string,\n { retries = 5, retryDelay = 1000, onRequestError, ...config }: GetJsonOptions = {}\n): Promise<{ data: T; headers: Headers; url: string }> {\n let response: Response;\n try {\n response = await fetch(url, config);\n } catch {\n if (retries > 0 && !config.signal?.aborted) {\n return new Promise((resolve, reject) => {\n const { signal } = config;\n\n const timeoutId = window.setTimeout(() => {\n getJson(url, {\n ...config,\n onRequestError,\n retries: retries - 1,\n retryDelay: retryDelay * 4,\n }).then(resolve, reject);\n }, retryDelay);\n\n const abortHandler = () => {\n window.clearTimeout(timeoutId);\n signal?.removeEventListener('abort', abortHandler);\n reject(signal?.reason);\n };\n\n signal?.addEventListener('abort', abortHandler);\n });\n }\n\n throw createNetworkError(`Failed to fetch: \"${url}\".`);\n }\n\n const responseJSON = await response.json().catch(() => ({}));\n\n if (!response.ok) {\n let message = `Requesting \"${url}\" failed with status code ${response.status}.`;\n\n try {\n message += ` Details: ${await response.text()}.`;\n } catch {} // eslint-disable-line no-empty\n\n onRequestError?.({\n status: response.status,\n json: responseJSON,\n body: await response.text().catch(() => ''),\n });\n throw createNetworkError(message);\n }\n\n return { data: responseJSON, headers: response.headers, url: response.url ?? url };\n}\n\nexport function useCancelation() {\n return useRef(new AbortController()).current;\n}\n"],"names":["symbolToken","useRef","BASENAME_TOKEN","EXPOSED_DEPENDENCIES_TOKEN","EXPOSED_INSTANCE_DEPENDENCIES_TOKEN","IS_WEB_COMPONENT_TOKEN","RENDER_ROOT_TOKEN","createNetworkError","message","error","Error","name","getJson","url","retries","retryDelay","onRequestError","config","response","fetch","signal","aborted","Promise","resolve","reject","timeoutId","window","setTimeout","then","abortHandler","clearTimeout","removeEventListener","reason","addEventListener","responseJSON","json","catch","ok","status","text","body","data","headers","useCancelation","AbortController","current"],"mappings":"AAEA,SAASA,WAAW,QAAQ,0BAA0B;AAEtD,SAASC,MAAM,QAAQ,QAAQ;AAQ/B,OAAO,MAAMC,iBAAiBF,YAAoB,kBAAkB;AACpE,OAAO,MAAMG,6BAA6BH,YACtC,8BACF;AACF,OAAO,MAAMI,sCAAsCJ,YAC/C,uCACF;AACF,OAAO,MAAMK,yBAAyBL,YAAqB,0BAA0B;AACrF,OAAO,MAAMM,oBAAoBN,YAAwB,qBAAqB;AA8B9E,SAASO,mBAAmBC,OAAe;IACvC,MAAMC,QAAQ,IAAIC,MAAMF;IAExBC,MAAME,IAAI,GAAG;IAEb,OAAOF;AACX;AAEA,OAAO,eAAeG,QAClBC,GAAW,EACX,EAAEC,UAAU,CAAC,EAAEC,aAAa,IAAI,EAAEC,cAAc,EAAE,GAAGC,QAAwB,GAAG,CAAC,CAAC;QAiDrBC;IA/C7D,IAAIA;IACJ,IAAI;QACAA,WAAW,MAAMC,MAAMN,KAAKI;IAChC,EAAE,eAAM;YACgBA;QAApB,IAAIH,UAAU,KAAK,GAACG,iBAAAA,OAAOG,MAAM,cAAbH,qCAAAA,eAAeI,OAAO,GAAE;YACxC,OAAO,IAAIC,QAAQ,CAACC,SAASC;gBACzB,MAAM,EAAEJ,MAAM,EAAE,GAAGH;gBAEnB,MAAMQ,YAAYC,OAAOC,UAAU,CAAC;oBAChCf,QAAQC,KAAK;wBACT,GAAGI,MAAM;wBACTD;wBACAF,SAASA,UAAU;wBACnBC,YAAYA,aAAa;oBAC7B,GAAGa,IAAI,CAACL,SAASC;gBACrB,GAAGT;gBAEH,MAAMc,eAAe;oBACjBH,OAAOI,YAAY,CAACL;oBACpBL,mBAAAA,6BAAAA,OAAQW,mBAAmB,CAAC,SAASF;oBACrCL,OAAOJ,mBAAAA,6BAAAA,OAAQY,MAAM;gBACzB;gBAEAZ,mBAAAA,6BAAAA,OAAQa,gBAAgB,CAAC,SAASJ;YACtC;QACJ;QAEA,MAAMtB,mBAAmB,CAAC,kBAAkB,EAAEM,IAAI,EAAE,CAAC;IACzD;IAEA,MAAMqB,eAAe,MAAMhB,SAASiB,IAAI,GAAGC,KAAK,CAAC,IAAO,CAAA,CAAC,CAAA;IAEzD,IAAI,CAAClB,SAASmB,EAAE,EAAE;QACd,IAAI7B,UAAU,CAAC,YAAY,EAAEK,IAAI,0BAA0B,EAAEK,SAASoB,MAAM,CAAC,CAAC,CAAC;QAE/E,IAAI;YACA9B,WAAW,CAAC,UAAU,EAAE,MAAMU,SAASqB,IAAI,GAAG,CAAC,CAAC;QACpD,EAAE,eAAM,CAAC,EAAE,+BAA+B;QAE1CvB,2BAAAA,qCAAAA,eAAiB;YACbsB,QAAQpB,SAASoB,MAAM;YACvBH,MAAMD;YACNM,MAAM,MAAMtB,SAASqB,IAAI,GAAGH,KAAK,CAAC,IAAM;QAC5C;QACA,MAAM7B,mBAAmBC;IAC7B;IAEA,OAAO;QAAEiC,MAAMP;QAAcQ,SAASxB,SAASwB,OAAO;QAAE7B,GAAG,GAAEK,gBAAAA,SAASL,GAAG,cAAZK,2BAAAA,gBAAgBL;IAAI;AACrF;AAEA,OAAO,SAAS8B;IACZ,OAAO1C,OAAO,IAAI2C,mBAAmBC,OAAO;AAChD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/contexts/tests/mfe-data-context.test.tsx"],"sourcesContent":["import { FC, PropsWithChildren } from 'react';\nimport { renderHook } from '@testing-library/react';\nimport { MFEDataContext, useMFEDataContext } from '../mfe-data-context';\n\ndescribe(`[web-components] ${useMFEDataContext.name}`, () => {\n const subject = (wrapper?: FC) => renderHook(() => useMFEDataContext(), { wrapper });\n\n describe('when the MFEDataContext is provided by a parent', () => {\n const data = { foo: 'bar' };\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return <MFEDataContext.Provider value={data}>{children}</MFEDataContext.Provider>;\n };\n\n test('returns the context', () => {\n expect(subject(Wrapper).result.current).toEqual(data);\n });\n });\n\n describe('when the MFEDataContext is not provided by a parent', () => {\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return <div>{children}</div>;\n };\n\n test('returns an empty object', () => {\n expect(subject(Wrapper).result.current).toEqual({});\n });\n });\n});\n"],"names":["renderHook","MFEDataContext","useMFEDataContext","describe","name","subject","wrapper","data","foo","Wrapper","children","Provider","value","test","expect","result","current","toEqual","div"],"mappings":";AACA,SAASA,UAAU,QAAQ,yBAAyB;AACpD,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,sBAAsB;AAExEC,SAAS,CAAC,iBAAiB,EAAED,kBAAkBE,IAAI,EAAE,EAAE;IACnD,MAAMC,UAAU,CAACC,UAAiBN,WAAW,IAAME,qBAAqB;YAAEI;QAAQ;IAElFH,SAAS,mDAAmD;QACxD,MAAMI,OAAO;YAAEC,KAAK;QAAM;QAC1B,MAAMC,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBAAO,KAACT,eAAeU,QAAQ;gBAACC,OAAOL;0BAAOG;;QAClD;QAEAG,KAAK,uBAAuB;YACxBC,OAAOT,QAAQI,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAACV;QACpD;IACJ;IAEAJ,SAAS,uDAAuD;QAC5D,MAAMM,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBAAO,KAACQ;0BAAKR;;QACjB;QAEAG,KAAK,2BAA2B;YAC5BC,OAAOT,QAAQI,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAAC,CAAC;QACrD;IACJ;AACJ"}
1
+ {"version":3,"sources":["../../../src/contexts/tests/mfe-data-context.test.tsx"],"sourcesContent":["import { renderHook } from '@testing-library/react';\nimport { FC, PropsWithChildren } from 'react';\nimport { MFEDataContext, useMFEDataContext } from '../mfe-data-context';\n\ndescribe(`[web-components] ${useMFEDataContext.name}`, () => {\n const subject = (wrapper?: FC) => renderHook(() => useMFEDataContext(), { wrapper });\n\n describe('when the MFEDataContext is provided by a parent', () => {\n const data = { foo: 'bar' };\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return <MFEDataContext.Provider value={data}>{children}</MFEDataContext.Provider>;\n };\n\n test('returns the context', () => {\n expect(subject(Wrapper).result.current).toEqual(data);\n });\n });\n\n describe('when the MFEDataContext is not provided by a parent', () => {\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return <div>{children}</div>;\n };\n\n test('returns an empty object', () => {\n expect(subject(Wrapper).result.current).toEqual({});\n });\n });\n});\n"],"names":["renderHook","MFEDataContext","useMFEDataContext","describe","name","subject","wrapper","data","foo","Wrapper","children","Provider","value","test","expect","result","current","toEqual","div"],"mappings":";AAAA,SAASA,UAAU,QAAQ,yBAAyB;AAEpD,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,sBAAsB;AAExEC,SAAS,CAAC,iBAAiB,EAAED,kBAAkBE,IAAI,EAAE,EAAE;IACnD,MAAMC,UAAU,CAACC,UAAiBN,WAAW,IAAME,qBAAqB;YAAEI;QAAQ;IAElFH,SAAS,mDAAmD;QACxD,MAAMI,OAAO;YAAEC,KAAK;QAAM;QAC1B,MAAMC,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBAAO,KAACT,eAAeU,QAAQ;gBAACC,OAAOL;0BAAOG;;QAClD;QAEAG,KAAK,uBAAuB;YACxBC,OAAOT,QAAQI,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAACV;QACpD;IACJ;IAEAJ,SAAS,uDAAuD;QAC5D,MAAMM,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBAAO,KAACQ;0BAAKR;;QACjB;QAEAG,KAAK,2BAA2B;YAC5BC,OAAOT,QAAQI,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAAC,CAAC;QACrD;IACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/contexts/tests/mfe-metadata-context.test.tsx"],"sourcesContent":["import { FC, PropsWithChildren } from 'react';\nimport { renderHook } from '@testing-library/react';\nimport { MFEMetadataContext, useMFEMetadataContext } from '../mfe-metadata-context';\n\ndescribe(`[web-components] ${useMFEMetadataContext.name}`, () => {\n const subject = (wrapper?: FC) => renderHook(() => useMFEMetadataContext(), { wrapper });\n\n describe('when the MFEMetadataContext is provided by a parent', () => {\n const shadowRoot = document.createElement('div').attachShadow({ mode: 'open' });\n const portalShadowRoot = document.createElement('span').attachShadow({ mode: 'open' });\n const metadata = { shadowRoot, portalShadowRoot };\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return (\n <MFEMetadataContext.Provider value={metadata}>\n {children}\n </MFEMetadataContext.Provider>\n );\n };\n\n test('returns the context', () => {\n expect(subject(Wrapper).result.current).toEqual(metadata);\n });\n });\n\n describe('when the MFEMetadataContext is not provided by a parent', () => {\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return <div>{children}</div>;\n };\n\n test('returns an empty object', () => {\n expect(subject(Wrapper).result.current).toEqual({});\n });\n });\n});\n"],"names":["renderHook","MFEMetadataContext","useMFEMetadataContext","describe","name","subject","wrapper","shadowRoot","document","createElement","attachShadow","mode","portalShadowRoot","metadata","Wrapper","children","Provider","value","test","expect","result","current","toEqual","div"],"mappings":";AACA,SAASA,UAAU,QAAQ,yBAAyB;AACpD,SAASC,kBAAkB,EAAEC,qBAAqB,QAAQ,0BAA0B;AAEpFC,SAAS,CAAC,iBAAiB,EAAED,sBAAsBE,IAAI,EAAE,EAAE;IACvD,MAAMC,UAAU,CAACC,UAAiBN,WAAW,IAAME,yBAAyB;YAAEI;QAAQ;IAEtFH,SAAS,uDAAuD;QAC5D,MAAMI,aAAaC,SAASC,aAAa,CAAC,OAAOC,YAAY,CAAC;YAAEC,MAAM;QAAO;QAC7E,MAAMC,mBAAmBJ,SAASC,aAAa,CAAC,QAAQC,YAAY,CAAC;YAAEC,MAAM;QAAO;QACpF,MAAME,WAAW;YAAEN;YAAYK;QAAiB;QAChD,MAAME,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBACI,KAACd,mBAAmBe,QAAQ;gBAACC,OAAOJ;0BAC/BE;;QAGb;QAEAG,KAAK,uBAAuB;YACxBC,OAAOd,QAAQS,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAACT;QACpD;IACJ;IAEAV,SAAS,2DAA2D;QAChE,MAAMW,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBAAO,KAACQ;0BAAKR;;QACjB;QAEAG,KAAK,2BAA2B;YAC5BC,OAAOd,QAAQS,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAAC,CAAC;QACrD;IACJ;AACJ"}
1
+ {"version":3,"sources":["../../../src/contexts/tests/mfe-metadata-context.test.tsx"],"sourcesContent":["import { renderHook } from '@testing-library/react';\nimport { FC, PropsWithChildren } from 'react';\nimport { MFEMetadataContext, useMFEMetadataContext } from '../mfe-metadata-context';\n\ndescribe(`[web-components] ${useMFEMetadataContext.name}`, () => {\n const subject = (wrapper?: FC) => renderHook(() => useMFEMetadataContext(), { wrapper });\n\n describe('when the MFEMetadataContext is provided by a parent', () => {\n const shadowRoot = document.createElement('div').attachShadow({ mode: 'open' });\n const portalShadowRoot = document.createElement('span').attachShadow({ mode: 'open' });\n const metadata = { shadowRoot, portalShadowRoot };\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return (\n <MFEMetadataContext.Provider value={metadata}>\n {children}\n </MFEMetadataContext.Provider>\n );\n };\n\n test('returns the context', () => {\n expect(subject(Wrapper).result.current).toEqual(metadata);\n });\n });\n\n describe('when the MFEMetadataContext is not provided by a parent', () => {\n const Wrapper: FC<PropsWithChildren> = ({ children }) => {\n return <div>{children}</div>;\n };\n\n test('returns an empty object', () => {\n expect(subject(Wrapper).result.current).toEqual({});\n });\n });\n});\n"],"names":["renderHook","MFEMetadataContext","useMFEMetadataContext","describe","name","subject","wrapper","shadowRoot","document","createElement","attachShadow","mode","portalShadowRoot","metadata","Wrapper","children","Provider","value","test","expect","result","current","toEqual","div"],"mappings":";AAAA,SAASA,UAAU,QAAQ,yBAAyB;AAEpD,SAASC,kBAAkB,EAAEC,qBAAqB,QAAQ,0BAA0B;AAEpFC,SAAS,CAAC,iBAAiB,EAAED,sBAAsBE,IAAI,EAAE,EAAE;IACvD,MAAMC,UAAU,CAACC,UAAiBN,WAAW,IAAME,yBAAyB;YAAEI;QAAQ;IAEtFH,SAAS,uDAAuD;QAC5D,MAAMI,aAAaC,SAASC,aAAa,CAAC,OAAOC,YAAY,CAAC;YAAEC,MAAM;QAAO;QAC7E,MAAMC,mBAAmBJ,SAASC,aAAa,CAAC,QAAQC,YAAY,CAAC;YAAEC,MAAM;QAAO;QACpF,MAAME,WAAW;YAAEN;YAAYK;QAAiB;QAChD,MAAME,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBACI,KAACd,mBAAmBe,QAAQ;gBAACC,OAAOJ;0BAC/BE;;QAGb;QAEAG,KAAK,uBAAuB;YACxBC,OAAOd,QAAQS,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAACT;QACpD;IACJ;IAEAV,SAAS,2DAA2D;QAChE,MAAMW,UAAiC,CAAC,EAAEC,QAAQ,EAAE;YAChD,qBAAO,KAACQ;0BAAKR;;QACjB;QAEAG,KAAK,2BAA2B;YAC5BC,OAAOd,QAAQS,SAASM,MAAM,CAACC,OAAO,EAAEC,OAAO,CAAC,CAAC;QACrD;IACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event-bus.ts"],"sourcesContent":["import { symbolToken, SymbolToken } from '@servicetitan/react-ioc';\nimport mitt from 'mitt';\n\nimport { JSON, Serializable } from './types';\n\nexport const EVENT_BUS_TOKEN = symbolToken<EventBus>('EVENT_BUS_TOKEN');\n\nexport function typedEventBusToken<EventTypes extends Serializable<EventTypes>>() {\n return symbolToken<EventBus<EventTypes>>('EVENT_BUS_TOKEN');\n}\n\nexport type EventHandler<EventTypes, Event, T = never> = (\n data: [T] extends [never]\n ? Event extends SymbolToken<infer DataType>\n ? Serializable<DataType>\n : Event extends keyof EventTypes\n ? EventTypes[Event]\n : T\n : Serializable<T>\n) => void;\n\ntype JobPayload = JSON | void;\n\nexport type EventType = string | number | symbol;\nexport type SymbolTokenEventType<T, U extends EventType = EventType> =\n U extends SymbolToken<any> ? SymbolToken<T> : U;\n\nexport type JobEventHandler<Event> = (defer: {\n /**\n * Successfully complete a job.\n * @param result The value to return from the successfully completed job.\n */\n resolve(\n ...result: Event extends SymbolToken<infer ResultType>\n ? undefined extends ResultType\n ? [Serializable<ResultType>?]\n : [Serializable<ResultType>]\n : [JobPayload]\n ): void;\n /**\n * Fail a job.\n * @param reason The error to return from the failed job.\n */\n reject(reason?: string | Error): void;\n}) => void;\n\nexport class EventBus<EventTypes extends Serializable<EventTypes> = never> {\n job = {\n /**\n * Register a job event handler. Jobs event handlers return a result or an error.\n * @param event The job event to handle.\n * @param handler The handler to call when the event occurs. This handler is passed a `resolve` callback to return a successful result, and a `reject` callback to return an error.\n */\n on: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n },\n\n /**\n * Deregister a job event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.emitter.off(event, handler);\n },\n\n /**\n * Send a job event.\n * @param event The event to send.\n * @returns a Promise that resolves or rejects depending on whether the job completes successfully.\n */\n emit: <Event extends SymbolToken<any> | keyof EventTypes>(event: Event) => {\n this.validateEvent(event);\n return new Promise<\n Event extends SymbolToken<infer ResultType> ? Serializable<ResultType> : JobPayload\n >((resolve, reject) => {\n this.emitter.emit(event, {\n resolve,\n reject: (reason?: string | Error) => {\n if (typeof reason === 'string' || reason instanceof Error) {\n reject(reason);\n } else {\n reject();\n }\n },\n });\n });\n },\n };\n\n private emitter = mitt<any>();\n\n /**\n * Register an event handler.\n * @param event The event to handle.\n * @param handler The handler to call when the event occurs.\n */\n on = <T extends Serializable<T> = never, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n };\n\n /**\n * Deregister an event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off = <\n T extends Serializable<T> = never,\n Event extends SymbolToken<T> | keyof EventTypes = any,\n >(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.emitter.off(event, handler);\n };\n\n /**\n * Send an event.\n * @param event The event to send.\n * @param data The data to pass to the event's handler.\n */\n emit = <T extends Serializable<T>, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n ...data: Event extends SymbolToken<any>\n ? undefined extends T\n ? [T?]\n : [T]\n : [EventTypes] extends [never]\n ? [T?]\n : Event extends keyof EventTypes\n ? undefined extends EventTypes[Event]\n ? [EventTypes[Event]?]\n : [EventTypes[Event]] extends [never]\n ? []\n : [EventTypes[Event]]\n : never\n ) => {\n this.validateEvent(event);\n this.emitter.emit(event, data[0]);\n };\n\n private validateEvent(event: any) {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const name = this.getName(event);\n if (name === undefined || /^[^:]+:.+/.test(name) || allowListedEvents.has(name)) {\n return;\n }\n\n throw new Error('event must have format {module}:{name}');\n }\n\n private getName(event: any) {\n if (typeof event === 'string') {\n return event;\n }\n if (typeof event === 'symbol') {\n return Symbol.keyFor(event) ?? '';\n }\n return undefined;\n }\n}\n\nconst allowListedEvents = new Set([\n ':widgets:message',\n '[EH] Module Link Clicked',\n '[EH] Module Loaded',\n '[internal] reset',\n 'blink',\n 'CLOSE_COMPONENT',\n 'CLOSE_JOB_EDIT_FLYOUT',\n 'close-troubleshooter',\n 'company-profile-request-save',\n 'company-profile-saved-error',\n 'company-profile-saved',\n 'dismiss-discrepancy-event',\n 'dismiss-discrepancy-map-event',\n 'dispatch-JobEditFlyout-fetchData',\n 'dispatch-pro-query-toggle-data',\n 'dispatch-pro-recieve-toggle-data',\n 'dispatch-pro-set-job-enabled',\n 'dispatchpro-fetchStatus',\n 'dispatchpro-open-issuereporter',\n 'DRAWER_CREATED_CUSTOMER',\n 'employees-emails-processed',\n 'employees-request-save',\n 'employees-saved-error',\n 'employees-saved',\n 'ium-ep-cancel-changes',\n 'ium-ep-form-can-be-submitted-change',\n 'ium-ep-save-changes',\n 'loaded',\n 'MESSAGE_TECHNICIAN',\n 'my-custom-event',\n 'NEW_EVENT',\n 'NonJobEventSelectedEvent',\n 'ON_WIDGET_INIT',\n 'OPEN_ASSIST_SCREEN',\n 'OPEN_CREATE_CUSTOMER_DRAWER',\n 'OPEN_DC_SIDE_PANEL_COMPONENT',\n 'OPEN_JOB_EDIT_FLYOUT',\n 'OPEN_RESCHEDULE_FLYOUT',\n 'open-troubleshooter',\n 'resolve-discrepancy-map-event',\n 'restore-discrepancy-event',\n 'setLabel',\n 'SHOW_POP_UP_MESSAGE',\n 'TEAMS_SELECTED',\n 'tech-is-dispatch-pro-change',\n 'technicians-emails-processed',\n 'technicians-request-save',\n 'technicians-saved-error',\n 'technicians-saved',\n 'timesheet-activity-saved',\n 'TOGGLE_DC_SIDE_PANEL_COMPONENT',\n 'updateUserEmail',\n 'VIEW_NON_JOB_EVENT',\n 'visibility',\n]);\n"],"names":["symbolToken","mitt","EVENT_BUS_TOKEN","typedEventBusToken","EventBus","validateEvent","event","process","env","NODE_ENV","name","getName","undefined","test","allowListedEvents","has","Error","Symbol","keyFor","job","on","handler","emitter","off","emit","Promise","resolve","reject","reason","data","Set"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,WAAW,QAAqB,0BAA0B;AACnE,OAAOC,UAAU,OAAO;AAIxB,OAAO,MAAMC,kBAAkBF,YAAsB,mBAAmB;AAExE,OAAO,SAASG;IACZ,OAAOH,YAAkC;AAC7C;AAqCA,OAAO,MAAMI;IA0GDC,cAAcC,KAAU,EAAE;QAC9B,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;YACvC;QACJ;QAEA,MAAMC,OAAO,IAAI,CAACC,OAAO,CAACL;QAC1B,IAAII,SAASE,aAAa,YAAYC,IAAI,CAACH,SAASI,kBAAkBC,GAAG,CAACL,OAAO;YAC7E;QACJ;QAEA,MAAM,IAAIM,MAAM;IACpB;IAEQL,QAAQL,KAAU,EAAE;QACxB,IAAI,OAAOA,UAAU,UAAU;YAC3B,OAAOA;QACX;QACA,IAAI,OAAOA,UAAU,UAAU;gBACpBW;YAAP,OAAOA,CAAAA,iBAAAA,OAAOC,MAAM,CAACZ,oBAAdW,4BAAAA,iBAAwB;QACnC;QACA,OAAOL;IACX;;QA9HAO,uBAAAA,OAAM;YACF;;;;SAIC,GACDC,IAAI,CACAd,OACAe;gBAEA,IAAI,CAAChB,aAAa,CAACC;gBACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;YAC3B;YAEA;;;;SAIC,GACDE,KAAK,CACDjB,OACAe;gBAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;YAC5B;YAEA;;;;SAIC,GACDG,MAAM,CAAoDlB;gBACtD,IAAI,CAACD,aAAa,CAACC;gBACnB,OAAO,IAAImB,QAET,CAACC,SAASC;oBACR,IAAI,CAACL,OAAO,CAACE,IAAI,CAAClB,OAAO;wBACrBoB;wBACAC,QAAQ,CAACC;4BACL,IAAI,OAAOA,WAAW,YAAYA,kBAAkBZ,OAAO;gCACvDW,OAAOC;4BACX,OAAO;gCACHD;4BACJ;wBACJ;oBACJ;gBACJ;YACJ;QACJ;QAEA,uBAAQL,WAAUrB;QAElB;;;;KAIC,GACDmB,uBAAAA,MAAK,CACDd,OACAe;YAEA,IAAI,CAAChB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;QAC3B;QAEA;;;;KAIC,GACDE,uBAAAA,OAAM,CAIFjB,OACAe;YAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;QAC5B;QAEA;;;;KAIC,GACDG,uBAAAA,QAAO,CACHlB,OACA,GAAGuB;YAcH,IAAI,CAACxB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACE,IAAI,CAAClB,OAAOuB,IAAI,CAAC,EAAE;QACpC;;AAwBJ;AAEA,MAAMf,oBAAoB,IAAIgB,IAAI;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACH"}
1
+ {"version":3,"sources":["../src/event-bus.ts"],"sourcesContent":["import { symbolToken, SymbolToken } from '@servicetitan/react-ioc';\nimport mitt from 'mitt';\nimport { JSON, Serializable } from './types';\n\nexport const EVENT_BUS_TOKEN = symbolToken<EventBus>('EVENT_BUS_TOKEN');\n\nexport function typedEventBusToken<EventTypes extends Serializable<EventTypes>>() {\n return symbolToken<EventBus<EventTypes>>('EVENT_BUS_TOKEN');\n}\n\nexport type EventHandler<EventTypes, Event, T = never> = (\n data: [T] extends [never]\n ? Event extends SymbolToken<infer DataType>\n ? Serializable<DataType>\n : Event extends keyof EventTypes\n ? EventTypes[Event]\n : T\n : Serializable<T>\n) => void;\n\ntype JobPayload = JSON | void;\n\nexport type EventType = string | number | symbol;\nexport type SymbolTokenEventType<T, U extends EventType = EventType> =\n U extends SymbolToken<any> ? SymbolToken<T> : U;\n\nexport type JobEventHandler<Event> = (defer: {\n /**\n * Successfully complete a job.\n * @param result The value to return from the successfully completed job.\n */\n resolve(\n ...result: Event extends SymbolToken<infer ResultType>\n ? undefined extends ResultType\n ? [Serializable<ResultType>?]\n : [Serializable<ResultType>]\n : [JobPayload]\n ): void;\n /**\n * Fail a job.\n * @param reason The error to return from the failed job.\n */\n reject(reason?: string | Error): void;\n}) => void;\n\nexport class EventBus<EventTypes extends Serializable<EventTypes> = never> {\n job = {\n /**\n * Register a job event handler. Jobs event handlers return a result or an error.\n * @param event The job event to handle.\n * @param handler The handler to call when the event occurs. This handler is passed a `resolve` callback to return a successful result, and a `reject` callback to return an error.\n */\n on: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n },\n\n /**\n * Deregister a job event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.emitter.off(event, handler);\n },\n\n /**\n * Send a job event.\n * @param event The event to send.\n * @returns a Promise that resolves or rejects depending on whether the job completes successfully.\n */\n emit: <Event extends SymbolToken<any> | keyof EventTypes>(event: Event) => {\n this.validateEvent(event);\n return new Promise<\n Event extends SymbolToken<infer ResultType> ? Serializable<ResultType> : JobPayload\n >((resolve, reject) => {\n this.emitter.emit(event, {\n resolve,\n reject: (reason?: string | Error) => {\n if (typeof reason === 'string' || reason instanceof Error) {\n reject(reason);\n } else {\n reject();\n }\n },\n });\n });\n },\n };\n\n private emitter = mitt<any>();\n\n /**\n * Register an event handler.\n * @param event The event to handle.\n * @param handler The handler to call when the event occurs.\n */\n on = <T extends Serializable<T> = never, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n };\n\n /**\n * Deregister an event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off = <\n T extends Serializable<T> = never,\n Event extends SymbolToken<T> | keyof EventTypes = any,\n >(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.emitter.off(event, handler);\n };\n\n /**\n * Send an event.\n * @param event The event to send.\n * @param data The data to pass to the event's handler.\n */\n emit = <T extends Serializable<T>, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n ...data: Event extends SymbolToken<any>\n ? undefined extends T\n ? [T?]\n : [T]\n : [EventTypes] extends [never]\n ? [T?]\n : Event extends keyof EventTypes\n ? undefined extends EventTypes[Event]\n ? [EventTypes[Event]?]\n : [EventTypes[Event]] extends [never]\n ? []\n : [EventTypes[Event]]\n : never\n ) => {\n this.validateEvent(event);\n this.emitter.emit(event, data[0]);\n };\n\n private validateEvent(event: any) {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const name = this.getName(event);\n if (name === undefined || /^[^:]+:.+/.test(name) || allowListedEvents.has(name)) {\n return;\n }\n\n throw new Error('event must have format {module}:{name}');\n }\n\n private getName(event: any) {\n if (typeof event === 'string') {\n return event;\n }\n if (typeof event === 'symbol') {\n return Symbol.keyFor(event) ?? '';\n }\n return undefined;\n }\n}\n\nconst allowListedEvents = new Set([\n ':widgets:message',\n '[EH] Module Link Clicked',\n '[EH] Module Loaded',\n '[internal] reset',\n 'blink',\n 'CLOSE_COMPONENT',\n 'CLOSE_JOB_EDIT_FLYOUT',\n 'close-troubleshooter',\n 'company-profile-request-save',\n 'company-profile-saved-error',\n 'company-profile-saved',\n 'dismiss-discrepancy-event',\n 'dismiss-discrepancy-map-event',\n 'dispatch-JobEditFlyout-fetchData',\n 'dispatch-pro-query-toggle-data',\n 'dispatch-pro-recieve-toggle-data',\n 'dispatch-pro-set-job-enabled',\n 'dispatchpro-fetchStatus',\n 'dispatchpro-open-issuereporter',\n 'DRAWER_CREATED_CUSTOMER',\n 'employees-emails-processed',\n 'employees-request-save',\n 'employees-saved-error',\n 'employees-saved',\n 'ium-ep-cancel-changes',\n 'ium-ep-form-can-be-submitted-change',\n 'ium-ep-save-changes',\n 'loaded',\n 'MESSAGE_TECHNICIAN',\n 'my-custom-event',\n 'NEW_EVENT',\n 'NonJobEventSelectedEvent',\n 'ON_WIDGET_INIT',\n 'OPEN_ASSIST_SCREEN',\n 'OPEN_CREATE_CUSTOMER_DRAWER',\n 'OPEN_DC_SIDE_PANEL_COMPONENT',\n 'OPEN_JOB_EDIT_FLYOUT',\n 'OPEN_RESCHEDULE_FLYOUT',\n 'open-troubleshooter',\n 'resolve-discrepancy-map-event',\n 'restore-discrepancy-event',\n 'setLabel',\n 'SHOW_POP_UP_MESSAGE',\n 'TEAMS_SELECTED',\n 'tech-is-dispatch-pro-change',\n 'technicians-emails-processed',\n 'technicians-request-save',\n 'technicians-saved-error',\n 'technicians-saved',\n 'timesheet-activity-saved',\n 'TOGGLE_DC_SIDE_PANEL_COMPONENT',\n 'updateUserEmail',\n 'VIEW_NON_JOB_EVENT',\n 'visibility',\n]);\n"],"names":["symbolToken","mitt","EVENT_BUS_TOKEN","typedEventBusToken","EventBus","validateEvent","event","process","env","NODE_ENV","name","getName","undefined","test","allowListedEvents","has","Error","Symbol","keyFor","job","on","handler","emitter","off","emit","Promise","resolve","reject","reason","data","Set"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,WAAW,QAAqB,0BAA0B;AACnE,OAAOC,UAAU,OAAO;AAGxB,OAAO,MAAMC,kBAAkBF,YAAsB,mBAAmB;AAExE,OAAO,SAASG;IACZ,OAAOH,YAAkC;AAC7C;AAqCA,OAAO,MAAMI;IA0GDC,cAAcC,KAAU,EAAE;QAC9B,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;YACvC;QACJ;QAEA,MAAMC,OAAO,IAAI,CAACC,OAAO,CAACL;QAC1B,IAAII,SAASE,aAAa,YAAYC,IAAI,CAACH,SAASI,kBAAkBC,GAAG,CAACL,OAAO;YAC7E;QACJ;QAEA,MAAM,IAAIM,MAAM;IACpB;IAEQL,QAAQL,KAAU,EAAE;QACxB,IAAI,OAAOA,UAAU,UAAU;YAC3B,OAAOA;QACX;QACA,IAAI,OAAOA,UAAU,UAAU;gBACpBW;YAAP,QAAOA,iBAAAA,OAAOC,MAAM,CAACZ,oBAAdW,4BAAAA,iBAAwB;QACnC;QACA,OAAOL;IACX;;QA9HAO,uBAAAA,OAAM;YACF;;;;SAIC,GACDC,IAAI,CACAd,OACAe;gBAEA,IAAI,CAAChB,aAAa,CAACC;gBACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;YAC3B;YAEA;;;;SAIC,GACDE,KAAK,CACDjB,OACAe;gBAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;YAC5B;YAEA;;;;SAIC,GACDG,MAAM,CAAoDlB;gBACtD,IAAI,CAACD,aAAa,CAACC;gBACnB,OAAO,IAAImB,QAET,CAACC,SAASC;oBACR,IAAI,CAACL,OAAO,CAACE,IAAI,CAAClB,OAAO;wBACrBoB;wBACAC,QAAQ,CAACC;4BACL,IAAI,OAAOA,WAAW,YAAYA,kBAAkBZ,OAAO;gCACvDW,OAAOC;4BACX,OAAO;gCACHD;4BACJ;wBACJ;oBACJ;gBACJ;YACJ;QACJ;QAEA,uBAAQL,WAAUrB;QAElB;;;;KAIC,GACDmB,uBAAAA,MAAK,CACDd,OACAe;YAEA,IAAI,CAAChB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;QAC3B;QAEA;;;;KAIC,GACDE,uBAAAA,OAAM,CAIFjB,OACAe;YAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;QAC5B;QAEA;;;;KAIC,GACDG,uBAAAA,QAAO,CACHlB,OACA,GAAGuB;YAcH,IAAI,CAACxB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACE,IAAI,CAAClB,OAAOuB,IAAI,CAAC,EAAE;QACpC;;AAwBJ;AAEA,MAAMf,oBAAoB,IAAIgB,IAAI;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACH"}
package/dist/globals.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { ExposedDependencies, ExposedInstanceDependencies } from './common';
1
+ import { ExposedDependencies } from '@servicetitan/startup-utils';
2
+ import { ExposedInstanceDependencies } from './common';
2
3
  declare global {
3
4
  export const EXPOSED_DEPENDENCIES: ExposedDependencies | undefined;
4
5
  export const EXPOSED_INSTANCE_DEPENDENCIES: ExposedInstanceDependencies | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAE5E,OAAO,CAAC,MAAM,CAAC;IACX,MAAM,CAAC,MAAM,oBAAoB,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACnE,MAAM,CAAC,MAAM,6BAA6B,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACpF,MAAM,CAAC,MAAM,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;CACvD;AAUD,QAAA,MAAM,qBAAqB,iCAEzB,CAAC;AAEH,QAAA,MAAM,mBAAmB,oBAEvB,CAAC;AAEH,QAAA,MAAM,8BAA8B,yCAElC,CAAC;AAEH,OAAO,EACH,qBAAqB,IAAI,oBAAoB,EAC7C,8BAA8B,IAAI,6BAA6B,EAC/D,mBAAmB,IAAI,kBAAkB,GAC5C,CAAC"}
1
+ {"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,CAAC,MAAM,CAAC;IACX,MAAM,CAAC,MAAM,oBAAoB,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACnE,MAAM,CAAC,MAAM,6BAA6B,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACpF,MAAM,CAAC,MAAM,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;CACvD;AAUD,QAAA,MAAM,qBAAqB,iCAEzB,CAAC;AAEH,QAAA,MAAM,mBAAmB,oBAEvB,CAAC;AAEH,QAAA,MAAM,8BAA8B,yCAElC,CAAC;AAEH,OAAO,EACH,qBAAqB,IAAI,oBAAoB,EAC7C,8BAA8B,IAAI,6BAA6B,EAC/D,mBAAmB,IAAI,kBAAkB,GAC5C,CAAC"}
package/dist/globals.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/naming-convention */ function get(fetch) {
2
2
  try {
3
3
  return fetch();
4
- } catch (e) {
4
+ } catch (unused) {
5
5
  return undefined;
6
6
  }
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/globals.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { ExposedDependencies, ExposedInstanceDependencies } from './common';\n\ndeclare global {\n export const EXPOSED_DEPENDENCIES: ExposedDependencies | undefined;\n export const EXPOSED_INSTANCE_DEPENDENCIES: ExposedInstanceDependencies | undefined;\n export const WEB_COMPONENT_NAME: string | undefined;\n}\n\nfunction get<T>(fetch: () => T) {\n try {\n return fetch();\n } catch {\n return undefined;\n }\n}\n\nconst _EXPOSED_DEPENDENCIES = get(() => {\n return EXPOSED_DEPENDENCIES;\n});\n\nconst _WEB_COMPONENT_NAME = get(() => {\n return WEB_COMPONENT_NAME;\n});\n\nconst _EXPOSED_INSTANCE_DEPENDENCIES = get(() => {\n return EXPOSED_INSTANCE_DEPENDENCIES;\n});\n\nexport {\n _EXPOSED_DEPENDENCIES as EXPOSED_DEPENDENCIES,\n _EXPOSED_INSTANCE_DEPENDENCIES as EXPOSED_INSTANCE_DEPENDENCIES,\n _WEB_COMPONENT_NAME as WEB_COMPONENT_NAME,\n};\n"],"names":["get","fetch","undefined","_EXPOSED_DEPENDENCIES","EXPOSED_DEPENDENCIES","_WEB_COMPONENT_NAME","WEB_COMPONENT_NAME","_EXPOSED_INSTANCE_DEPENDENCIES","EXPOSED_INSTANCE_DEPENDENCIES"],"mappings":"AAAA,uDAAuD,GASvD,SAASA,IAAOC,KAAc;IAC1B,IAAI;QACA,OAAOA;IACX,EAAE,UAAM;QACJ,OAAOC;IACX;AACJ;AAEA,MAAMC,wBAAwBH,IAAI;IAC9B,OAAOI;AACX;AAEA,MAAMC,sBAAsBL,IAAI;IAC5B,OAAOM;AACX;AAEA,MAAMC,iCAAiCP,IAAI;IACvC,OAAOQ;AACX;AAEA,SACIL,yBAAyBC,oBAAoB,EAC7CG,kCAAkCC,6BAA6B,EAC/DH,uBAAuBC,kBAAkB,GAC3C"}
1
+ {"version":3,"sources":["../src/globals.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { ExposedDependencies } from '@servicetitan/startup-utils';\nimport { ExposedInstanceDependencies } from './common';\n\ndeclare global {\n export const EXPOSED_DEPENDENCIES: ExposedDependencies | undefined;\n export const EXPOSED_INSTANCE_DEPENDENCIES: ExposedInstanceDependencies | undefined;\n export const WEB_COMPONENT_NAME: string | undefined;\n}\n\nfunction get<T>(fetch: () => T) {\n try {\n return fetch();\n } catch {\n return undefined;\n }\n}\n\nconst _EXPOSED_DEPENDENCIES = get(() => {\n return EXPOSED_DEPENDENCIES;\n});\n\nconst _WEB_COMPONENT_NAME = get(() => {\n return WEB_COMPONENT_NAME;\n});\n\nconst _EXPOSED_INSTANCE_DEPENDENCIES = get(() => {\n return EXPOSED_INSTANCE_DEPENDENCIES;\n});\n\nexport {\n _EXPOSED_DEPENDENCIES as EXPOSED_DEPENDENCIES,\n _EXPOSED_INSTANCE_DEPENDENCIES as EXPOSED_INSTANCE_DEPENDENCIES,\n _WEB_COMPONENT_NAME as WEB_COMPONENT_NAME,\n};\n"],"names":["get","fetch","undefined","_EXPOSED_DEPENDENCIES","EXPOSED_DEPENDENCIES","_WEB_COMPONENT_NAME","WEB_COMPONENT_NAME","_EXPOSED_INSTANCE_DEPENDENCIES","EXPOSED_INSTANCE_DEPENDENCIES"],"mappings":"AAAA,uDAAuD,GAUvD,SAASA,IAAOC,KAAc;IAC1B,IAAI;QACA,OAAOA;IACX,EAAE,eAAM;QACJ,OAAOC;IACX;AACJ;AAEA,MAAMC,wBAAwBH,IAAI;IAC9B,OAAOI;AACX;AAEA,MAAMC,sBAAsBL,IAAI;IAC5B,OAAOM;AACX;AAEA,MAAMC,iCAAiCP,IAAI;IACvC,OAAOQ;AACX;AAEA,SACIL,yBAAyBC,oBAAoB,EAC7CG,kCAAkCC,6BAA6B,EAC/DH,uBAAuBC,kBAAkB,GAC3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"headless-loader.d.ts","sourceRoot":"","sources":["../src/headless-loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAU,MAAM,UAAU,CAAC;AAE3D,KAAK,mBAAmB,CAAC,CAAC,IAAI,IAAI,CAC9B,uBAAuB,CAAC,CAAC,CAAC,EAC1B,KAAK,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,CACxF,CAAC;AAMF,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,2CASxE"}
1
+ {"version":3,"file":"headless-loader.d.ts","sourceRoot":"","sources":["../src/headless-loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAE3D,KAAK,mBAAmB,CAAC,CAAC,IAAI,IAAI,CAC9B,uBAAuB,CAAC,CAAC,CAAC,EAC1B,KAAK,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,CACxF,CAAC;AAMF,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,2CASxE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/headless-loader.tsx"],"sourcesContent":["import { UnrestrictedLoaderProps, Loader } from './loader';\n\ntype HeadlessLoaderProps<T> = Pick<\n UnrestrictedLoaderProps<T>,\n 'src' | 'fallbackSrc' | 'data' | 'className' | 'retries' | 'cache' | 'onRequestError'\n>;\n\nconst UnrestrictedPropsLoader = <T,>(props: UnrestrictedLoaderProps<T>) => {\n return <Loader {...props} />;\n};\n\nexport function HeadlessLoader<T>(props: Readonly<HeadlessLoaderProps<T>>) {\n return (\n <UnrestrictedPropsLoader<T>\n {...props}\n isHeadless\n loadingFallback={null}\n errorFallback={null}\n />\n );\n}\n"],"names":["Loader","UnrestrictedPropsLoader","props","HeadlessLoader","isHeadless","loadingFallback","errorFallback"],"mappings":";AAAA,SAAkCA,MAAM,QAAQ,WAAW;AAO3D,MAAMC,0BAA0B,CAAKC;IACjC,qBAAO,KAACF;QAAQ,GAAGE,KAAK;;AAC5B;AAEA,OAAO,SAASC,eAAkBD,KAAuC;IACrE,qBACI,KAACD;QACI,GAAGC,KAAK;QACTE,UAAU;QACVC,iBAAiB;QACjBC,eAAe;;AAG3B"}
1
+ {"version":3,"sources":["../src/headless-loader.tsx"],"sourcesContent":["import { Loader, UnrestrictedLoaderProps } from './loader';\n\ntype HeadlessLoaderProps<T> = Pick<\n UnrestrictedLoaderProps<T>,\n 'src' | 'fallbackSrc' | 'data' | 'className' | 'retries' | 'cache' | 'onRequestError'\n>;\n\nconst UnrestrictedPropsLoader = <T,>(props: UnrestrictedLoaderProps<T>) => {\n return <Loader {...props} />;\n};\n\nexport function HeadlessLoader<T>(props: Readonly<HeadlessLoaderProps<T>>) {\n return (\n <UnrestrictedPropsLoader<T>\n {...props}\n isHeadless\n loadingFallback={null}\n errorFallback={null}\n />\n );\n}\n"],"names":["Loader","UnrestrictedPropsLoader","props","HeadlessLoader","isHeadless","loadingFallback","errorFallback"],"mappings":";AAAA,SAASA,MAAM,QAAiC,WAAW;AAO3D,MAAMC,0BAA0B,CAAKC;IACjC,qBAAO,KAACF;QAAQ,GAAGE,KAAK;;AAC5B;AAEA,OAAO,SAASC,eAAkBD,KAAuC;IACrE,qBACI,KAACD;QACI,GAAGC,KAAK;QACTE,UAAU;QACVC,iBAAiB;QACjBC,eAAe;;AAG3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../src/history-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIhE,qBACa,cAAc;IAEvB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IAEpD,OAAO,4CAA0C;IAEjD,QAAQ,GAAI,SAAS,OAAO,UAuD1B;IAEF,UAAU,GAAI,WAAW,OAAO,UAK9B;CACL"}
1
+ {"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../src/history-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEhE,qBACa,cAAc;IAEvB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IAEpD,OAAO,4CAA0C;IAEjD,QAAQ,GAAI,SAAS,OAAO,UAuD1B;IAEF,UAAU,GAAI,WAAW,OAAO,UAK9B;CACL"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/history-manager.ts"],"sourcesContent":["import { History, Location, UnregisterCallback } from 'history';\n\nimport { injectable } from '@servicetitan/react-ioc';\n\n@injectable()\nexport class HistoryManager {\n // Initiator of action, used for filtering redirections\n occupied?: { history: History; location: Location };\n\n storage = new Map<History, UnregisterCallback>();\n\n register = (addable: History) => {\n this.storage.set(\n addable,\n addable.listen(location => {\n const path = addable.createHref(location);\n const state = location.state;\n\n if (!this.occupied) {\n this.occupied = { history: addable, location };\n } else if (this.occupied.history === addable) {\n this.occupied.location = location;\n }\n\n for (const history of this.storage.keys()) {\n if (history === addable) {\n continue;\n }\n\n if (\n history.createHref(history.location) === path &&\n history.location.state === state\n ) {\n continue;\n }\n\n // Allow redirects only to the deeper pages\n const unblock = history.block(location => {\n if (\n this.occupied &&\n !history\n .createHref(location)\n .startsWith(\n this.occupied.history.createHref(this.occupied.location)\n )\n ) {\n return false;\n }\n });\n\n history.replace(path, state);\n\n unblock();\n }\n\n // Wait for all updates, including redirections\n setTimeout(() => {\n if (\n this.occupied?.history === addable &&\n this.occupied?.location === location\n ) {\n this.occupied = undefined;\n }\n });\n })\n );\n };\n\n unregister = (removable: History) => {\n if (this.storage.has(removable)) {\n this.storage.get(removable)!();\n this.storage.delete(removable);\n }\n };\n}\n"],"names":["injectable","HistoryManager","occupied","storage","Map","register","addable","set","listen","location","path","createHref","state","history","keys","unblock","block","startsWith","replace","setTimeout","undefined","unregister","removable","has","get","delete"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,SAASA,UAAU,QAAQ,0BAA0B;AAGrD,OAAO,MAAMC;;QACT,uDAAuD;QACvDC,uBAAAA,YAAAA,KAAAA;QAEAC,uBAAAA,WAAU,IAAIC;QAEdC,uBAAAA,YAAW,CAACC;YACR,IAAI,CAACH,OAAO,CAACI,GAAG,CACZD,SACAA,QAAQE,MAAM,CAACC,CAAAA;gBACX,MAAMC,OAAOJ,QAAQK,UAAU,CAACF;gBAChC,MAAMG,QAAQH,SAASG,KAAK;gBAE5B,IAAI,CAAC,IAAI,CAACV,QAAQ,EAAE;oBAChB,IAAI,CAACA,QAAQ,GAAG;wBAAEW,SAASP;wBAASG;oBAAS;gBACjD,OAAO,IAAI,IAAI,CAACP,QAAQ,CAACW,OAAO,KAAKP,SAAS;oBAC1C,IAAI,CAACJ,QAAQ,CAACO,QAAQ,GAAGA;gBAC7B;gBAEA,KAAK,MAAMI,WAAW,IAAI,CAACV,OAAO,CAACW,IAAI,GAAI;oBACvC,IAAID,YAAYP,SAAS;wBACrB;oBACJ;oBAEA,IACIO,QAAQF,UAAU,CAACE,QAAQJ,QAAQ,MAAMC,QACzCG,QAAQJ,QAAQ,CAACG,KAAK,KAAKA,OAC7B;wBACE;oBACJ;oBAEA,2CAA2C;oBAC3C,MAAMG,UAAUF,QAAQG,KAAK,CAACP,CAAAA;wBAC1B,IACI,IAAI,CAACP,QAAQ,IACb,CAACW,QACIF,UAAU,CAACF,UACXQ,UAAU,CACP,IAAI,CAACf,QAAQ,CAACW,OAAO,CAACF,UAAU,CAAC,IAAI,CAACT,QAAQ,CAACO,QAAQ,IAEjE;4BACE,OAAO;wBACX;oBACJ;oBAEAI,QAAQK,OAAO,CAACR,MAAME;oBAEtBG;gBACJ;gBAEA,+CAA+C;gBAC/CI,WAAW;wBAEH,gBACA;oBAFJ,IACI,EAAA,iBAAA,IAAI,CAACjB,QAAQ,cAAb,qCAAA,eAAeW,OAAO,MAAKP,WAC3B,EAAA,kBAAA,IAAI,CAACJ,QAAQ,cAAb,sCAAA,gBAAeO,QAAQ,MAAKA,UAC9B;wBACE,IAAI,CAACP,QAAQ,GAAGkB;oBACpB;gBACJ;YACJ;QAER;QAEAC,uBAAAA,cAAa,CAACC;YACV,IAAI,IAAI,CAACnB,OAAO,CAACoB,GAAG,CAACD,YAAY;gBAC7B,IAAI,CAACnB,OAAO,CAACqB,GAAG,CAACF;gBACjB,IAAI,CAACnB,OAAO,CAACsB,MAAM,CAACH;YACxB;QACJ;;AACJ"}
1
+ {"version":3,"sources":["../src/history-manager.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\nimport { History, Location, UnregisterCallback } from 'history';\n\n@injectable()\nexport class HistoryManager {\n // Initiator of action, used for filtering redirections\n occupied?: { history: History; location: Location };\n\n storage = new Map<History, UnregisterCallback>();\n\n register = (addable: History) => {\n this.storage.set(\n addable,\n addable.listen(location => {\n const path = addable.createHref(location);\n const state = location.state;\n\n if (!this.occupied) {\n this.occupied = { history: addable, location };\n } else if (this.occupied.history === addable) {\n this.occupied.location = location;\n }\n\n for (const history of this.storage.keys()) {\n if (history === addable) {\n continue;\n }\n\n if (\n history.createHref(history.location) === path &&\n history.location.state === state\n ) {\n continue;\n }\n\n // Allow redirects only to the deeper pages\n const unblock = history.block(location => {\n if (\n this.occupied &&\n !history\n .createHref(location)\n .startsWith(\n this.occupied.history.createHref(this.occupied.location)\n )\n ) {\n return false;\n }\n });\n\n history.replace(path, state);\n\n unblock();\n }\n\n // Wait for all updates, including redirections\n setTimeout(() => {\n if (\n this.occupied?.history === addable &&\n this.occupied?.location === location\n ) {\n this.occupied = undefined;\n }\n });\n })\n );\n };\n\n unregister = (removable: History) => {\n if (this.storage.has(removable)) {\n this.storage.get(removable)!();\n this.storage.delete(removable);\n }\n };\n}\n"],"names":["injectable","HistoryManager","occupied","storage","Map","register","addable","set","listen","location","path","createHref","state","history","keys","unblock","block","startsWith","replace","setTimeout","undefined","unregister","removable","has","get","delete"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,QAAQ,0BAA0B;AAIrD,OAAO,MAAMC;;QACT,uDAAuD;QACvDC,uBAAAA,YAAAA,KAAAA;QAEAC,uBAAAA,WAAU,IAAIC;QAEdC,uBAAAA,YAAW,CAACC;YACR,IAAI,CAACH,OAAO,CAACI,GAAG,CACZD,SACAA,QAAQE,MAAM,CAACC,CAAAA;gBACX,MAAMC,OAAOJ,QAAQK,UAAU,CAACF;gBAChC,MAAMG,QAAQH,SAASG,KAAK;gBAE5B,IAAI,CAAC,IAAI,CAACV,QAAQ,EAAE;oBAChB,IAAI,CAACA,QAAQ,GAAG;wBAAEW,SAASP;wBAASG;oBAAS;gBACjD,OAAO,IAAI,IAAI,CAACP,QAAQ,CAACW,OAAO,KAAKP,SAAS;oBAC1C,IAAI,CAACJ,QAAQ,CAACO,QAAQ,GAAGA;gBAC7B;gBAEA,KAAK,MAAMI,WAAW,IAAI,CAACV,OAAO,CAACW,IAAI,GAAI;oBACvC,IAAID,YAAYP,SAAS;wBACrB;oBACJ;oBAEA,IACIO,QAAQF,UAAU,CAACE,QAAQJ,QAAQ,MAAMC,QACzCG,QAAQJ,QAAQ,CAACG,KAAK,KAAKA,OAC7B;wBACE;oBACJ;oBAEA,2CAA2C;oBAC3C,MAAMG,UAAUF,QAAQG,KAAK,CAACP,CAAAA;wBAC1B,IACI,IAAI,CAACP,QAAQ,IACb,CAACW,QACIF,UAAU,CAACF,UACXQ,UAAU,CACP,IAAI,CAACf,QAAQ,CAACW,OAAO,CAACF,UAAU,CAAC,IAAI,CAACT,QAAQ,CAACO,QAAQ,IAEjE;4BACE,OAAO;wBACX;oBACJ;oBAEAI,QAAQK,OAAO,CAACR,MAAME;oBAEtBG;gBACJ;gBAEA,+CAA+C;gBAC/CI,WAAW;wBAEH,gBACA;oBAFJ,IACI,EAAA,iBAAA,IAAI,CAACjB,QAAQ,cAAb,qCAAA,eAAeW,OAAO,MAAKP,WAC3B,EAAA,kBAAA,IAAI,CAACJ,QAAQ,cAAb,sCAAA,gBAAeO,QAAQ,MAAKA,UAC9B;wBACE,IAAI,CAACP,QAAQ,GAAGkB;oBACpB;gBACJ;YACJ;QAER;QAEAC,uBAAAA,cAAa,CAACC;YACV,IAAI,IAAI,CAACnB,OAAO,CAACoB,GAAG,CAACD,YAAY;gBAC7B,IAAI,CAACnB,OAAO,CAACqB,GAAG,CAACF;gBACjB,IAAI,CAACnB,OAAO,CAACsB,MAAM,CAACH;YACxB;QACJ;;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,SAAS,EACT,GAAG,EAQN,MAAM,OAAO,CAAC;AAMf,OAAO,EAKH,YAAY,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AAWxD,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uHAAuH;IACvH,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,cAAc,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,IAAI,CAC7B,uBAAuB,CAAC,CAAC,CAAC,EACxB,KAAK,GACL,aAAa,GACb,MAAM,GACN,UAAU,GACV,iBAAiB,GACjB,wBAAwB,GACxB,eAAe,GACf,WAAW,GACX,SAAS,GACT,OAAO,GACP,gBAAgB,CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG;IAChF,eAAe,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CACtC,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,CAAC,EAAG,OAAO,uBAAuB,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,SAAS,CAAC,4CAyErF,CAAC;AAEF,eAAO,MAAM,MAAM,EAAqC,CAAC,CAAC,GAAG,EAAE,EAC3D,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;CAAE,KACxD,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEH,SAAS,EACT,GAAG,EAQN,MAAM,OAAO,CAAC;AACf,OAAO,EAIH,YAAY,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAmB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAWxD,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uHAAuH;IACvH,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,cAAc,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,IAAI,CAC7B,uBAAuB,CAAC,CAAC,CAAC,EACxB,KAAK,GACL,aAAa,GACb,MAAM,GACN,UAAU,GACV,iBAAiB,GACjB,wBAAwB,GACxB,eAAe,GACf,WAAW,GACX,SAAS,GACT,OAAO,GACP,gBAAgB,CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG;IAChF,eAAe,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CACtC,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,CAAC,EAAG,OAAO,uBAAuB,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,SAAS,CAAC,4CAyErF,CAAC;AAEF,eAAO,MAAM,MAAM,EAAqC,CAAC,CAAC,GAAG,EAAE,EAC3D,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;CAAE,KACxD,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
package/dist/loader.js CHANGED
@@ -1,20 +1,20 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Suspense, forwardRef, lazy, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
3
2
  import { ErrorBoundary } from '@servicetitan/error-boundary';
4
3
  import { Log } from '@servicetitan/log-service';
5
4
  import { useOptionalDependencies } from '@servicetitan/react-ioc';
5
+ import { Suspense, forwardRef, lazy, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
6
6
  import { EXPOSED_DEPENDENCIES_TOKEN, EXPOSED_INSTANCE_DEPENDENCIES_TOKEN, useCancelation } from './common';
7
7
  import { Delayed } from './delayed';
8
- import { EventBus, EVENT_BUS_TOKEN } from './event-bus';
8
+ import { EVENT_BUS_TOKEN, EventBus } from './event-bus';
9
9
  import { EXPOSED_DEPENDENCIES, EXPOSED_INSTANCE_DEPENDENCIES } from './globals';
10
- import { getBundleInfo, getLDServiceToken, validateBundleInfo, loadScripts, webComponent } from './utils';
10
+ import { getBundleInfo, getLDServiceToken, loadScripts, validateBundleInfo, webComponent } from './utils';
11
11
  const UnrestrictedLoader = (props, ref)=>{
12
+ var _getLDServiceToken, _props_data;
12
13
  const { cache = -1, basename, fallbackSrc, isHeadless, onRequestError, retries, src } = props;
13
14
  const { loadingFallback, loadingFallbackDelayed = true } = props;
14
15
  const bus = useEventBus();
15
16
  const [logService, exposedDependencies = EXPOSED_DEPENDENCIES, eventBus = bus] = useOptionalDependencies(Log, EXPOSED_DEPENDENCIES_TOKEN, EVENT_BUS_TOKEN);
16
17
  let [exposedInstanceDependencies = EXPOSED_INSTANCE_DEPENDENCIES] = useOptionalDependencies(EXPOSED_INSTANCE_DEPENDENCIES_TOKEN);
17
- var _getLDServiceToken;
18
18
  const [ldService] = useOptionalDependencies((_getLDServiceToken = getLDServiceToken()) !== null && _getLDServiceToken !== void 0 ? _getLDServiceToken : Symbol());
19
19
  const cancelation = useCancelation();
20
20
  const LoadingFallback = useMemo(()=>{
@@ -68,7 +68,6 @@ const UnrestrictedLoader = (props, ref)=>{
68
68
  useImperativeHandle(ref, ()=>eventBus, [
69
69
  eventBus
70
70
  ]);
71
- var _props_data;
72
71
  return /*#__PURE__*/ _jsx(ErrorBoundary, {
73
72
  moduleName: src,
74
73
  fallback: ErrorFallback,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/loader.tsx"],"sourcesContent":["import {\n ReactElement,\n ReactNode,\n Ref,\n Suspense,\n forwardRef,\n lazy,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport { ErrorBoundary } from '@servicetitan/error-boundary';\nimport { type LDService } from '@servicetitan/launchdarkly-service';\nimport { Log } from '@servicetitan/log-service';\nimport { useOptionalDependencies } from '@servicetitan/react-ioc';\n\nimport {\n EXPOSED_DEPENDENCIES_TOKEN,\n EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,\n ExposedDependencies,\n ExposedInstanceDependencies,\n GetJsonError,\n useCancelation,\n} from './common';\nimport { MFEContextData } from './contexts/mfe-data-context';\nimport { Delayed } from './delayed';\nimport { EventBus, EVENT_BUS_TOKEN } from './event-bus';\nimport { EXPOSED_DEPENDENCIES, EXPOSED_INSTANCE_DEPENDENCIES } from './globals';\nimport {\n BundleInfo,\n getBundleInfo,\n getLDServiceToken,\n validateBundleInfo,\n loadScripts,\n webComponent,\n} from './utils';\n\nexport type LoaderRef = EventBus;\n\nexport type FallbackNode = NonNullable<ReactNode> | null;\n\nexport interface UnrestrictedLoaderProps<T = {}> {\n src: string;\n fallbackSrc?: string;\n /** Values in the object will be stringified and then parsed before being delivered to the MFE via props or context. */\n data?: MFEContextData<T>;\n basename?: string;\n loadingFallback?: FallbackNode;\n loadingFallbackDelayed?: boolean;\n errorFallback?: FallbackNode;\n className?: string;\n retries?: number;\n isHeadless?: boolean;\n cache?: boolean | number;\n onRequestError?(error: GetJsonError): boolean;\n}\n\nexport type LoaderProps<T> = Pick<\n UnrestrictedLoaderProps<T>,\n | 'src'\n | 'fallbackSrc'\n | 'data'\n | 'basename'\n | 'loadingFallback'\n | 'loadingFallbackDelayed'\n | 'errorFallback'\n | 'className'\n | 'retries'\n | 'cache'\n | 'onRequestError'\n>;\n\nexport type LoaderDataProps = Pick<UnrestrictedLoaderProps, 'data' | 'className'> & {\n LoadingFallback: () => JSX.Element;\n};\n\nconst UnrestrictedLoader = <T,>(props: UnrestrictedLoaderProps<T>, ref: Ref<LoaderRef>) => {\n const { cache = -1, basename, fallbackSrc, isHeadless, onRequestError, retries, src } = props;\n const { loadingFallback, loadingFallbackDelayed = true } = props;\n\n const bus = useEventBus();\n const [logService, exposedDependencies = EXPOSED_DEPENDENCIES, eventBus = bus] =\n useOptionalDependencies(Log, EXPOSED_DEPENDENCIES_TOKEN, EVENT_BUS_TOKEN);\n let [exposedInstanceDependencies = EXPOSED_INSTANCE_DEPENDENCIES] = useOptionalDependencies(\n EXPOSED_INSTANCE_DEPENDENCIES_TOKEN\n );\n const [ldService] = useOptionalDependencies(getLDServiceToken() ?? Symbol());\n const cancelation = useCancelation();\n\n const LoadingFallback = useMemo(() => {\n const message = `Loading${isLocalHost(src) ? ` ${src}` : ''}...`;\n return getFallback(loadingFallback, message, { delayed: loadingFallbackDelayed });\n }, [loadingFallback, loadingFallbackDelayed, src]);\n\n const ErrorFallback = useMemo(() => {\n const message = `Something went wrong${isLocalHost(src) ? ` loading ${src}` : ''}`;\n return getFallback(props.errorFallback, message);\n }, [props.errorFallback, src]);\n\n exposedInstanceDependencies = useMemo(\n () => ensureLDService(exposedInstanceDependencies, ldService),\n [exposedInstanceDependencies, ldService]\n );\n\n const Loader = useMemo(\n () =>\n lazyLoader({\n basename,\n cache,\n cancelation,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n fallbackSrc,\n isHeadless,\n logService,\n onRequestError,\n retries,\n src,\n }),\n [\n basename,\n cache,\n cancelation,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n fallbackSrc,\n isHeadless,\n logService,\n onRequestError,\n retries,\n src,\n ]\n );\n\n useImperativeHandle(ref, () => eventBus, [eventBus]);\n\n return (\n <ErrorBoundary moduleName={src} fallback={ErrorFallback}>\n <Suspense fallback={<LoadingFallback />}>\n <Loader\n data={props.data ?? {}}\n className={props.className}\n LoadingFallback={LoadingFallback}\n />\n </Suspense>\n </ErrorBoundary>\n );\n};\n\nexport const Loader = forwardRef(UnrestrictedLoader) as <T = {}>(\n props: LoaderProps<NoInfer<T>> & { ref?: Ref<LoaderRef> }\n) => ReturnType<typeof UnrestrictedLoader>;\n\ntype LazyLoaderProps = UnrestrictedLoaderProps<any> & {\n cancelation: AbortController;\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n eventBus: EventBus;\n logService?: Log;\n cache: Required<UnrestrictedLoaderProps<any>>['cache'];\n};\n\nfunction lazyLoader(props: LazyLoaderProps) {\n const { cancelation } = props;\n\n const LazyWebComponent = lazyWebComponent(props);\n\n return (props: LoaderDataProps) => {\n useEffect(() => {\n return () => {\n cancelation.abort();\n };\n }, []);\n\n return (\n <LazyWebComponent\n data={props.data}\n className={props.className}\n LoadingFallback={props.LoadingFallback}\n />\n );\n };\n}\n\nfunction lazyWebComponent(props: LazyLoaderProps) {\n const {\n basename,\n cache,\n cancelation,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n fallbackSrc,\n isHeadless,\n logService,\n onRequestError,\n retries,\n src,\n } = props;\n\n return lazy<(_: LoaderDataProps) => JSX.Element | null>(async () => {\n let bundleInfo: BundleInfo;\n try {\n bundleInfo = await getBundleInfo({\n cache,\n mainPackageUrl: src,\n fallbackPackageUrl: fallbackSrc,\n isHeadless,\n exposedDependencies,\n exposedInstanceDependencies,\n signal: cancelation.signal,\n retries,\n onRequestError,\n });\n } catch (e) {\n if (cancelation.signal.aborted) {\n return {\n default: () => null,\n };\n }\n\n throw e;\n }\n\n validateBundleInfo(bundleInfo, {\n exposedDependencies,\n exposedInstanceDependencies,\n logService,\n packageUrl: src,\n });\n\n await loadScripts(bundleInfo);\n\n const ldService = bundleInfo.mfeHasCompatibleLaunchDarklyVersion\n ? exposedInstanceDependencies?.launchDarkly?.ldService\n : undefined;\n\n return {\n default: webComponent({\n basename,\n bundleInfo,\n eventBus,\n exposedDependencies,\n exposedInstanceDependencies,\n ldService,\n logService,\n }),\n };\n });\n}\n\nfunction getFallback(\n node: FallbackNode | undefined,\n message: string,\n { delayed = false }: { delayed?: boolean } = {}\n) {\n const fallbackNode = node !== undefined ? (node as ReactElement) : <h2>{message}</h2>;\n return delayed ? () => <Delayed>{fallbackNode}</Delayed> : () => fallbackNode;\n}\n\nfunction isLocalHost(source: string) {\n return ['localhost', '127.0.0.1'].some(host => source.indexOf(host) >= 0);\n}\n\nfunction ensureLDService(\n exposedInstanceDependencies?: ExposedInstanceDependencies,\n ldService?: LDService\n) {\n const launchDarkly = exposedInstanceDependencies?.launchDarkly;\n if (launchDarkly?.version && !launchDarkly.ldService && ldService) {\n return { ...exposedInstanceDependencies, launchDarkly: { ...launchDarkly, ldService } };\n }\n return exposedInstanceDependencies;\n}\n\nfunction useEventBus() {\n return useRef(new EventBus()).current;\n}\n"],"names":["Suspense","forwardRef","lazy","useEffect","useImperativeHandle","useMemo","useRef","ErrorBoundary","Log","useOptionalDependencies","EXPOSED_DEPENDENCIES_TOKEN","EXPOSED_INSTANCE_DEPENDENCIES_TOKEN","useCancelation","Delayed","EventBus","EVENT_BUS_TOKEN","EXPOSED_DEPENDENCIES","EXPOSED_INSTANCE_DEPENDENCIES","getBundleInfo","getLDServiceToken","validateBundleInfo","loadScripts","webComponent","UnrestrictedLoader","props","ref","cache","basename","fallbackSrc","isHeadless","onRequestError","retries","src","loadingFallback","loadingFallbackDelayed","bus","useEventBus","logService","exposedDependencies","eventBus","exposedInstanceDependencies","ldService","Symbol","cancelation","LoadingFallback","message","isLocalHost","getFallback","delayed","ErrorFallback","errorFallback","ensureLDService","Loader","lazyLoader","moduleName","fallback","data","className","LazyWebComponent","lazyWebComponent","abort","bundleInfo","mainPackageUrl","fallbackPackageUrl","signal","e","aborted","default","packageUrl","mfeHasCompatibleLaunchDarklyVersion","launchDarkly","undefined","node","fallbackNode","h2","source","some","host","indexOf","version","current"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/loader.tsx"],"sourcesContent":["import { ErrorBoundary } from '@servicetitan/error-boundary';\nimport { type LDService } from '@servicetitan/launchdarkly-service';\nimport { Log } from '@servicetitan/log-service';\nimport { useOptionalDependencies } from '@servicetitan/react-ioc';\nimport { ExposedDependencies } from '@servicetitan/startup-utils';\nimport {\n ReactElement,\n ReactNode,\n Ref,\n Suspense,\n forwardRef,\n lazy,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport {\n EXPOSED_DEPENDENCIES_TOKEN,\n EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,\n ExposedInstanceDependencies,\n GetJsonError,\n useCancelation,\n} from './common';\nimport { MFEContextData } from './contexts/mfe-data-context';\nimport { Delayed } from './delayed';\nimport { EVENT_BUS_TOKEN, EventBus } from './event-bus';\nimport { EXPOSED_DEPENDENCIES, EXPOSED_INSTANCE_DEPENDENCIES } from './globals';\nimport {\n BundleInfo,\n getBundleInfo,\n getLDServiceToken,\n loadScripts,\n validateBundleInfo,\n webComponent,\n} from './utils';\n\nexport type LoaderRef = EventBus;\n\nexport type FallbackNode = NonNullable<ReactNode> | null;\n\nexport interface UnrestrictedLoaderProps<T = {}> {\n src: string;\n fallbackSrc?: string;\n /** Values in the object will be stringified and then parsed before being delivered to the MFE via props or context. */\n data?: MFEContextData<T>;\n basename?: string;\n loadingFallback?: FallbackNode;\n loadingFallbackDelayed?: boolean;\n errorFallback?: FallbackNode;\n className?: string;\n retries?: number;\n isHeadless?: boolean;\n cache?: boolean | number;\n onRequestError?(error: GetJsonError): boolean;\n}\n\nexport type LoaderProps<T> = Pick<\n UnrestrictedLoaderProps<T>,\n | 'src'\n | 'fallbackSrc'\n | 'data'\n | 'basename'\n | 'loadingFallback'\n | 'loadingFallbackDelayed'\n | 'errorFallback'\n | 'className'\n | 'retries'\n | 'cache'\n | 'onRequestError'\n>;\n\nexport type LoaderDataProps = Pick<UnrestrictedLoaderProps, 'data' | 'className'> & {\n LoadingFallback: () => JSX.Element;\n};\n\nconst UnrestrictedLoader = <T,>(props: UnrestrictedLoaderProps<T>, ref: Ref<LoaderRef>) => {\n const { cache = -1, basename, fallbackSrc, isHeadless, onRequestError, retries, src } = props;\n const { loadingFallback, loadingFallbackDelayed = true } = props;\n\n const bus = useEventBus();\n const [logService, exposedDependencies = EXPOSED_DEPENDENCIES, eventBus = bus] =\n useOptionalDependencies(Log, EXPOSED_DEPENDENCIES_TOKEN, EVENT_BUS_TOKEN);\n let [exposedInstanceDependencies = EXPOSED_INSTANCE_DEPENDENCIES] = useOptionalDependencies(\n EXPOSED_INSTANCE_DEPENDENCIES_TOKEN\n );\n const [ldService] = useOptionalDependencies(getLDServiceToken() ?? Symbol());\n const cancelation = useCancelation();\n\n const LoadingFallback = useMemo(() => {\n const message = `Loading${isLocalHost(src) ? ` ${src}` : ''}...`;\n return getFallback(loadingFallback, message, { delayed: loadingFallbackDelayed });\n }, [loadingFallback, loadingFallbackDelayed, src]);\n\n const ErrorFallback = useMemo(() => {\n const message = `Something went wrong${isLocalHost(src) ? ` loading ${src}` : ''}`;\n return getFallback(props.errorFallback, message);\n }, [props.errorFallback, src]);\n\n exposedInstanceDependencies = useMemo(\n () => ensureLDService(exposedInstanceDependencies, ldService),\n [exposedInstanceDependencies, ldService]\n );\n\n const Loader = useMemo(\n () =>\n lazyLoader({\n basename,\n cache,\n cancelation,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n fallbackSrc,\n isHeadless,\n logService,\n onRequestError,\n retries,\n src,\n }),\n [\n basename,\n cache,\n cancelation,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n fallbackSrc,\n isHeadless,\n logService,\n onRequestError,\n retries,\n src,\n ]\n );\n\n useImperativeHandle(ref, () => eventBus, [eventBus]);\n\n return (\n <ErrorBoundary moduleName={src} fallback={ErrorFallback}>\n <Suspense fallback={<LoadingFallback />}>\n <Loader\n data={props.data ?? {}}\n className={props.className}\n LoadingFallback={LoadingFallback}\n />\n </Suspense>\n </ErrorBoundary>\n );\n};\n\nexport const Loader = forwardRef(UnrestrictedLoader) as <T = {}>(\n props: LoaderProps<NoInfer<T>> & { ref?: Ref<LoaderRef> }\n) => ReturnType<typeof UnrestrictedLoader>;\n\ntype LazyLoaderProps = UnrestrictedLoaderProps<any> & {\n cancelation: AbortController;\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n eventBus: EventBus;\n logService?: Log;\n cache: Required<UnrestrictedLoaderProps<any>>['cache'];\n};\n\nfunction lazyLoader(props: LazyLoaderProps) {\n const { cancelation } = props;\n\n const LazyWebComponent = lazyWebComponent(props);\n\n return (props: LoaderDataProps) => {\n useEffect(() => {\n return () => {\n cancelation.abort();\n };\n }, []);\n\n return (\n <LazyWebComponent\n data={props.data}\n className={props.className}\n LoadingFallback={props.LoadingFallback}\n />\n );\n };\n}\n\nfunction lazyWebComponent(props: LazyLoaderProps) {\n const {\n basename,\n cache,\n cancelation,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n fallbackSrc,\n isHeadless,\n logService,\n onRequestError,\n retries,\n src,\n } = props;\n\n return lazy<(_: LoaderDataProps) => JSX.Element | null>(async () => {\n let bundleInfo: BundleInfo;\n try {\n bundleInfo = await getBundleInfo({\n cache,\n mainPackageUrl: src,\n fallbackPackageUrl: fallbackSrc,\n isHeadless,\n exposedDependencies,\n exposedInstanceDependencies,\n signal: cancelation.signal,\n retries,\n onRequestError,\n });\n } catch (e) {\n if (cancelation.signal.aborted) {\n return {\n default: () => null,\n };\n }\n\n throw e;\n }\n\n validateBundleInfo(bundleInfo, {\n exposedDependencies,\n exposedInstanceDependencies,\n logService,\n packageUrl: src,\n });\n\n await loadScripts(bundleInfo);\n\n const ldService = bundleInfo.mfeHasCompatibleLaunchDarklyVersion\n ? exposedInstanceDependencies?.launchDarkly?.ldService\n : undefined;\n\n return {\n default: webComponent({\n basename,\n bundleInfo,\n eventBus,\n exposedDependencies,\n exposedInstanceDependencies,\n ldService,\n logService,\n }),\n };\n });\n}\n\nfunction getFallback(\n node: FallbackNode | undefined,\n message: string,\n { delayed = false }: { delayed?: boolean } = {}\n) {\n const fallbackNode = node !== undefined ? (node as ReactElement) : <h2>{message}</h2>;\n return delayed ? () => <Delayed>{fallbackNode}</Delayed> : () => fallbackNode;\n}\n\nfunction isLocalHost(source: string) {\n return ['localhost', '127.0.0.1'].some(host => source.indexOf(host) >= 0);\n}\n\nfunction ensureLDService(\n exposedInstanceDependencies?: ExposedInstanceDependencies,\n ldService?: LDService\n) {\n const launchDarkly = exposedInstanceDependencies?.launchDarkly;\n if (launchDarkly?.version && !launchDarkly.ldService && ldService) {\n return { ...exposedInstanceDependencies, launchDarkly: { ...launchDarkly, ldService } };\n }\n return exposedInstanceDependencies;\n}\n\nfunction useEventBus() {\n return useRef(new EventBus()).current;\n}\n"],"names":["ErrorBoundary","Log","useOptionalDependencies","Suspense","forwardRef","lazy","useEffect","useImperativeHandle","useMemo","useRef","EXPOSED_DEPENDENCIES_TOKEN","EXPOSED_INSTANCE_DEPENDENCIES_TOKEN","useCancelation","Delayed","EVENT_BUS_TOKEN","EventBus","EXPOSED_DEPENDENCIES","EXPOSED_INSTANCE_DEPENDENCIES","getBundleInfo","getLDServiceToken","loadScripts","validateBundleInfo","webComponent","UnrestrictedLoader","props","ref","cache","basename","fallbackSrc","isHeadless","onRequestError","retries","src","loadingFallback","loadingFallbackDelayed","bus","useEventBus","logService","exposedDependencies","eventBus","exposedInstanceDependencies","ldService","Symbol","cancelation","LoadingFallback","message","isLocalHost","getFallback","delayed","ErrorFallback","errorFallback","ensureLDService","Loader","lazyLoader","moduleName","fallback","data","className","LazyWebComponent","lazyWebComponent","abort","bundleInfo","mainPackageUrl","fallbackPackageUrl","signal","e","aborted","default","packageUrl","mfeHasCompatibleLaunchDarklyVersion","launchDarkly","undefined","node","fallbackNode","h2","source","some","host","indexOf","version","current"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-headless.d.ts","sourceRoot":"","sources":["../src/register-headless.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,oBAAoB,CAAC,QAAQ,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAC7E,OAAO,EACP,WAAW,GAAG,YAAY,CAC7B,GAAG;IACA,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,gBAAgB,CAAC,QAAQ,GAAG,GAAG,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,CAClF,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,IAAI,CAAC;AAEV,wBAAgB,gBAAgB,CAC5B,iBAAiB,CAAC,EAAE,gBAAgB,EACpC,oBAAoB,CAAC,EAAE,gBAAgB,QAmE1C"}
1
+ {"version":3,"file":"register-headless.d.ts","sourceRoot":"","sources":["../src/register-headless.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,oBAAoB,CAAC,QAAQ,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAC7E,OAAO,EACP,WAAW,GAAG,YAAY,CAC7B,GAAG;IACA,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,gBAAgB,CAAC,QAAQ,GAAG,GAAG,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,CAClF,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,IAAI,CAAC;AAEV,wBAAgB,gBAAgB,CAC5B,iBAAiB,CAAC,EAAE,gBAAgB,EACpC,oBAAoB,CAAC,EAAE,gBAAgB,QAmE1C"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/register-headless.ts"],"sourcesContent":["import type { LDService } from '@servicetitan/launchdarkly-service';\nimport type { Entries, IWebComponent } from './common';\nimport type { EventBus } from './event-bus';\nimport type { Log } from '@servicetitan/log-service';\nimport { Serializable } from './types';\n\ntype HeadlessCallbackArgs<TMfeData, TEventBus extends EventBus = EventBus> = Pick<\n Entries,\n 'ldService' | 'logService'\n> & {\n eventBus?: TEventBus;\n mfeData?: Serializable<TMfeData>;\n};\nexport type HeadlessCallback<TMfeData = any, TEventBus extends EventBus = EventBus> = (\n params: HeadlessCallbackArgs<TMfeData, TEventBus>\n) => void;\n\nexport function registerHeadless(\n connectedCallback?: HeadlessCallback,\n disconnectedCallback?: HeadlessCallback\n) {\n class Headless extends HTMLElement implements IWebComponent {\n private ldService?: LDService;\n private logService?: Log;\n private eventBus?: EventBus;\n private readonly readyPromise: Promise<void>;\n private resolveReadyPromise!: () => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise(resolve => {\n this.resolveReadyPromise = resolve;\n });\n }\n\n provide = (entries: Entries) => {\n this.ldService = entries.ldService;\n this.logService = entries.logService;\n this.eventBus = entries.eventBus;\n this.resolveReadyPromise();\n };\n\n async connectedCallback() {\n await this.readyPromise;\n connectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n async disconnectedCallback() {\n await this.readyPromise;\n disconnectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n connectedMoveCallback() {\n /*\n * Defining connectedMoveCallback prevents connectedCallback or disconnectedCallback\n * from running when the element is moved in the DOM\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\n }\n\n private get services() {\n return {\n ldService: this.ldService,\n logService: this.logService,\n eventBus: this.eventBus,\n };\n }\n\n private get mfeData() {\n return JSON.parse(this.dataset.mfeData ?? '{}');\n }\n }\n\n if (!WEB_COMPONENT_NAME) {\n // eslint-disable-next-line no-console\n console.error('\"WEB_COMPONENT_NAME\" is not defined!');\n return;\n }\n\n window.customElements.define(`headless-${WEB_COMPONENT_NAME}`, Headless);\n}\n"],"names":["registerHeadless","connectedCallback","disconnectedCallback","Headless","HTMLElement","readyPromise","services","mfeData","connectedMoveCallback","ldService","logService","eventBus","JSON","parse","dataset","resolveReadyPromise","provide","entries","Promise","resolve","WEB_COMPONENT_NAME","console","error","window","customElements","define"],"mappings":";;;;;;;;;;;;;AAiBA,OAAO,SAASA,iBACZC,iBAAoC,EACpCC,oBAAuC;IAEvC,MAAMC,iBAAiBC;QAqBnB,MAAMH,oBAAoB;YACtB,MAAM,IAAI,CAACI,YAAY;YACvBJ,8BAAAA,wCAAAA,kBAAoB;gBAChB,GAAG,IAAI,CAACK,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEA,MAAML,uBAAuB;YACzB,MAAM,IAAI,CAACG,YAAY;YACvBH,iCAAAA,2CAAAA,qBAAuB;gBACnB,GAAG,IAAI,CAACI,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEAC,wBAAwB;QACpB;;;;aAIC,GACL;QAEA,IAAYF,WAAW;YACnB,OAAO;gBACHG,WAAW,IAAI,CAACA,SAAS;gBACzBC,YAAY,IAAI,CAACA,UAAU;gBAC3BC,UAAU,IAAI,CAACA,QAAQ;YAC3B;QACJ;QAEA,IAAYJ,UAAU;gBACA;YAAlB,OAAOK,KAAKC,KAAK,CAAC,CAAA,wBAAA,IAAI,CAACC,OAAO,CAACP,OAAO,cAApB,mCAAA,wBAAwB;QAC9C;QAhDA,aAAc;YACV,KAAK,IAPT,uBAAQE,aAAR,KAAA,IACA,uBAAQC,cAAR,KAAA,IACA,uBAAQC,YAAR,KAAA,IACA,uBAAiBN,gBAAjB,KAAA,IACA,uBAAQU,uBAAR,KAAA,IASAC,uBAAAA,WAAU,CAACC;gBACP,IAAI,CAACR,SAAS,GAAGQ,QAAQR,SAAS;gBAClC,IAAI,CAACC,UAAU,GAAGO,QAAQP,UAAU;gBACpC,IAAI,CAACC,QAAQ,GAAGM,QAAQN,QAAQ;gBAChC,IAAI,CAACI,mBAAmB;YAC5B;YAVI,IAAI,CAACV,YAAY,GAAG,IAAIa,QAAQC,CAAAA;gBAC5B,IAAI,CAACJ,mBAAmB,GAAGI;YAC/B;QACJ;IA4CJ;IAEA,IAAI,CAACC,oBAAoB;QACrB,sCAAsC;QACtCC,QAAQC,KAAK,CAAC;QACd;IACJ;IAEAC,OAAOC,cAAc,CAACC,MAAM,CAAC,CAAC,SAAS,EAAEL,oBAAoB,EAAEjB;AACnE"}
1
+ {"version":3,"sources":["../src/register-headless.ts"],"sourcesContent":["import type { LDService } from '@servicetitan/launchdarkly-service';\nimport type { Log } from '@servicetitan/log-service';\nimport type { Entries, IWebComponent } from './common';\nimport type { EventBus } from './event-bus';\nimport { Serializable } from './types';\n\ntype HeadlessCallbackArgs<TMfeData, TEventBus extends EventBus = EventBus> = Pick<\n Entries,\n 'ldService' | 'logService'\n> & {\n eventBus?: TEventBus;\n mfeData?: Serializable<TMfeData>;\n};\nexport type HeadlessCallback<TMfeData = any, TEventBus extends EventBus = EventBus> = (\n params: HeadlessCallbackArgs<TMfeData, TEventBus>\n) => void;\n\nexport function registerHeadless(\n connectedCallback?: HeadlessCallback,\n disconnectedCallback?: HeadlessCallback\n) {\n class Headless extends HTMLElement implements IWebComponent {\n private ldService?: LDService;\n private logService?: Log;\n private eventBus?: EventBus;\n private readonly readyPromise: Promise<void>;\n private resolveReadyPromise!: () => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise(resolve => {\n this.resolveReadyPromise = resolve;\n });\n }\n\n provide = (entries: Entries) => {\n this.ldService = entries.ldService;\n this.logService = entries.logService;\n this.eventBus = entries.eventBus;\n this.resolveReadyPromise();\n };\n\n async connectedCallback() {\n await this.readyPromise;\n connectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n async disconnectedCallback() {\n await this.readyPromise;\n disconnectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n connectedMoveCallback() {\n /*\n * Defining connectedMoveCallback prevents connectedCallback or disconnectedCallback\n * from running when the element is moved in the DOM\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\n }\n\n private get services() {\n return {\n ldService: this.ldService,\n logService: this.logService,\n eventBus: this.eventBus,\n };\n }\n\n private get mfeData() {\n return JSON.parse(this.dataset.mfeData ?? '{}');\n }\n }\n\n if (!WEB_COMPONENT_NAME) {\n // eslint-disable-next-line no-console\n console.error('\"WEB_COMPONENT_NAME\" is not defined!');\n return;\n }\n\n window.customElements.define(`headless-${WEB_COMPONENT_NAME}`, Headless);\n}\n"],"names":["registerHeadless","connectedCallback","disconnectedCallback","Headless","HTMLElement","readyPromise","services","mfeData","connectedMoveCallback","ldService","logService","eventBus","JSON","parse","dataset","resolveReadyPromise","provide","entries","Promise","resolve","WEB_COMPONENT_NAME","console","error","window","customElements","define"],"mappings":";;;;;;;;;;;;;AAiBA,OAAO,SAASA,iBACZC,iBAAoC,EACpCC,oBAAuC;IAEvC,MAAMC,iBAAiBC;QAqBnB,MAAMH,oBAAoB;YACtB,MAAM,IAAI,CAACI,YAAY;YACvBJ,8BAAAA,wCAAAA,kBAAoB;gBAChB,GAAG,IAAI,CAACK,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEA,MAAML,uBAAuB;YACzB,MAAM,IAAI,CAACG,YAAY;YACvBH,iCAAAA,2CAAAA,qBAAuB;gBACnB,GAAG,IAAI,CAACI,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEAC,wBAAwB;QACpB;;;;aAIC,GACL;QAEA,IAAYF,WAAW;YACnB,OAAO;gBACHG,WAAW,IAAI,CAACA,SAAS;gBACzBC,YAAY,IAAI,CAACA,UAAU;gBAC3BC,UAAU,IAAI,CAACA,QAAQ;YAC3B;QACJ;QAEA,IAAYJ,UAAU;gBACA;YAAlB,OAAOK,KAAKC,KAAK,EAAC,wBAAA,IAAI,CAACC,OAAO,CAACP,OAAO,cAApB,mCAAA,wBAAwB;QAC9C;QAhDA,aAAc;YACV,KAAK,IAPT,uBAAQE,aAAR,KAAA,IACA,uBAAQC,cAAR,KAAA,IACA,uBAAQC,YAAR,KAAA,IACA,uBAAiBN,gBAAjB,KAAA,IACA,uBAAQU,uBAAR,KAAA,IASAC,uBAAAA,WAAU,CAACC;gBACP,IAAI,CAACR,SAAS,GAAGQ,QAAQR,SAAS;gBAClC,IAAI,CAACC,UAAU,GAAGO,QAAQP,UAAU;gBACpC,IAAI,CAACC,QAAQ,GAAGM,QAAQN,QAAQ;gBAChC,IAAI,CAACI,mBAAmB;YAC5B;YAVI,IAAI,CAACV,YAAY,GAAG,IAAIa,QAAQC,CAAAA;gBAC5B,IAAI,CAACJ,mBAAmB,GAAGI;YAC/B;QACJ;IA4CJ;IAEA,IAAI,CAACC,oBAAoB;QACrB,sCAAsC;QACtCC,QAAQC,KAAK,CAAC;QACd;IACJ;IAEAC,OAAOC,cAAc,CAACC,MAAM,CAAC,CAAC,SAAS,EAAEL,oBAAoB,EAAEjB;AACnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAM,aAAa,EAA2B,MAAM,OAAO,CAAC;AAsCnE,MAAM,WAAW,eAAe;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,QAkP3F"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAA+B,MAAM,OAAO,CAAC;AAiCnE,MAAM,WAAW,eAAe;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,QAkP3F"}
package/dist/register.js CHANGED
@@ -12,9 +12,9 @@ function _define_property(obj, key, value) {
12
12
  return obj;
13
13
  }
14
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
- import { useEffect } from 'react';
16
15
  import { Log } from '@servicetitan/log-service';
17
16
  import { Provider } from '@servicetitan/react-ioc';
17
+ import { useEffect } from 'react';
18
18
  import { BASENAME_TOKEN, EXPOSED_DEPENDENCIES_TOKEN, EXPOSED_INSTANCE_DEPENDENCIES_TOKEN, IS_WEB_COMPONENT_TOKEN, RENDER_ROOT_TOKEN } from './common';
19
19
  import { MFEDataContext } from './contexts/mfe-data-context';
20
20
  import { MFEMetadataContext } from './contexts/mfe-metadata-context';
@@ -40,6 +40,7 @@ const Placeholder = ()=>/*#__PURE__*/ _jsx("div", {
40
40
  export function register(Component, light, options) {
41
41
  class WebComponent extends HTMLElement {
42
42
  connectedCallback() {
43
+ var _ref, _this_shadowRoot;
43
44
  var _this_root;
44
45
  /*
45
46
  * connectedCallback can be called when DOM element has moved
@@ -48,15 +49,13 @@ export function register(Component, light, options) {
48
49
  */ if ((_this_root = this.root) === null || _this_root === void 0 ? void 0 : _this_root.isConnected) {
49
50
  return;
50
51
  }
51
- var _options_sharedDependenciesNames;
52
- const sharedDependenciesNames = (_options_sharedDependenciesNames = options === null || options === void 0 ? void 0 : options.sharedDependenciesNames) !== null && _options_sharedDependenciesNames !== void 0 ? _options_sharedDependenciesNames : [];
52
+ const sharedDependenciesNames = (_ref = options === null || options === void 0 ? void 0 : options.sharedDependenciesNames) !== null && _ref !== void 0 ? _ref : [];
53
53
  const styleUrls = getStyleUrls(light, sharedDependenciesNames, this);
54
54
  this.styles = {
55
55
  total: styleUrls.length * 2,
56
56
  loaded: 0,
57
57
  elements: []
58
58
  };
59
- var _this_shadowRoot;
60
59
  this.root = (_this_shadowRoot = this.shadowRoot) !== null && _this_shadowRoot !== void 0 ? _this_shadowRoot : this.attachShadow({
61
60
  mode: 'open'
62
61
  });
@@ -120,7 +119,7 @@ export function register(Component, light, options) {
120
119
  children: children
121
120
  })
122
121
  });
123
- } catch (e) {
122
+ } catch (unused) {
124
123
  return children;
125
124
  }
126
125
  }
@@ -134,7 +133,7 @@ export function register(Component, light, options) {
134
133
  root: this.portalAnvilContainer,
135
134
  children: children
136
135
  });
137
- } catch (e) {
136
+ } catch (unused) {
138
137
  return children;
139
138
  }
140
139
  }