@servicetitan/web-components 31.0.0 → 31.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/contexts/tests/mfe-data-context.test.js +34 -0
  2. package/dist/contexts/tests/mfe-data-context.test.js.map +1 -0
  3. package/dist/contexts/tests/mfe-metadata-context.test.js +41 -0
  4. package/dist/contexts/tests/mfe-metadata-context.test.js.map +1 -0
  5. package/dist/headless-loader.d.ts +5 -0
  6. package/dist/headless-loader.d.ts.map +1 -0
  7. package/dist/headless-loader.js +17 -0
  8. package/dist/headless-loader.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/loader.d.ts +10 -4
  14. package/dist/loader.d.ts.map +1 -1
  15. package/dist/loader.js +32 -40
  16. package/dist/loader.js.map +1 -1
  17. package/dist/register-headless.d.ts +9 -0
  18. package/dist/register-headless.d.ts.map +1 -0
  19. package/dist/register-headless.js +67 -0
  20. package/dist/register-headless.js.map +1 -0
  21. package/dist/types.d.ts +11 -0
  22. package/dist/types.d.ts.map +1 -1
  23. package/dist/types.js.map +1 -1
  24. package/dist/utils/get-bundle-info.d.ts +4 -12
  25. package/dist/utils/get-bundle-info.d.ts.map +1 -1
  26. package/dist/utils/get-bundle-info.js +29 -42
  27. package/dist/utils/get-bundle-info.js.map +1 -1
  28. package/dist/utils/get-cache-setting.d.ts +2 -0
  29. package/dist/utils/get-cache-setting.d.ts.map +1 -0
  30. package/dist/utils/get-cache-setting.js +6 -0
  31. package/dist/utils/get-cache-setting.js.map +1 -0
  32. package/dist/utils/get-cached-metadata.d.ts +18 -0
  33. package/dist/utils/get-cached-metadata.d.ts.map +1 -0
  34. package/dist/utils/get-cached-metadata.js +47 -0
  35. package/dist/utils/get-cached-metadata.js.map +1 -0
  36. package/dist/utils/get-mfe-has-compatible-launchdarkly-version.d.ts +1 -1
  37. package/dist/utils/get-mfe-has-compatible-launchdarkly-version.d.ts.map +1 -1
  38. package/dist/utils/get-mfe-has-compatible-launchdarkly-version.js.map +1 -1
  39. package/dist/utils/get-mfe-has-unique-chunk-namespace.d.ts +1 -1
  40. package/dist/utils/get-mfe-has-unique-chunk-namespace.d.ts.map +1 -1
  41. package/dist/utils/get-mfe-has-unique-chunk-namespace.js.map +1 -1
  42. package/dist/utils/get-mfe-supports-rerendering.d.ts +1 -1
  43. package/dist/utils/get-mfe-supports-rerendering.d.ts.map +1 -1
  44. package/dist/utils/get-mfe-supports-rerendering.js.map +1 -1
  45. package/dist/utils/get-version-mismatches.d.ts +1 -1
  46. package/dist/utils/get-version-mismatches.d.ts.map +1 -1
  47. package/dist/utils/get-version-mismatches.js +1 -1
  48. package/dist/utils/get-version-mismatches.js.map +1 -1
  49. package/dist/utils/web-component.d.ts +1 -1
  50. package/dist/utils/web-component.d.ts.map +1 -1
  51. package/dist/utils/web-component.js +12 -9
  52. package/dist/utils/web-component.js.map +1 -1
  53. package/package.json +12 -12
  54. package/src/__tests__/headless-loader.test.tsx +123 -0
  55. package/src/__tests__/loader.test.tsx +33 -11
  56. package/src/__tests__/register-headless.test.tsx +98 -0
  57. package/src/headless-loader.tsx +21 -0
  58. package/src/index.ts +2 -0
  59. package/src/loader.tsx +58 -46
  60. package/src/register-headless.ts +81 -0
  61. package/src/types.ts +9 -0
  62. package/src/utils/__tests__/get-version-mismatches.test.ts +1 -1
  63. package/src/utils/get-bundle-info.ts +37 -60
  64. package/src/utils/get-cache-setting.ts +5 -0
  65. package/src/utils/get-cached-metadata.ts +72 -0
  66. package/src/utils/get-mfe-has-compatible-launchdarkly-version.ts +1 -1
  67. package/src/utils/get-mfe-has-unique-chunk-namespace.ts +1 -1
  68. package/src/utils/get-mfe-supports-rerendering.ts +1 -1
  69. package/src/utils/get-version-mismatches.ts +1 -1
  70. package/src/utils/web-component.tsx +8 -6
  71. package/dist/__mocks__/expect-styles-in-dom.d.ts +0 -3
  72. package/dist/__mocks__/expect-styles-in-dom.d.ts.map +0 -1
  73. package/dist/__mocks__/index.d.ts +0 -4
  74. package/dist/__mocks__/index.d.ts.map +0 -1
  75. package/dist/__mocks__/register-component.d.ts +0 -4
  76. package/dist/__mocks__/register-component.d.ts.map +0 -1
  77. package/dist/__mocks__/test-component.d.ts +0 -3
  78. package/dist/__mocks__/test-component.d.ts.map +0 -1
@@ -1,15 +1,17 @@
1
1
  import semver from 'semver';
2
2
  import get from 'lodash.get';
3
3
  import { getJson } from '../common';
4
+ import { getCachedMetadata } from './get-cached-metadata';
5
+ import { getCacheSetting } from './get-cache-setting';
4
6
  import { getEntrypoints } from './get-entry-points';
5
- import { getMFESupportsRerendering } from './get-mfe-supports-rerendering';
6
- import { getVersionMismatches } from './get-version-mismatches';
7
- import { isVersionedUrl } from './is-versioned-url';
8
7
  import { getMFEHasCompatibleLaunchDarklyVersion } from './get-mfe-has-compatible-launchdarkly-version';
8
+ import { getMFESupportsRerendering } from './get-mfe-supports-rerendering';
9
9
  import { getMFEHasUniqueChunkNamespace } from './get-mfe-has-unique-chunk-namespace';
10
- export async function getBundleInfo({ mainPackageUrl, fallbackPackageUrl, exposedDependencies = {}, exposedInstanceDependencies = {}, signal, retries, onRequestError }) {
10
+ import { getVersionMismatches } from './get-version-mismatches';
11
+ export async function getBundleInfo({ cache, mainPackageUrl, fallbackPackageUrl, exposedDependencies = {}, exposedInstanceDependencies = {}, isHeadless, signal, retries, onRequestError }) {
11
12
  var _metadata_entrypoints;
12
- const { data: metadata, url: packageUrl } = await getMetadata({
13
+ const { data: metadata, url: packageUrl } = await getCachedMetadata({
14
+ cache,
13
15
  fallbackPackageUrl,
14
16
  mainPackageUrl,
15
17
  onRequestError,
@@ -18,33 +20,38 @@ export async function getBundleInfo({ mainPackageUrl, fallbackPackageUrl, expose
18
20
  });
19
21
  const { bundledWith, name, sharedDependencies } = metadata;
20
22
  const exactPackageUrl = packageUrl.replace('/dist/metadata.json', '');
21
- const cache = getCacheSetting(exactPackageUrl);
23
+ const requestCache = getCacheSetting(exactPackageUrl);
22
24
  let dependencies;
23
25
  if (metadata.dependencies) {
24
26
  dependencies = metadata.dependencies;
25
27
  } else {
26
28
  const { data: packageJson } = await getJson(`${exactPackageUrl}/package.json`, {
27
- cache,
29
+ cache: requestCache,
28
30
  retries,
29
31
  signal
30
32
  });
31
33
  dependencies = packageJson.dependencies;
32
34
  }
33
- const mismatch = getVersionMismatches(exposedDependencies, dependencies, sharedDependencies);
34
- const hasMismatch = !!Object.keys(mismatch).length;
35
- const startupVersion = bundledWith === null || bundledWith === void 0 ? void 0 : bundledWith['@servicetitan/startup'];
36
- const supportLightBundles = startupVersion && semver.gte(startupVersion, '17.0.0');
37
- const embed = !hasMismatch && supportLightBundles;
38
- const bundleType = embed ? 'light' : 'full';
39
- const withBaseUrl = (path)=>`${exactPackageUrl}/dist/bundle/${bundleType}/${path}`;
35
+ let mismatch;
36
+ let resolvedBundleType;
37
+ if (isHeadless) {
38
+ resolvedBundleType = 'headless';
39
+ } else {
40
+ mismatch = getVersionMismatches(exposedDependencies, dependencies, sharedDependencies);
41
+ const startupVersion = bundledWith === null || bundledWith === void 0 ? void 0 : bundledWith['@servicetitan/startup'];
42
+ const supportLightBundles = !!startupVersion && semver.gte(startupVersion, '17.0.0');
43
+ const embed = !mismatch && supportLightBundles;
44
+ resolvedBundleType = embed ? 'light' : 'full';
45
+ }
46
+ const withBaseUrl = (path)=>`${exactPackageUrl}/dist/bundle/${resolvedBundleType}/${path}`;
40
47
  let entrypoints;
41
- if ((_metadata_entrypoints = metadata.entrypoints) === null || _metadata_entrypoints === void 0 ? void 0 : _metadata_entrypoints[bundleType]) {
42
- entrypoints = metadata.entrypoints[bundleType];
48
+ if ((_metadata_entrypoints = metadata.entrypoints) === null || _metadata_entrypoints === void 0 ? void 0 : _metadata_entrypoints[resolvedBundleType]) {
49
+ entrypoints = metadata.entrypoints[resolvedBundleType];
43
50
  } else {
44
- entrypoints = await getEntrypoints(withBaseUrl('entrypoints.json'), cache);
51
+ entrypoints = await getEntrypoints(withBaseUrl('entrypoints.json'), requestCache);
45
52
  }
46
53
  const disposer = ()=>{
47
- if (embed) {
54
+ if (resolvedBundleType === 'light') {
48
55
  const path = Object.values(sharedDependencies).shift();
49
56
  if (path) {
50
57
  get(window, path).getStorage().clear(name);
@@ -55,39 +62,19 @@ export async function getBundleInfo({ mainPackageUrl, fallbackPackageUrl, expose
55
62
  ...result,
56
63
  [key]: value.map(withBaseUrl)
57
64
  }), {});
65
+ const elementName = resolvedBundleType === 'headless' ? `headless-${name}` : name;
58
66
  return {
59
67
  bundledWith,
60
68
  disposer,
61
69
  mfeSupportsRerendering: getMFESupportsRerendering(bundledWith, dependencies),
62
70
  mfeHasUniqueChunkNamespace: getMFEHasUniqueChunkNamespace(bundledWith),
63
71
  mfeHasCompatibleLaunchDarklyVersion: getMFEHasCompatibleLaunchDarklyVersion(bundledWith, exposedInstanceDependencies),
64
- mismatch: hasMismatch ? mismatch : undefined,
72
+ mismatch,
73
+ resolvedBundleType,
65
74
  urls,
66
- WebComponent: name,
75
+ WebComponent: elementName,
67
76
  version: metadata.version
68
77
  };
69
78
  }
70
- async function getMetadata(props) {
71
- const { fallbackPackageUrl, mainPackageUrl, onRequestError, retries, signal } = props;
72
- return getJson(`${mainPackageUrl}/dist/metadata.json`, {
73
- cache: getCacheSetting(mainPackageUrl),
74
- retries: fallbackPackageUrl ? 0 : retries,
75
- onRequestError,
76
- signal
77
- }).catch((e)=>{
78
- if (!fallbackPackageUrl) {
79
- throw e;
80
- }
81
- return getJson(`${fallbackPackageUrl}/dist/metadata.json`, {
82
- retries,
83
- onRequestError,
84
- cache: getCacheSetting(fallbackPackageUrl),
85
- signal
86
- });
87
- });
88
- }
89
- function getCacheSetting(url) {
90
- return isVersionedUrl(url) ? undefined : 'no-store';
91
- }
92
79
 
93
80
  //# sourceMappingURL=get-bundle-info.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/get-bundle-info.ts"],"sourcesContent":["import semver from 'semver';\nimport get from 'lodash.get';\n\nimport { ExposedDependencies, ExposedInstanceDependencies, getJson, GetJsonError } from '../common';\nimport { EntryPoints, getEntrypoints } from './get-entry-points';\nimport { getMFESupportsRerendering } from './get-mfe-supports-rerendering';\nimport { getVersionMismatches } from './get-version-mismatches';\nimport { isVersionedUrl } from './is-versioned-url';\nimport { getMFEHasCompatibleLaunchDarklyVersion } from './get-mfe-has-compatible-launchdarkly-version';\nimport { getMFEHasUniqueChunkNamespace } from './get-mfe-has-unique-chunk-namespace';\n\nexport interface Metadata {\n name: string;\n version?: string;\n bundledWith?: Record<string, string | undefined>;\n sharedDependencies: Record<string, string>;\n dependencies?: Record<string, string>;\n entrypoints?: Record<string, { css: string[]; js: string[] }>;\n}\n\nexport type BundleInfo = Awaited<ReturnType<typeof getBundleInfo>>;\n\ninterface GetBundleInfoProps {\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n fallbackPackageUrl?: string;\n mainPackageUrl: string;\n onRequestError?: (error: GetJsonError) => void;\n retries?: number;\n signal?: AbortSignal;\n}\n\nexport async function getBundleInfo({\n mainPackageUrl,\n fallbackPackageUrl,\n exposedDependencies = {},\n exposedInstanceDependencies = {},\n signal,\n retries,\n onRequestError,\n}: GetBundleInfoProps) {\n const { data: metadata, url: packageUrl } = await getMetadata({\n fallbackPackageUrl,\n mainPackageUrl,\n onRequestError,\n retries,\n signal,\n });\n\n const { bundledWith, name, sharedDependencies } = metadata;\n const exactPackageUrl = packageUrl.replace('/dist/metadata.json', '');\n const cache = getCacheSetting(exactPackageUrl);\n\n let dependencies: NonNullable<Metadata['dependencies']>;\n if (metadata.dependencies) {\n dependencies = metadata.dependencies;\n } else {\n const { data: packageJson } = await getJson(`${exactPackageUrl}/package.json`, {\n cache,\n retries,\n signal,\n });\n\n dependencies = packageJson.dependencies;\n }\n\n const mismatch = getVersionMismatches(exposedDependencies, dependencies, sharedDependencies);\n const hasMismatch = !!Object.keys(mismatch).length;\n const startupVersion = bundledWith?.['@servicetitan/startup'];\n const supportLightBundles = startupVersion && semver.gte(startupVersion, '17.0.0');\n const embed = !hasMismatch && supportLightBundles;\n const bundleType = embed ? 'light' : 'full';\n const withBaseUrl = (path: string) => `${exactPackageUrl}/dist/bundle/${bundleType}/${path}`;\n\n let entrypoints: EntryPoints;\n if (metadata.entrypoints?.[bundleType]) {\n entrypoints = metadata.entrypoints[bundleType];\n } else {\n entrypoints = await getEntrypoints(withBaseUrl('entrypoints.json'), cache);\n }\n\n const disposer = () => {\n if (embed) {\n const path = Object.values<string>(sharedDependencies).shift();\n if (path) {\n get(window, path).getStorage().clear(name);\n }\n }\n };\n\n const urls = Object.entries(entrypoints).reduce(\n (result, [key, value]) => ({ ...result, [key]: value.map(withBaseUrl) }),\n {} as EntryPoints\n );\n\n return {\n bundledWith,\n disposer,\n mfeSupportsRerendering: getMFESupportsRerendering(bundledWith, dependencies),\n mfeHasUniqueChunkNamespace: getMFEHasUniqueChunkNamespace(bundledWith),\n mfeHasCompatibleLaunchDarklyVersion: getMFEHasCompatibleLaunchDarklyVersion(\n bundledWith,\n exposedInstanceDependencies\n ),\n mismatch: hasMismatch ? mismatch : undefined,\n urls,\n WebComponent: name,\n version: metadata.version,\n };\n}\n\nasync function getMetadata(props: {\n fallbackPackageUrl?: string;\n mainPackageUrl: string;\n onRequestError?: (error: GetJsonError) => void;\n signal?: AbortSignal;\n retries?: number;\n}) {\n const { fallbackPackageUrl, mainPackageUrl, onRequestError, retries, signal } = props;\n\n return getJson<Metadata>(`${mainPackageUrl}/dist/metadata.json`, {\n cache: getCacheSetting(mainPackageUrl),\n retries: fallbackPackageUrl ? 0 : retries,\n onRequestError,\n signal,\n }).catch(e => {\n if (!fallbackPackageUrl) {\n throw e;\n }\n\n return getJson<Metadata>(`${fallbackPackageUrl}/dist/metadata.json`, {\n retries,\n onRequestError,\n cache: getCacheSetting(fallbackPackageUrl),\n signal,\n });\n });\n}\n\nfunction getCacheSetting(url: string) {\n return isVersionedUrl(url) ? undefined : 'no-store';\n}\n"],"names":["semver","get","getJson","getEntrypoints","getMFESupportsRerendering","getVersionMismatches","isVersionedUrl","getMFEHasCompatibleLaunchDarklyVersion","getMFEHasUniqueChunkNamespace","getBundleInfo","mainPackageUrl","fallbackPackageUrl","exposedDependencies","exposedInstanceDependencies","signal","retries","onRequestError","metadata","data","url","packageUrl","getMetadata","bundledWith","name","sharedDependencies","exactPackageUrl","replace","cache","getCacheSetting","dependencies","packageJson","mismatch","hasMismatch","Object","keys","length","startupVersion","supportLightBundles","gte","embed","bundleType","withBaseUrl","path","entrypoints","disposer","values","shift","window","getStorage","clear","urls","entries","reduce","result","key","value","map","mfeSupportsRerendering","mfeHasUniqueChunkNamespace","mfeHasCompatibleLaunchDarklyVersion","undefined","WebComponent","version","props","catch","e"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/get-bundle-info.ts"],"sourcesContent":["import semver from 'semver';\nimport get from 'lodash.get';\n\nimport { ExposedDependencies, ExposedInstanceDependencies, getJson, GetJsonError } from '../common';\nimport { getCachedMetadata } from './get-cached-metadata';\nimport { getCacheSetting } from './get-cache-setting';\nimport { EntryPoints, getEntrypoints } from './get-entry-points';\nimport { getMFEHasCompatibleLaunchDarklyVersion } from './get-mfe-has-compatible-launchdarkly-version';\nimport { getMFESupportsRerendering } from './get-mfe-supports-rerendering';\nimport { getMFEHasUniqueChunkNamespace } from './get-mfe-has-unique-chunk-namespace';\nimport { getVersionMismatches } from './get-version-mismatches';\nimport type { Metadata } from '../types';\n\nexport type BundleInfo = Awaited<ReturnType<typeof getBundleInfo>>;\n\ninterface GetBundleInfoProps {\n cache: boolean | number;\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n fallbackPackageUrl?: string;\n isHeadless?: boolean;\n mainPackageUrl: string;\n onRequestError?: (error: GetJsonError) => void;\n retries?: number;\n signal?: AbortSignal;\n}\n\nexport async function getBundleInfo({\n cache,\n mainPackageUrl,\n fallbackPackageUrl,\n exposedDependencies = {},\n exposedInstanceDependencies = {},\n isHeadless,\n signal,\n retries,\n onRequestError,\n}: GetBundleInfoProps) {\n const { data: metadata, url: packageUrl } = await getCachedMetadata({\n cache,\n fallbackPackageUrl,\n mainPackageUrl,\n onRequestError,\n retries,\n signal,\n });\n\n const { bundledWith, name, sharedDependencies } = metadata;\n const exactPackageUrl = packageUrl.replace('/dist/metadata.json', '');\n const requestCache = getCacheSetting(exactPackageUrl);\n\n let dependencies: NonNullable<Metadata['dependencies']>;\n if (metadata.dependencies) {\n dependencies = metadata.dependencies;\n } else {\n const { data: packageJson } = await getJson(`${exactPackageUrl}/package.json`, {\n cache: requestCache,\n retries,\n signal,\n });\n\n dependencies = packageJson.dependencies;\n }\n\n let mismatch: ReturnType<typeof getVersionMismatches>;\n let resolvedBundleType: 'headless' | 'light' | 'full';\n\n if (isHeadless) {\n resolvedBundleType = 'headless';\n } else {\n mismatch = getVersionMismatches(exposedDependencies, dependencies, sharedDependencies);\n const startupVersion = bundledWith?.['@servicetitan/startup'];\n const supportLightBundles = !!startupVersion && semver.gte(startupVersion, '17.0.0');\n const embed = !mismatch && supportLightBundles;\n resolvedBundleType = embed ? 'light' : 'full';\n }\n\n const withBaseUrl = (path: string) =>\n `${exactPackageUrl}/dist/bundle/${resolvedBundleType}/${path}`;\n\n let entrypoints: EntryPoints;\n if (metadata.entrypoints?.[resolvedBundleType]) {\n entrypoints = metadata.entrypoints[resolvedBundleType];\n } else {\n entrypoints = await getEntrypoints(withBaseUrl('entrypoints.json'), requestCache);\n }\n\n const disposer = () => {\n if (resolvedBundleType === 'light') {\n const path = Object.values<string>(sharedDependencies).shift();\n if (path) {\n get(window, path).getStorage().clear(name);\n }\n }\n };\n\n const urls = Object.entries(entrypoints).reduce(\n (result, [key, value]) => ({ ...result, [key]: value.map(withBaseUrl) }),\n {} as EntryPoints\n );\n\n const elementName = resolvedBundleType === 'headless' ? `headless-${name}` : name;\n\n return {\n bundledWith,\n disposer,\n mfeSupportsRerendering: getMFESupportsRerendering(bundledWith, dependencies),\n mfeHasUniqueChunkNamespace: getMFEHasUniqueChunkNamespace(bundledWith),\n mfeHasCompatibleLaunchDarklyVersion: getMFEHasCompatibleLaunchDarklyVersion(\n bundledWith,\n exposedInstanceDependencies\n ),\n mismatch,\n resolvedBundleType,\n urls,\n WebComponent: elementName,\n version: metadata.version,\n };\n}\n"],"names":["semver","get","getJson","getCachedMetadata","getCacheSetting","getEntrypoints","getMFEHasCompatibleLaunchDarklyVersion","getMFESupportsRerendering","getMFEHasUniqueChunkNamespace","getVersionMismatches","getBundleInfo","cache","mainPackageUrl","fallbackPackageUrl","exposedDependencies","exposedInstanceDependencies","isHeadless","signal","retries","onRequestError","metadata","data","url","packageUrl","bundledWith","name","sharedDependencies","exactPackageUrl","replace","requestCache","dependencies","packageJson","mismatch","resolvedBundleType","startupVersion","supportLightBundles","gte","embed","withBaseUrl","path","entrypoints","disposer","Object","values","shift","window","getStorage","clear","urls","entries","reduce","result","key","value","map","elementName","mfeSupportsRerendering","mfeHasUniqueChunkNamespace","mfeHasCompatibleLaunchDarklyVersion","WebComponent","version"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getCacheSetting(url: string): "no-store" | undefined;
2
+ //# sourceMappingURL=get-cache-setting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cache-setting.d.ts","sourceRoot":"","sources":["../../src/utils/get-cache-setting.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,0BAE1C"}
@@ -0,0 +1,6 @@
1
+ import { isVersionedUrl } from './is-versioned-url';
2
+ export function getCacheSetting(url) {
3
+ return isVersionedUrl(url) ? undefined : 'no-store';
4
+ }
5
+
6
+ //# sourceMappingURL=get-cache-setting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/get-cache-setting.ts"],"sourcesContent":["import { isVersionedUrl } from './is-versioned-url';\n\nexport function getCacheSetting(url: string) {\n return isVersionedUrl(url) ? undefined : 'no-store';\n}\n"],"names":["isVersionedUrl","getCacheSetting","url","undefined"],"mappings":"AAAA,SAASA,cAAc,QAAQ,qBAAqB;AAEpD,OAAO,SAASC,gBAAgBC,GAAW;IACvC,OAAOF,eAAeE,OAAOC,YAAY;AAC7C"}
@@ -0,0 +1,18 @@
1
+ import { GetJsonError } from '../common';
2
+ import type { Metadata } from '../types';
3
+ interface GetMetadataProps {
4
+ fallbackPackageUrl?: string;
5
+ mainPackageUrl: string;
6
+ onRequestError?: (error: GetJsonError) => void;
7
+ signal?: AbortSignal;
8
+ retries?: number;
9
+ }
10
+ export declare function getCachedMetadata(props: GetMetadataProps & {
11
+ cache: boolean | number;
12
+ }): Promise<{
13
+ data: Metadata;
14
+ headers: Headers;
15
+ url: string;
16
+ }>;
17
+ export {};
18
+ //# sourceMappingURL=get-cached-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cached-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/get-cached-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAWzC,UAAU,gBAAgB;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE;;;;GA2B5F"}
@@ -0,0 +1,47 @@
1
+ import { getJson } from '../common';
2
+ import { getCacheSetting } from './get-cache-setting';
3
+ import { getMFEHasUniqueChunkNamespace } from './get-mfe-has-unique-chunk-namespace';
4
+ import { TtlCache } from './ttl-cache';
5
+ const MINUTE = 1000 * 60;
6
+ const metadataResponseCache = new TtlCache({
7
+ ttlMs: 15 * MINUTE
8
+ });
9
+ async function getMetadata(props) {
10
+ const { fallbackPackageUrl, mainPackageUrl, onRequestError, retries, signal } = props;
11
+ try {
12
+ return await getJson(`${mainPackageUrl}/dist/metadata.json`, {
13
+ cache: getCacheSetting(mainPackageUrl),
14
+ retries: fallbackPackageUrl ? 0 : retries,
15
+ onRequestError,
16
+ signal
17
+ });
18
+ } catch (e) {
19
+ if (!fallbackPackageUrl) {
20
+ throw e;
21
+ }
22
+ return getJson(`${fallbackPackageUrl}/dist/metadata.json`, {
23
+ retries,
24
+ onRequestError,
25
+ cache: getCacheSetting(fallbackPackageUrl),
26
+ signal
27
+ });
28
+ }
29
+ }
30
+ export async function getCachedMetadata(props) {
31
+ let cache = props.cache;
32
+ const cacheKey = props.mainPackageUrl;
33
+ let metadataResponse = cache ? metadataResponseCache.get(cacheKey) : undefined;
34
+ if (!metadataResponse) {
35
+ metadataResponse = await getMetadata(props);
36
+ const mfeHasUniqueChunkNamespace = getMFEHasUniqueChunkNamespace(metadataResponse.data.bundledWith);
37
+ if (cache === true && !mfeHasUniqueChunkNamespace) {
38
+ cache = -1;
39
+ }
40
+ if (cache) {
41
+ metadataResponseCache.set(cacheKey, metadataResponse, typeof cache === 'number' ? cache : undefined);
42
+ }
43
+ }
44
+ return metadataResponse;
45
+ }
46
+
47
+ //# sourceMappingURL=get-cached-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/get-cached-metadata.ts"],"sourcesContent":["import { getJson, GetJsonError } from '../common';\nimport type { Metadata } from '../types';\nimport { getCacheSetting } from './get-cache-setting';\nimport { getMFEHasUniqueChunkNamespace } from './get-mfe-has-unique-chunk-namespace';\nimport { TtlCache } from './ttl-cache';\n\nconst MINUTE = 1000 * 60;\n\nconst metadataResponseCache = new TtlCache<Awaited<ReturnType<typeof getMetadata>>>({\n ttlMs: 15 * MINUTE,\n});\n\ninterface GetMetadataProps {\n fallbackPackageUrl?: string;\n mainPackageUrl: string;\n onRequestError?: (error: GetJsonError) => void;\n signal?: AbortSignal;\n retries?: number;\n}\n\nasync function getMetadata(props: GetMetadataProps) {\n const { fallbackPackageUrl, mainPackageUrl, onRequestError, retries, signal } = props;\n\n try {\n return await getJson<Metadata>(`${mainPackageUrl}/dist/metadata.json`, {\n cache: getCacheSetting(mainPackageUrl),\n retries: fallbackPackageUrl ? 0 : retries,\n onRequestError,\n signal,\n });\n } catch (e) {\n if (!fallbackPackageUrl) {\n throw e;\n }\n\n return getJson<Metadata>(`${fallbackPackageUrl}/dist/metadata.json`, {\n retries,\n onRequestError,\n cache: getCacheSetting(fallbackPackageUrl),\n signal,\n });\n }\n}\n\nexport async function getCachedMetadata(props: GetMetadataProps & { cache: boolean | number }) {\n let cache = props.cache;\n const cacheKey = props.mainPackageUrl;\n\n let metadataResponse = cache ? metadataResponseCache.get(cacheKey) : undefined;\n\n if (!metadataResponse) {\n metadataResponse = await getMetadata(props);\n\n const mfeHasUniqueChunkNamespace = getMFEHasUniqueChunkNamespace(\n metadataResponse.data.bundledWith\n );\n\n if (cache === true && !mfeHasUniqueChunkNamespace) {\n cache = -1;\n }\n\n if (cache) {\n metadataResponseCache.set(\n cacheKey,\n metadataResponse,\n typeof cache === 'number' ? cache : undefined\n );\n }\n }\n\n return metadataResponse;\n}\n"],"names":["getJson","getCacheSetting","getMFEHasUniqueChunkNamespace","TtlCache","MINUTE","metadataResponseCache","ttlMs","getMetadata","props","fallbackPackageUrl","mainPackageUrl","onRequestError","retries","signal","cache","e","getCachedMetadata","cacheKey","metadataResponse","get","undefined","mfeHasUniqueChunkNamespace","data","bundledWith","set"],"mappings":"AAAA,SAASA,OAAO,QAAsB,YAAY;AAElD,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,6BAA6B,QAAQ,uCAAuC;AACrF,SAASC,QAAQ,QAAQ,cAAc;AAEvC,MAAMC,SAAS,OAAO;AAEtB,MAAMC,wBAAwB,IAAIF,SAAkD;IAChFG,OAAO,KAAKF;AAChB;AAUA,eAAeG,YAAYC,KAAuB;IAC9C,MAAM,EAAEC,kBAAkB,EAAEC,cAAc,EAAEC,cAAc,EAAEC,OAAO,EAAEC,MAAM,EAAE,GAAGL;IAEhF,IAAI;QACA,OAAO,MAAMR,QAAkB,GAAGU,eAAe,mBAAmB,CAAC,EAAE;YACnEI,OAAOb,gBAAgBS;YACvBE,SAASH,qBAAqB,IAAIG;YAClCD;YACAE;QACJ;IACJ,EAAE,OAAOE,GAAG;QACR,IAAI,CAACN,oBAAoB;YACrB,MAAMM;QACV;QAEA,OAAOf,QAAkB,GAAGS,mBAAmB,mBAAmB,CAAC,EAAE;YACjEG;YACAD;YACAG,OAAOb,gBAAgBQ;YACvBI;QACJ;IACJ;AACJ;AAEA,OAAO,eAAeG,kBAAkBR,KAAqD;IACzF,IAAIM,QAAQN,MAAMM,KAAK;IACvB,MAAMG,WAAWT,MAAME,cAAc;IAErC,IAAIQ,mBAAmBJ,QAAQT,sBAAsBc,GAAG,CAACF,YAAYG;IAErE,IAAI,CAACF,kBAAkB;QACnBA,mBAAmB,MAAMX,YAAYC;QAErC,MAAMa,6BAA6BnB,8BAC/BgB,iBAAiBI,IAAI,CAACC,WAAW;QAGrC,IAAIT,UAAU,QAAQ,CAACO,4BAA4B;YAC/CP,QAAQ,CAAC;QACb;QAEA,IAAIA,OAAO;YACPT,sBAAsBmB,GAAG,CACrBP,UACAC,kBACA,OAAOJ,UAAU,WAAWA,QAAQM;QAE5C;IACJ;IAEA,OAAOF;AACX"}
@@ -1,5 +1,5 @@
1
1
  import { ExposedInstanceDependencies } from '../common';
2
- import { Metadata } from './get-bundle-info';
2
+ import type { Metadata } from '../types';
3
3
  /**
4
4
  * @param bundledWith THe MFE's metadata.bundledWith.
5
5
  * @param exposedInstanceDependencies The hosts's EXPOSED_INSTANCE_DEPENDENCIES, if any.
@@ -1 +1 @@
1
- {"version":3,"file":"get-mfe-has-compatible-launchdarkly-version.d.ts","sourceRoot":"","sources":["../../src/utils/get-mfe-has-compatible-launchdarkly-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,sCAAsC,CAClD,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,EACpC,2BAA2B,EAAE,2BAA2B,uBAO3D"}
1
+ {"version":3,"file":"get-mfe-has-compatible-launchdarkly-version.d.ts","sourceRoot":"","sources":["../../src/utils/get-mfe-has-compatible-launchdarkly-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,sCAAsC,CAClD,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,EACpC,2BAA2B,EAAE,2BAA2B,uBAO3D"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/get-mfe-has-compatible-launchdarkly-version.ts"],"sourcesContent":["import { ExposedInstanceDependencies } from '../common';\nimport { Metadata } from './get-bundle-info';\n\n/**\n * @param bundledWith THe MFE's metadata.bundledWith.\n * @param exposedInstanceDependencies The hosts's EXPOSED_INSTANCE_DEPENDENCIES, if any.\n * @returns Returns true when host and MFE use compatible version of LaunchDarkly\n * and returns false when host and MGE use incompatible version.\n * Returns undefined when either the host or MFE doesn't expose LaunchDarkly.\n */\nexport function getMFEHasCompatibleLaunchDarklyVersion(\n bundledWith: Metadata['bundledWith'],\n exposedInstanceDependencies: ExposedInstanceDependencies\n) {\n const mfeVersion = bundledWith?.['launchdarkly-js-client-sdk'];\n const hostVersion = exposedInstanceDependencies.launchDarkly?.version;\n if (hostVersion && mfeVersion) {\n return hostVersion === mfeVersion;\n }\n}\n"],"names":["getMFEHasCompatibleLaunchDarklyVersion","bundledWith","exposedInstanceDependencies","mfeVersion","hostVersion","launchDarkly","version"],"mappings":"AAGA;;;;;;CAMC,GACD,OAAO,SAASA,uCACZC,WAAoC,EACpCC,2BAAwD;QAGpCA;IADpB,MAAMC,aAAaF,wBAAAA,kCAAAA,WAAa,CAAC,6BAA6B;IAC9D,MAAMG,eAAcF,4CAAAA,4BAA4BG,YAAY,cAAxCH,gEAAAA,0CAA0CI,OAAO;IACrE,IAAIF,eAAeD,YAAY;QAC3B,OAAOC,gBAAgBD;IAC3B;AACJ"}
1
+ {"version":3,"sources":["../../src/utils/get-mfe-has-compatible-launchdarkly-version.ts"],"sourcesContent":["import { ExposedInstanceDependencies } from '../common';\nimport type { Metadata } from '../types';\n\n/**\n * @param bundledWith THe MFE's metadata.bundledWith.\n * @param exposedInstanceDependencies The hosts's EXPOSED_INSTANCE_DEPENDENCIES, if any.\n * @returns Returns true when host and MFE use compatible version of LaunchDarkly\n * and returns false when host and MGE use incompatible version.\n * Returns undefined when either the host or MFE doesn't expose LaunchDarkly.\n */\nexport function getMFEHasCompatibleLaunchDarklyVersion(\n bundledWith: Metadata['bundledWith'],\n exposedInstanceDependencies: ExposedInstanceDependencies\n) {\n const mfeVersion = bundledWith?.['launchdarkly-js-client-sdk'];\n const hostVersion = exposedInstanceDependencies.launchDarkly?.version;\n if (hostVersion && mfeVersion) {\n return hostVersion === mfeVersion;\n }\n}\n"],"names":["getMFEHasCompatibleLaunchDarklyVersion","bundledWith","exposedInstanceDependencies","mfeVersion","hostVersion","launchDarkly","version"],"mappings":"AAGA;;;;;;CAMC,GACD,OAAO,SAASA,uCACZC,WAAoC,EACpCC,2BAAwD;QAGpCA;IADpB,MAAMC,aAAaF,wBAAAA,kCAAAA,WAAa,CAAC,6BAA6B;IAC9D,MAAMG,eAAcF,4CAAAA,4BAA4BG,YAAY,cAAxCH,gEAAAA,0CAA0CI,OAAO;IACrE,IAAIF,eAAeD,YAAY;QAC3B,OAAOC,gBAAgBD;IAC3B;AACJ"}
@@ -1,3 +1,3 @@
1
- import { Metadata } from './get-bundle-info';
1
+ import type { Metadata } from '../types';
2
2
  export declare function getMFEHasUniqueChunkNamespace(bundledWith: Metadata['bundledWith']): boolean;
3
3
  //# sourceMappingURL=get-mfe-has-unique-chunk-namespace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-mfe-has-unique-chunk-namespace.d.ts","sourceRoot":"","sources":["../../src/utils/get-mfe-has-unique-chunk-namespace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,WAEjF"}
1
+ {"version":3,"file":"get-mfe-has-unique-chunk-namespace.d.ts","sourceRoot":"","sources":["../../src/utils/get-mfe-has-unique-chunk-namespace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,WAEjF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/get-mfe-has-unique-chunk-namespace.ts"],"sourcesContent":["import semver from 'semver';\nimport { Metadata } from './get-bundle-info';\n\n// Check if the MFE loads it's chunks into a unique global chunk namespace\nexport function getMFEHasUniqueChunkNamespace(bundledWith: Metadata['bundledWith']) {\n return !!isSupportedVersion(bundledWith?.['@servicetitan/startup']);\n}\n\nfunction isSupportedVersion(version?: string) {\n const minVersion = version && semver.minVersion(version);\n if (minVersion) {\n return semver.gte(minVersion, '27.2.0');\n }\n}\n"],"names":["semver","getMFEHasUniqueChunkNamespace","bundledWith","isSupportedVersion","version","minVersion","gte"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAG5B,0EAA0E;AAC1E,OAAO,SAASC,8BAA8BC,WAAoC;IAC9E,OAAO,CAAC,CAACC,mBAAmBD,wBAAAA,kCAAAA,WAAa,CAAC,wBAAwB;AACtE;AAEA,SAASC,mBAAmBC,OAAgB;IACxC,MAAMC,aAAaD,WAAWJ,OAAOK,UAAU,CAACD;IAChD,IAAIC,YAAY;QACZ,OAAOL,OAAOM,GAAG,CAACD,YAAY;IAClC;AACJ"}
1
+ {"version":3,"sources":["../../src/utils/get-mfe-has-unique-chunk-namespace.ts"],"sourcesContent":["import semver from 'semver';\nimport type { Metadata } from '../types';\n\n// Check if the MFE loads it's chunks into a unique global chunk namespace\nexport function getMFEHasUniqueChunkNamespace(bundledWith: Metadata['bundledWith']) {\n return !!isSupportedVersion(bundledWith?.['@servicetitan/startup']);\n}\n\nfunction isSupportedVersion(version?: string) {\n const minVersion = version && semver.minVersion(version);\n if (minVersion) {\n return semver.gte(minVersion, '27.2.0');\n }\n}\n"],"names":["semver","getMFEHasUniqueChunkNamespace","bundledWith","isSupportedVersion","version","minVersion","gte"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAG5B,0EAA0E;AAC1E,OAAO,SAASC,8BAA8BC,WAAoC;IAC9E,OAAO,CAAC,CAACC,mBAAmBD,wBAAAA,kCAAAA,WAAa,CAAC,wBAAwB;AACtE;AAEA,SAASC,mBAAmBC,OAAgB;IACxC,MAAMC,aAAaD,WAAWJ,OAAOK,UAAU,CAACD;IAChD,IAAIC,YAAY;QACZ,OAAOL,OAAOM,GAAG,CAACD,YAAY;IAClC;AACJ"}
@@ -1,3 +1,3 @@
1
- import { Metadata } from './get-bundle-info';
1
+ import type { Metadata } from '../types';
2
2
  export declare function getMFESupportsRerendering(bundledWith: Metadata['bundledWith'], dependencies: Metadata['dependencies']): boolean;
3
3
  //# sourceMappingURL=get-mfe-supports-rerendering.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-mfe-supports-rerendering.d.ts","sourceRoot":"","sources":["../../src/utils/get-mfe-supports-rerendering.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAY7C,wBAAgB,yBAAyB,CACrC,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,EACpC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,WAOzC"}
1
+ {"version":3,"file":"get-mfe-supports-rerendering.d.ts","sourceRoot":"","sources":["../../src/utils/get-mfe-supports-rerendering.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAYzC,wBAAgB,yBAAyB,CACrC,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,EACpC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,WAOzC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/get-mfe-supports-rerendering.ts"],"sourcesContent":["import semver from 'semver';\nimport { Metadata } from './get-bundle-info';\n\n/*\n * Check if the MFE supports re-rendering itself when data changes\n *\n * `bundledWith.@servicetitan/web-components` is checked first, as that guarantees support\n * `dependencies.@servicetitan/web-components` is checked second, in the case of the MFE's startup\n * hasn't been updated to add web-components to bundledWith yet, and the MFE's web-component\n * dependency is set in it's own package's package.json instead of the monorepo's root package.json\n * `bundledWith.@servicetitan/startup` is checked third, with the hope that the startup version\n * matches web-components\n */\nexport function getMFESupportsRerendering(\n bundledWith: Metadata['bundledWith'],\n dependencies: Metadata['dependencies']\n) {\n return !!(\n isSupportedVersion(bundledWith?.['@servicetitan/web-components']) ??\n isSupportedVersion(dependencies?.['@servicetitan/web-components']) ??\n isSupportedVersion(bundledWith?.['@servicetitan/startup'])\n );\n}\n\nfunction isSupportedVersion(version?: string) {\n const minVersion = version && semver.minVersion(version);\n if (minVersion) {\n return semver.gte(minVersion, '22.12.0');\n }\n}\n"],"names":["semver","getMFESupportsRerendering","bundledWith","dependencies","isSupportedVersion","version","minVersion","gte"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAG5B;;;;;;;;;CASC,GACD,OAAO,SAASC,0BACZC,WAAoC,EACpCC,YAAsC;QAGlCC,qBAAAA;IADJ,OAAO,CAAC,CACJA,CAAAA,CAAAA,OAAAA,CAAAA,sBAAAA,mBAAmBF,wBAAAA,kCAAAA,WAAa,CAAC,+BAA+B,eAAhEE,iCAAAA,sBACAA,mBAAmBD,yBAAAA,mCAAAA,YAAc,CAAC,+BAA+B,eADjEC,kBAAAA,OAEAA,mBAAmBF,wBAAAA,kCAAAA,WAAa,CAAC,wBAAwB,CAAA;AAEjE;AAEA,SAASE,mBAAmBC,OAAgB;IACxC,MAAMC,aAAaD,WAAWL,OAAOM,UAAU,CAACD;IAChD,IAAIC,YAAY;QACZ,OAAON,OAAOO,GAAG,CAACD,YAAY;IAClC;AACJ"}
1
+ {"version":3,"sources":["../../src/utils/get-mfe-supports-rerendering.ts"],"sourcesContent":["import semver from 'semver';\nimport type { Metadata } from '../types';\n\n/*\n * Check if the MFE supports re-rendering itself when data changes\n *\n * `bundledWith.@servicetitan/web-components` is checked first, as that guarantees support\n * `dependencies.@servicetitan/web-components` is checked second, in the case of the MFE's startup\n * hasn't been updated to add web-components to bundledWith yet, and the MFE's web-component\n * dependency is set in it's own package's package.json instead of the monorepo's root package.json\n * `bundledWith.@servicetitan/startup` is checked third, with the hope that the startup version\n * matches web-components\n */\nexport function getMFESupportsRerendering(\n bundledWith: Metadata['bundledWith'],\n dependencies: Metadata['dependencies']\n) {\n return !!(\n isSupportedVersion(bundledWith?.['@servicetitan/web-components']) ??\n isSupportedVersion(dependencies?.['@servicetitan/web-components']) ??\n isSupportedVersion(bundledWith?.['@servicetitan/startup'])\n );\n}\n\nfunction isSupportedVersion(version?: string) {\n const minVersion = version && semver.minVersion(version);\n if (minVersion) {\n return semver.gte(minVersion, '22.12.0');\n }\n}\n"],"names":["semver","getMFESupportsRerendering","bundledWith","dependencies","isSupportedVersion","version","minVersion","gte"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAG5B;;;;;;;;;CASC,GACD,OAAO,SAASC,0BACZC,WAAoC,EACpCC,YAAsC;QAGlCC,qBAAAA;IADJ,OAAO,CAAC,CACJA,CAAAA,CAAAA,OAAAA,CAAAA,sBAAAA,mBAAmBF,wBAAAA,kCAAAA,WAAa,CAAC,+BAA+B,eAAhEE,iCAAAA,sBACAA,mBAAmBD,yBAAAA,mCAAAA,YAAc,CAAC,+BAA+B,eADjEC,kBAAAA,OAEAA,mBAAmBF,wBAAAA,kCAAAA,WAAa,CAAC,wBAAwB,CAAA;AAEjE;AAEA,SAASE,mBAAmBC,OAAgB;IACxC,MAAMC,aAAaD,WAAWL,OAAOM,UAAU,CAACD;IAChD,IAAIC,YAAY;QACZ,OAAON,OAAOO,GAAG,CAACD,YAAY;IAClC;AACJ"}
@@ -2,5 +2,5 @@ import { ExposedDependencies } from '../common';
2
2
  export declare const getVersionMismatches: (exposedDependencies: ExposedDependencies, dependencies: Record<string, string>, sharedDependencies: Record<string, string>) => Record<string, {
3
3
  host: string;
4
4
  package: string;
5
- }>;
5
+ }> | undefined;
6
6
  //# sourceMappingURL=get-version-mismatches.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-version-mismatches.d.ts","sourceRoot":"","sources":["../../src/utils/get-version-mismatches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,eAAO,MAAM,oBAAoB,GAC7B,qBAAqB,mBAAmB,EACxC,cAAc,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,oBAAoB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;UAeT,MAAM;aAAW,MAAM;EAc3D,CAAC"}
1
+ {"version":3,"file":"get-version-mismatches.d.ts","sourceRoot":"","sources":["../../src/utils/get-version-mismatches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,eAAO,MAAM,oBAAoB,GAC7B,qBAAqB,mBAAmB,EACxC,cAAc,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,oBAAoB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;UAeT,MAAM;aAAW,MAAM;cAc3D,CAAC"}
@@ -24,7 +24,7 @@ export const getVersionMismatches = (exposedDependencies, dependencies, sharedDe
24
24
  };
25
25
  }
26
26
  }
27
- return mismatch;
27
+ return Object.keys(mismatch).length ? mismatch : undefined;
28
28
  };
29
29
 
30
30
  //# sourceMappingURL=get-version-mismatches.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/get-version-mismatches.ts"],"sourcesContent":["import { ExposedDependencies } from '../common';\nimport { isCompatible } from './is-compatible';\n\nexport const getVersionMismatches = (\n exposedDependencies: ExposedDependencies,\n dependencies: Record<string, string>,\n sharedDependencies: Record<string, string>\n) => {\n const mismatch = Object.entries(exposedDependencies).reduce(\n (result, [dependency, { version: hostVersion }]) => {\n const packageVersion = dependencies[dependency];\n if (\n packageVersion &&\n !!sharedDependencies[dependency] &&\n !isCompatible(hostVersion, packageVersion)\n ) {\n result[dependency] = { host: hostVersion, package: packageVersion };\n }\n\n return result;\n },\n {} as Record<string, { host: string; package: string }>\n );\n\n for (const [dependency, variable] of Object.entries(sharedDependencies)) {\n const packageVersion = dependencies[dependency];\n\n if (!exposedDependencies[dependency]) {\n mismatch[dependency] = { host: 'missing', package: packageVersion };\n } else if (exposedDependencies[dependency].variable !== variable) {\n mismatch[dependency] = { host: 'wrong global variable', package: packageVersion };\n }\n }\n\n return mismatch;\n};\n"],"names":["isCompatible","getVersionMismatches","exposedDependencies","dependencies","sharedDependencies","mismatch","Object","entries","reduce","result","dependency","version","hostVersion","packageVersion","host","package","variable"],"mappings":"AACA,SAASA,YAAY,QAAQ,kBAAkB;AAE/C,OAAO,MAAMC,uBAAuB,CAChCC,qBACAC,cACAC;IAEA,MAAMC,WAAWC,OAAOC,OAAO,CAACL,qBAAqBM,MAAM,CACvD,CAACC,QAAQ,CAACC,YAAY,EAAEC,SAASC,WAAW,EAAE,CAAC;QAC3C,MAAMC,iBAAiBV,YAAY,CAACO,WAAW;QAC/C,IACIG,kBACA,CAAC,CAACT,kBAAkB,CAACM,WAAW,IAChC,CAACV,aAAaY,aAAaC,iBAC7B;YACEJ,MAAM,CAACC,WAAW,GAAG;gBAAEI,MAAMF;gBAAaG,SAASF;YAAe;QACtE;QAEA,OAAOJ;IACX,GACA,CAAC;IAGL,KAAK,MAAM,CAACC,YAAYM,SAAS,IAAIV,OAAOC,OAAO,CAACH,oBAAqB;QACrE,MAAMS,iBAAiBV,YAAY,CAACO,WAAW;QAE/C,IAAI,CAACR,mBAAmB,CAACQ,WAAW,EAAE;YAClCL,QAAQ,CAACK,WAAW,GAAG;gBAAEI,MAAM;gBAAWC,SAASF;YAAe;QACtE,OAAO,IAAIX,mBAAmB,CAACQ,WAAW,CAACM,QAAQ,KAAKA,UAAU;YAC9DX,QAAQ,CAACK,WAAW,GAAG;gBAAEI,MAAM;gBAAyBC,SAASF;YAAe;QACpF;IACJ;IAEA,OAAOR;AACX,EAAE"}
1
+ {"version":3,"sources":["../../src/utils/get-version-mismatches.ts"],"sourcesContent":["import { ExposedDependencies } from '../common';\nimport { isCompatible } from './is-compatible';\n\nexport const getVersionMismatches = (\n exposedDependencies: ExposedDependencies,\n dependencies: Record<string, string>,\n sharedDependencies: Record<string, string>\n) => {\n const mismatch = Object.entries(exposedDependencies).reduce(\n (result, [dependency, { version: hostVersion }]) => {\n const packageVersion = dependencies[dependency];\n if (\n packageVersion &&\n !!sharedDependencies[dependency] &&\n !isCompatible(hostVersion, packageVersion)\n ) {\n result[dependency] = { host: hostVersion, package: packageVersion };\n }\n\n return result;\n },\n {} as Record<string, { host: string; package: string }>\n );\n\n for (const [dependency, variable] of Object.entries(sharedDependencies)) {\n const packageVersion = dependencies[dependency];\n\n if (!exposedDependencies[dependency]) {\n mismatch[dependency] = { host: 'missing', package: packageVersion };\n } else if (exposedDependencies[dependency].variable !== variable) {\n mismatch[dependency] = { host: 'wrong global variable', package: packageVersion };\n }\n }\n\n return Object.keys(mismatch).length ? mismatch : undefined;\n};\n"],"names":["isCompatible","getVersionMismatches","exposedDependencies","dependencies","sharedDependencies","mismatch","Object","entries","reduce","result","dependency","version","hostVersion","packageVersion","host","package","variable","keys","length","undefined"],"mappings":"AACA,SAASA,YAAY,QAAQ,kBAAkB;AAE/C,OAAO,MAAMC,uBAAuB,CAChCC,qBACAC,cACAC;IAEA,MAAMC,WAAWC,OAAOC,OAAO,CAACL,qBAAqBM,MAAM,CACvD,CAACC,QAAQ,CAACC,YAAY,EAAEC,SAASC,WAAW,EAAE,CAAC;QAC3C,MAAMC,iBAAiBV,YAAY,CAACO,WAAW;QAC/C,IACIG,kBACA,CAAC,CAACT,kBAAkB,CAACM,WAAW,IAChC,CAACV,aAAaY,aAAaC,iBAC7B;YACEJ,MAAM,CAACC,WAAW,GAAG;gBAAEI,MAAMF;gBAAaG,SAASF;YAAe;QACtE;QAEA,OAAOJ;IACX,GACA,CAAC;IAGL,KAAK,MAAM,CAACC,YAAYM,SAAS,IAAIV,OAAOC,OAAO,CAACH,oBAAqB;QACrE,MAAMS,iBAAiBV,YAAY,CAACO,WAAW;QAE/C,IAAI,CAACR,mBAAmB,CAACQ,WAAW,EAAE;YAClCL,QAAQ,CAACK,WAAW,GAAG;gBAAEI,MAAM;gBAAWC,SAASF;YAAe;QACtE,OAAO,IAAIX,mBAAmB,CAACQ,WAAW,CAACM,QAAQ,KAAKA,UAAU;YAC9DX,QAAQ,CAACK,WAAW,GAAG;gBAAEI,MAAM;gBAAyBC,SAASF;YAAe;QACpF;IACJ;IAEA,OAAOP,OAAOW,IAAI,CAACZ,UAAUa,MAAM,GAAGb,WAAWc;AACrD,EAAE"}
@@ -13,6 +13,6 @@ interface WebComponentProps {
13
13
  ldService?: LDService;
14
14
  logService?: Log;
15
15
  }
16
- export declare function webComponent(props: WebComponentProps): ({ LoadingFallback, ...props }: LoaderDataProps) => import("react/jsx-runtime").JSX.Element;
16
+ export declare function webComponent(props: WebComponentProps): ({ LoadingFallback, ...innerProps }: LoaderDataProps) => import("react/jsx-runtime").JSX.Element;
17
17
  export {};
18
18
  //# sourceMappingURL=web-component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-component.d.ts","sourceRoot":"","sources":["../../src/utils/web-component.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAiB,MAAM,WAAW,CAAC;AAE5F,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,UAAU,iBAAiB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,IAUzC,+BAA+B,eAAe,6CAwDzD"}
1
+ {"version":3,"file":"web-component.d.ts","sourceRoot":"","sources":["../../src/utils/web-component.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAiB,MAAM,WAAW,CAAC;AAE5F,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,UAAU,iBAAiB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,IAWzC,oCAAoC,eAAe,6CAyD9D"}
@@ -6,10 +6,10 @@ import { HistoryManager } from '../history-manager';
6
6
  export function webComponent(props) {
7
7
  var _bundleInfo_bundledWith;
8
8
  const { basename, bundleInfo, eventBus, exposedDependencies, ldService, logService } = props;
9
- const { WebComponent, disposer, mfeSupportsRerendering, version } = bundleInfo;
9
+ const { WebComponent, resolvedBundleType, disposer, mfeSupportsRerendering, version } = bundleInfo;
10
10
  const elementName = getElementName(bundleInfo);
11
11
  const exposedInstanceDependencies = ensureLDVersion(props.exposedInstanceDependencies, (_bundleInfo_bundledWith = bundleInfo.bundledWith) === null || _bundleInfo_bundledWith === void 0 ? void 0 : _bundleInfo_bundledWith['launchdarkly-js-client-sdk']);
12
- return ({ LoadingFallback, ...props })=>{
12
+ return ({ LoadingFallback, ...innerProps })=>{
13
13
  const [isLoading, setIsLoading] = useState(true);
14
14
  const [historyManager] = useOptionalDependencies(HistoryManager);
15
15
  const handleRef = (webComponent)=>{
@@ -30,8 +30,8 @@ export function webComponent(props) {
30
30
  });
31
31
  };
32
32
  // Stringify data object so that it can be passed as a data-attribute
33
- const stringifiedData = useMemo(()=>JSON.stringify(props.data), [
34
- props.data
33
+ const stringifiedData = useMemo(()=>JSON.stringify(innerProps.data), [
34
+ innerProps.data
35
35
  ]);
36
36
  /*
37
37
  * Set key for rendering the web component so that if the data from the Host change,
@@ -39,17 +39,16 @@ export function webComponent(props) {
39
39
  * the web component will be re-mounted whenever the data changes.
40
40
  * This is only used as a fallback when the MFE's version is older.
41
41
  */ const key = mfeSupportsRerendering ? undefined : stringifiedData;
42
- const dataAttrs = useMemo(()=>composeDataAttributes(props.data), [
43
- props.data
42
+ const dataAttrs = useMemo(()=>composeDataAttributes(innerProps.data), [
43
+ innerProps.data
44
44
  ]);
45
45
  const styleUrls = getStyleUrls(bundleInfo);
46
46
  return /*#__PURE__*/ _jsxs(Fragment, {
47
47
  children: [
48
48
  isLoading && /*#__PURE__*/ _jsx(LoadingFallback, {}),
49
49
  /*#__PURE__*/ _jsx(WebComponent, {
50
- // @ts-expect-error because property ref does not exist on IntrinsicAttributes
51
50
  ref: handleRef,
52
- class: props.className,
51
+ class: innerProps.className,
53
52
  ...styleUrls && {
54
53
  'style-urls': styleUrls
55
54
  },
@@ -58,7 +57,11 @@ export function webComponent(props) {
58
57
  "data-mfe-name": elementName,
59
58
  ...version && {
60
59
  'data-mfe-version': version
61
- }
60
+ },
61
+ // @ts-expect-error style exists on HTMLElement
62
+ style: resolvedBundleType === 'headless' ? {
63
+ display: 'none'
64
+ } : undefined
62
65
  }, key)
63
66
  ]
64
67
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/web-component.tsx"],"sourcesContent":["import { Fragment, useMemo, useState } from 'react';\nimport { Log } from '@servicetitan/log-service';\nimport { type LDService } from '@servicetitan/launchdarkly-service';\nimport { useOptionalDependencies } from '@servicetitan/react-ioc';\n\nimport { ExposedDependencies, ExposedInstanceDependencies, IWebComponent } from '../common';\nimport { MFEContextData } from '../contexts/mfe-data-context';\nimport { EventBus } from '../event-bus';\nimport { BundleInfo } from './get-bundle-info';\nimport { getElementName } from './get-element-name';\nimport { HistoryManager } from '../history-manager';\nimport { LoaderDataProps } from '../loader';\n\ninterface WebComponentProps {\n basename?: string;\n bundleInfo: BundleInfo;\n eventBus: EventBus;\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n ldService?: LDService;\n logService?: Log;\n}\n\nexport function webComponent(props: WebComponentProps) {\n const { basename, bundleInfo, eventBus, exposedDependencies, ldService, logService } = props;\n const { WebComponent, disposer, mfeSupportsRerendering, version } = bundleInfo;\n const elementName = getElementName(bundleInfo);\n\n const exposedInstanceDependencies = ensureLDVersion(\n props.exposedInstanceDependencies,\n bundleInfo.bundledWith?.['launchdarkly-js-client-sdk']\n );\n\n return ({ LoadingFallback, ...props }: LoaderDataProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const [historyManager] = useOptionalDependencies(HistoryManager);\n\n const handleRef = (webComponent: IWebComponent | null) => {\n webComponent?.provide({\n ldService,\n logService,\n historyManager,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n basename,\n onReady: () => {\n setIsLoading(false);\n },\n onDispose: () => {\n disposer();\n },\n });\n };\n\n // Stringify data object so that it can be passed as a data-attribute\n const stringifiedData = useMemo(() => JSON.stringify(props.data), [props.data]);\n\n /*\n * Set key for rendering the web component so that if the data from the Host change,\n * and the MFE's version of startup doesn't support watching for data changes, then\n * the web component will be re-mounted whenever the data changes.\n * This is only used as a fallback when the MFE's version is older.\n */\n const key = mfeSupportsRerendering ? undefined : stringifiedData;\n const dataAttrs = useMemo(() => composeDataAttributes(props.data), [props.data]);\n const styleUrls = getStyleUrls(bundleInfo);\n\n return (\n <Fragment>\n {isLoading && <LoadingFallback />}\n <WebComponent\n key={key}\n // @ts-expect-error because property ref does not exist on IntrinsicAttributes\n ref={handleRef}\n class={props.className}\n {...(styleUrls && { 'style-urls': styleUrls })}\n /*\n * Continue to spread data as separate data attributes for backwards compatibility,\n * in case the Host has updated web-components, but the MFE has not\n */\n {...dataAttrs}\n data-mfe-data={stringifiedData}\n data-mfe-name={elementName}\n {...(version && { 'data-mfe-version': version })}\n />\n </Fragment>\n );\n };\n}\n\n/*\n * Convert camelCase data props to kebab-case data attributes, prepended with data-\n * Ex: fooBar -> data-foo-bar\n */\nfunction composeDataAttributes(data: MFEContextData<{}> | undefined = {}) {\n return Object.fromEntries(\n Object.entries(data).map(([key, value]) => [\n 'data-' + key.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase()),\n value,\n ])\n );\n}\n\nfunction ensureLDVersion(\n exposedInstanceDependencies: ExposedInstanceDependencies = {},\n version?: string\n) {\n if (version && !exposedInstanceDependencies.launchDarkly?.ldService) {\n return { ...exposedInstanceDependencies, launchDarkly: { version } };\n }\n return exposedInstanceDependencies;\n}\n\nfunction getStyleUrls({ urls }: Pick<BundleInfo, 'urls'>) {\n if (urls.css.length) {\n return encodeURIComponent(JSON.stringify(urls.css));\n }\n}\n"],"names":["Fragment","useMemo","useState","useOptionalDependencies","getElementName","HistoryManager","webComponent","props","bundleInfo","basename","eventBus","exposedDependencies","ldService","logService","WebComponent","disposer","mfeSupportsRerendering","version","elementName","exposedInstanceDependencies","ensureLDVersion","bundledWith","LoadingFallback","isLoading","setIsLoading","historyManager","handleRef","provide","onReady","onDispose","stringifiedData","JSON","stringify","data","key","undefined","dataAttrs","composeDataAttributes","styleUrls","getStyleUrls","ref","class","className","data-mfe-data","data-mfe-name","Object","fromEntries","entries","map","value","replace","letter","toLowerCase","launchDarkly","urls","css","length","encodeURIComponent"],"mappings":";AAAA,SAASA,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,uBAAuB,QAAQ,0BAA0B;AAMlE,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,cAAc,QAAQ,qBAAqB;AAapD,OAAO,SAASC,aAAaC,KAAwB;QAO7CC;IANJ,MAAM,EAAEC,QAAQ,EAAED,UAAU,EAAEE,QAAQ,EAAEC,mBAAmB,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGN;IACvF,MAAM,EAAEO,YAAY,EAAEC,QAAQ,EAAEC,sBAAsB,EAAEC,OAAO,EAAE,GAAGT;IACpE,MAAMU,cAAcd,eAAeI;IAEnC,MAAMW,8BAA8BC,gBAChCb,MAAMY,2BAA2B,GACjCX,0BAAAA,WAAWa,WAAW,cAAtBb,8CAAAA,uBAAwB,CAAC,6BAA6B;IAG1D,OAAO,CAAC,EAAEc,eAAe,EAAE,GAAGf,OAAwB;QAClD,MAAM,CAACgB,WAAWC,aAAa,GAAGtB,SAAS;QAC3C,MAAM,CAACuB,eAAe,GAAGtB,wBAAwBE;QAEjD,MAAMqB,YAAY,CAACpB;YACfA,yBAAAA,mCAAAA,aAAcqB,OAAO,CAAC;gBAClBf;gBACAC;gBACAY;gBACAd;gBACAQ;gBACAT;gBACAD;gBACAmB,SAAS;oBACLJ,aAAa;gBACjB;gBACAK,WAAW;oBACPd;gBACJ;YACJ;QACJ;QAEA,qEAAqE;QACrE,MAAMe,kBAAkB7B,QAAQ,IAAM8B,KAAKC,SAAS,CAACzB,MAAM0B,IAAI,GAAG;YAAC1B,MAAM0B,IAAI;SAAC;QAE9E;;;;;SAKC,GACD,MAAMC,MAAMlB,yBAAyBmB,YAAYL;QACjD,MAAMM,YAAYnC,QAAQ,IAAMoC,sBAAsB9B,MAAM0B,IAAI,GAAG;YAAC1B,MAAM0B,IAAI;SAAC;QAC/E,MAAMK,YAAYC,aAAa/B;QAE/B,qBACI,MAACR;;gBACIuB,2BAAa,KAACD;8BACf,KAACR;oBAEG,8EAA8E;oBAC9E0B,KAAKd;oBACLe,OAAOlC,MAAMmC,SAAS;oBACrB,GAAIJ,aAAa;wBAAE,cAAcA;oBAAU,CAAC;oBAK5C,GAAGF,SAAS;oBACbO,iBAAeb;oBACfc,iBAAe1B;oBACd,GAAID,WAAW;wBAAE,oBAAoBA;oBAAQ,CAAC;mBAZ1CiB;;;IAgBrB;AACJ;AAEA;;;CAGC,GACD,SAASG,sBAAsBJ,OAAuC,CAAC,CAAC;IACpE,OAAOY,OAAOC,WAAW,CACrBD,OAAOE,OAAO,CAACd,MAAMe,GAAG,CAAC,CAAC,CAACd,KAAKe,MAAM,GAAK;YACvC,UAAUf,IAAIgB,OAAO,CAAC,UAAUC,CAAAA,SAAU,MAAMA,OAAOC,WAAW;YAClEH;SACH;AAET;AAEA,SAAS7B,gBACLD,8BAA2D,CAAC,CAAC,EAC7DF,OAAgB;QAEAE;IAAhB,IAAIF,WAAW,GAACE,4CAAAA,4BAA4BkC,YAAY,cAAxClC,gEAAAA,0CAA0CP,SAAS,GAAE;QACjE,OAAO;YAAE,GAAGO,2BAA2B;YAAEkC,cAAc;gBAAEpC;YAAQ;QAAE;IACvE;IACA,OAAOE;AACX;AAEA,SAASoB,aAAa,EAAEe,IAAI,EAA4B;IACpD,IAAIA,KAAKC,GAAG,CAACC,MAAM,EAAE;QACjB,OAAOC,mBAAmB1B,KAAKC,SAAS,CAACsB,KAAKC,GAAG;IACrD;AACJ"}
1
+ {"version":3,"sources":["../../src/utils/web-component.tsx"],"sourcesContent":["import { Fragment, useMemo, useState } from 'react';\nimport { Log } from '@servicetitan/log-service';\nimport { type LDService } from '@servicetitan/launchdarkly-service';\nimport { useOptionalDependencies } from '@servicetitan/react-ioc';\n\nimport { ExposedDependencies, ExposedInstanceDependencies, IWebComponent } from '../common';\nimport { MFEContextData } from '../contexts/mfe-data-context';\nimport { EventBus } from '../event-bus';\nimport { BundleInfo } from './get-bundle-info';\nimport { getElementName } from './get-element-name';\nimport { HistoryManager } from '../history-manager';\nimport { LoaderDataProps } from '../loader';\n\ninterface WebComponentProps {\n basename?: string;\n bundleInfo: BundleInfo;\n eventBus: EventBus;\n exposedDependencies?: ExposedDependencies;\n exposedInstanceDependencies?: ExposedInstanceDependencies;\n ldService?: LDService;\n logService?: Log;\n}\n\nexport function webComponent(props: WebComponentProps) {\n const { basename, bundleInfo, eventBus, exposedDependencies, ldService, logService } = props;\n const { WebComponent, resolvedBundleType, disposer, mfeSupportsRerendering, version } =\n bundleInfo;\n const elementName = getElementName(bundleInfo);\n\n const exposedInstanceDependencies = ensureLDVersion(\n props.exposedInstanceDependencies,\n bundleInfo.bundledWith?.['launchdarkly-js-client-sdk']\n );\n\n return ({ LoadingFallback, ...innerProps }: LoaderDataProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const [historyManager] = useOptionalDependencies(HistoryManager);\n\n const handleRef = (webComponent: IWebComponent | null) => {\n webComponent?.provide({\n ldService,\n logService,\n historyManager,\n exposedDependencies,\n exposedInstanceDependencies,\n eventBus,\n basename,\n onReady: () => {\n setIsLoading(false);\n },\n onDispose: () => {\n disposer();\n },\n });\n };\n\n // Stringify data object so that it can be passed as a data-attribute\n const stringifiedData = useMemo(() => JSON.stringify(innerProps.data), [innerProps.data]);\n\n /*\n * Set key for rendering the web component so that if the data from the Host change,\n * and the MFE's version of startup doesn't support watching for data changes, then\n * the web component will be re-mounted whenever the data changes.\n * This is only used as a fallback when the MFE's version is older.\n */\n const key = mfeSupportsRerendering ? undefined : stringifiedData;\n const dataAttrs = useMemo(() => composeDataAttributes(innerProps.data), [innerProps.data]);\n const styleUrls = getStyleUrls(bundleInfo);\n\n return (\n <Fragment>\n {isLoading && <LoadingFallback />}\n <WebComponent\n key={key}\n ref={handleRef}\n class={innerProps.className}\n {...(styleUrls && { 'style-urls': styleUrls })}\n /*\n * Continue to spread data as separate data attributes for backwards compatibility,\n * in case the Host has updated web-components, but the MFE has not\n */\n {...dataAttrs}\n data-mfe-data={stringifiedData}\n data-mfe-name={elementName}\n {...(version && { 'data-mfe-version': version })}\n // @ts-expect-error style exists on HTMLElement\n style={resolvedBundleType === 'headless' ? { display: 'none' } : undefined}\n />\n </Fragment>\n );\n };\n}\n\n/*\n * Convert camelCase data props to kebab-case data attributes, prepended with data-\n * Ex: fooBar -> data-foo-bar\n */\nfunction composeDataAttributes(data: MFEContextData<{}> | undefined = {}) {\n return Object.fromEntries(\n Object.entries(data).map(([key, value]) => [\n 'data-' + key.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase()),\n value,\n ])\n );\n}\n\nfunction ensureLDVersion(\n exposedInstanceDependencies: ExposedInstanceDependencies = {},\n version?: string\n) {\n if (version && !exposedInstanceDependencies.launchDarkly?.ldService) {\n return { ...exposedInstanceDependencies, launchDarkly: { version } };\n }\n return exposedInstanceDependencies;\n}\n\nfunction getStyleUrls({ urls }: Pick<BundleInfo, 'urls'>) {\n if (urls.css.length) {\n return encodeURIComponent(JSON.stringify(urls.css));\n }\n}\n"],"names":["Fragment","useMemo","useState","useOptionalDependencies","getElementName","HistoryManager","webComponent","props","bundleInfo","basename","eventBus","exposedDependencies","ldService","logService","WebComponent","resolvedBundleType","disposer","mfeSupportsRerendering","version","elementName","exposedInstanceDependencies","ensureLDVersion","bundledWith","LoadingFallback","innerProps","isLoading","setIsLoading","historyManager","handleRef","provide","onReady","onDispose","stringifiedData","JSON","stringify","data","key","undefined","dataAttrs","composeDataAttributes","styleUrls","getStyleUrls","ref","class","className","data-mfe-data","data-mfe-name","style","display","Object","fromEntries","entries","map","value","replace","letter","toLowerCase","launchDarkly","urls","css","length","encodeURIComponent"],"mappings":";AAAA,SAASA,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,uBAAuB,QAAQ,0BAA0B;AAMlE,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,cAAc,QAAQ,qBAAqB;AAapD,OAAO,SAASC,aAAaC,KAAwB;QAQ7CC;IAPJ,MAAM,EAAEC,QAAQ,EAAED,UAAU,EAAEE,QAAQ,EAAEC,mBAAmB,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGN;IACvF,MAAM,EAAEO,YAAY,EAAEC,kBAAkB,EAAEC,QAAQ,EAAEC,sBAAsB,EAAEC,OAAO,EAAE,GACjFV;IACJ,MAAMW,cAAcf,eAAeI;IAEnC,MAAMY,8BAA8BC,gBAChCd,MAAMa,2BAA2B,GACjCZ,0BAAAA,WAAWc,WAAW,cAAtBd,8CAAAA,uBAAwB,CAAC,6BAA6B;IAG1D,OAAO,CAAC,EAAEe,eAAe,EAAE,GAAGC,YAA6B;QACvD,MAAM,CAACC,WAAWC,aAAa,GAAGxB,SAAS;QAC3C,MAAM,CAACyB,eAAe,GAAGxB,wBAAwBE;QAEjD,MAAMuB,YAAY,CAACtB;YACfA,yBAAAA,mCAAAA,aAAcuB,OAAO,CAAC;gBAClBjB;gBACAC;gBACAc;gBACAhB;gBACAS;gBACAV;gBACAD;gBACAqB,SAAS;oBACLJ,aAAa;gBACjB;gBACAK,WAAW;oBACPf;gBACJ;YACJ;QACJ;QAEA,qEAAqE;QACrE,MAAMgB,kBAAkB/B,QAAQ,IAAMgC,KAAKC,SAAS,CAACV,WAAWW,IAAI,GAAG;YAACX,WAAWW,IAAI;SAAC;QAExF;;;;;SAKC,GACD,MAAMC,MAAMnB,yBAAyBoB,YAAYL;QACjD,MAAMM,YAAYrC,QAAQ,IAAMsC,sBAAsBf,WAAWW,IAAI,GAAG;YAACX,WAAWW,IAAI;SAAC;QACzF,MAAMK,YAAYC,aAAajC;QAE/B,qBACI,MAACR;;gBACIyB,2BAAa,KAACF;8BACf,KAACT;oBAEG4B,KAAKd;oBACLe,OAAOnB,WAAWoB,SAAS;oBAC1B,GAAIJ,aAAa;wBAAE,cAAcA;oBAAU,CAAC;oBAK5C,GAAGF,SAAS;oBACbO,iBAAeb;oBACfc,iBAAe3B;oBACd,GAAID,WAAW;wBAAE,oBAAoBA;oBAAQ,CAAC;oBAC/C,+CAA+C;oBAC/C6B,OAAOhC,uBAAuB,aAAa;wBAAEiC,SAAS;oBAAO,IAAIX;mBAb5DD;;;IAiBrB;AACJ;AAEA;;;CAGC,GACD,SAASG,sBAAsBJ,OAAuC,CAAC,CAAC;IACpE,OAAOc,OAAOC,WAAW,CACrBD,OAAOE,OAAO,CAAChB,MAAMiB,GAAG,CAAC,CAAC,CAAChB,KAAKiB,MAAM,GAAK;YACvC,UAAUjB,IAAIkB,OAAO,CAAC,UAAUC,CAAAA,SAAU,MAAMA,OAAOC,WAAW;YAClEH;SACH;AAET;AAEA,SAAShC,gBACLD,8BAA2D,CAAC,CAAC,EAC7DF,OAAgB;QAEAE;IAAhB,IAAIF,WAAW,GAACE,4CAAAA,4BAA4BqC,YAAY,cAAxCrC,gEAAAA,0CAA0CR,SAAS,GAAE;QACjE,OAAO;YAAE,GAAGQ,2BAA2B;YAAEqC,cAAc;gBAAEvC;YAAQ;QAAE;IACvE;IACA,OAAOE;AACX;AAEA,SAASqB,aAAa,EAAEiB,IAAI,EAA4B;IACpD,IAAIA,KAAKC,GAAG,CAACC,MAAM,EAAE;QACjB,OAAOC,mBAAmB5B,KAAKC,SAAS,CAACwB,KAAKC,GAAG;IACrD;AACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/web-components",
3
- "version": "31.0.0",
3
+ "version": "31.2.0",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,17 +15,17 @@
15
15
  "src"
16
16
  ],
17
17
  "dependencies": {
18
- "@servicetitan/error-boundary": "31.0.0",
18
+ "@servicetitan/error-boundary": "31.2.0",
19
19
  "lodash.get": "~4.4.2",
20
20
  "mitt": "~3.0.1",
21
21
  "semver": "~7.7.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@servicetitan/anvil2": "^1.37.2",
24
+ "@servicetitan/anvil2": "^1.39.0",
25
25
  "@servicetitan/design-system": "~14.5.3",
26
- "@servicetitan/launchdarkly-service": "31.0.0",
27
- "@servicetitan/log-service": "31.0.0",
28
- "@servicetitan/react-ioc": "31.0.0",
26
+ "@servicetitan/launchdarkly-service": "31.2.0",
27
+ "@servicetitan/log-service": "31.2.0",
28
+ "@servicetitan/react-ioc": "31.2.0",
29
29
  "@testing-library/dom": "^10.4.0",
30
30
  "@testing-library/jest-dom": "^6.6.3",
31
31
  "@testing-library/react": "^16.3.0",
@@ -35,17 +35,17 @@
35
35
  "@types/react-dom": "~18.3.0",
36
36
  "@types/semver": "~7.7.0",
37
37
  "history": "~4.10.1",
38
- "launchdarkly-react-client-sdk": "^3.6.1",
38
+ "launchdarkly-react-client-sdk": "3.6.1",
39
39
  "react": "~18.3.1",
40
40
  "react-dom": "~18.3.1",
41
41
  "shadow-dom-testing-library": "^1.12.0"
42
42
  },
43
43
  "peerDependencies": {
44
- "@servicetitan/anvil2": ">=1.37.2",
44
+ "@servicetitan/anvil2": ">=1.39.0",
45
45
  "@servicetitan/design-system": ">=14.5.3",
46
- "@servicetitan/launchdarkly-service": "31.0.0",
47
- "@servicetitan/log-service": "31.0.0",
48
- "@servicetitan/react-ioc": "31.0.0",
46
+ "@servicetitan/launchdarkly-service": "31.2.0",
47
+ "@servicetitan/log-service": "31.2.0",
48
+ "@servicetitan/react-ioc": "31.2.0",
49
49
  "history": "~4.10.1",
50
50
  "react": ">=17.0.2",
51
51
  "react-dom": ">=17.0.2"
@@ -67,5 +67,5 @@
67
67
  "cli": {
68
68
  "webpack": false
69
69
  },
70
- "gitHead": "c52e188a1217df74052774a2eea6a5126089e3d5"
70
+ "gitHead": "a12efe0333352598f98e5f8772458c8b8d64aa74"
71
71
  }