@servicetitan/web-components 30.3.0 → 31.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 (76) hide show
  1. package/dist/__mocks__/test-component.d.ts.map +1 -1
  2. package/dist/common.js +17 -13
  3. package/dist/common.js.map +1 -1
  4. package/dist/contexts/index.js +1 -0
  5. package/dist/contexts/index.js.map +1 -1
  6. package/dist/contexts/mfe-data-context.js +2 -2
  7. package/dist/contexts/mfe-data-context.js.map +1 -1
  8. package/dist/contexts/mfe-metadata-context.js +1 -0
  9. package/dist/contexts/mfe-metadata-context.js.map +1 -1
  10. package/dist/delayed.js +8 -5
  11. package/dist/delayed.js.map +1 -1
  12. package/dist/event-bus.js +79 -96
  13. package/dist/event-bus.js.map +1 -1
  14. package/dist/get-value-for-environment.js +9 -4
  15. package/dist/get-value-for-environment.js.map +1 -1
  16. package/dist/globals.js +7 -7
  17. package/dist/globals.js.map +1 -1
  18. package/dist/history-manager.js +59 -69
  19. package/dist/history-manager.js.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/loader.js +92 -49
  23. package/dist/loader.js.map +1 -1
  24. package/dist/register.js +182 -218
  25. package/dist/register.js.map +1 -1
  26. package/dist/render.js +11 -12
  27. package/dist/render.js.map +1 -1
  28. package/dist/types.js +2 -1
  29. package/dist/types.js.map +1 -1
  30. package/dist/utils/get-bundle-info.js +18 -16
  31. package/dist/utils/get-bundle-info.js.map +1 -1
  32. package/dist/utils/get-element-name.js +1 -0
  33. package/dist/utils/get-element-name.js.map +1 -1
  34. package/dist/utils/get-entry-points.js +11 -4
  35. package/dist/utils/get-entry-points.js.map +1 -1
  36. package/dist/utils/get-ld-service-token.js +3 -3
  37. package/dist/utils/get-ld-service-token.js.map +1 -1
  38. package/dist/utils/get-mfe-has-compatible-launchdarkly-version.js +4 -4
  39. package/dist/utils/get-mfe-has-compatible-launchdarkly-version.js.map +1 -1
  40. package/dist/utils/get-mfe-has-unique-chunk-namespace.js +1 -0
  41. package/dist/utils/get-mfe-has-unique-chunk-namespace.js.map +1 -1
  42. package/dist/utils/get-mfe-supports-rerendering.js +4 -4
  43. package/dist/utils/get-mfe-supports-rerendering.js.map +1 -1
  44. package/dist/utils/get-version-mismatches.js +18 -11
  45. package/dist/utils/get-version-mismatches.js.map +1 -1
  46. package/dist/utils/index.js +1 -0
  47. package/dist/utils/index.js.map +1 -1
  48. package/dist/utils/is-compatible.js +1 -0
  49. package/dist/utils/is-compatible.js.map +1 -1
  50. package/dist/utils/is-versioned-url.js +2 -1
  51. package/dist/utils/is-versioned-url.js.map +1 -1
  52. package/dist/utils/load-scripts.js +7 -6
  53. package/dist/utils/load-scripts.js.map +1 -1
  54. package/dist/utils/ttl-cache.js +26 -27
  55. package/dist/utils/ttl-cache.js.map +1 -1
  56. package/dist/utils/validate-bundle-info.js +13 -10
  57. package/dist/utils/validate-bundle-info.js.map +1 -1
  58. package/dist/utils/web-component.js +46 -22
  59. package/dist/utils/web-component.js.map +1 -1
  60. package/package.json +11 -11
  61. package/src/__mocks__/test-component.tsx +2 -0
  62. package/src/__tests__/event-bus.test.ts +1 -0
  63. package/src/__tests__/loader.test.tsx +3 -3
  64. package/src/event-bus.ts +1 -0
  65. package/dist/__mocks__/expect-styles-in-dom.js +0 -9
  66. package/dist/__mocks__/expect-styles-in-dom.js.map +0 -1
  67. package/dist/__mocks__/index.js +0 -4
  68. package/dist/__mocks__/index.js.map +0 -1
  69. package/dist/__mocks__/register-component.js +0 -14
  70. package/dist/__mocks__/register-component.js.map +0 -1
  71. package/dist/__mocks__/test-component.js +0 -15
  72. package/dist/__mocks__/test-component.js.map +0 -1
  73. package/dist/contexts/tests/mfe-data-context.test.js +0 -24
  74. package/dist/contexts/tests/mfe-data-context.test.js.map +0 -1
  75. package/dist/contexts/tests/mfe-metadata-context.test.js +0 -26
  76. package/dist/contexts/tests/mfe-metadata-context.test.js.map +0 -1
package/dist/register.js CHANGED
@@ -1,8 +1,21 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
1
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
15
  import { useEffect } from 'react';
3
16
  import { Log } from '@servicetitan/log-service';
4
17
  import { Provider } from '@servicetitan/react-ioc';
5
- import { BASENAME_TOKEN, EXPOSED_DEPENDENCIES_TOKEN, EXPOSED_INSTANCE_DEPENDENCIES_TOKEN, IS_WEB_COMPONENT_TOKEN, RENDER_ROOT_TOKEN, } from './common';
18
+ import { BASENAME_TOKEN, EXPOSED_DEPENDENCIES_TOKEN, EXPOSED_INSTANCE_DEPENDENCIES_TOKEN, IS_WEB_COMPONENT_TOKEN, RENDER_ROOT_TOKEN } from './common';
6
19
  import { MFEDataContext } from './contexts/mfe-data-context';
7
20
  import { MFEMetadataContext } from './contexts/mfe-metadata-context';
8
21
  import { EVENT_BUS_TOKEN } from './event-bus';
@@ -19,239 +32,74 @@ function createLink(url, onLoad) {
19
32
  element.onerror = onLoad;
20
33
  return element;
21
34
  }
22
- const Placeholder = () => _jsx("div", { style: { display: 'none' } });
35
+ const Placeholder = ()=>/*#__PURE__*/ _jsx("div", {
36
+ style: {
37
+ display: 'none'
38
+ }
39
+ });
23
40
  export function register(Component, light, options) {
24
41
  class WebComponent extends HTMLElement {
25
- constructor() {
26
- super(...arguments);
27
- Object.defineProperty(this, "root", {
28
- enumerable: true,
29
- configurable: true,
30
- writable: true,
31
- value: void 0
32
- });
33
- Object.defineProperty(this, "portal", {
34
- enumerable: true,
35
- configurable: true,
36
- writable: true,
37
- value: void 0
38
- });
39
- Object.defineProperty(this, "portalAnvilContainer", {
40
- enumerable: true,
41
- configurable: true,
42
- writable: true,
43
- value: void 0
44
- });
45
- Object.defineProperty(this, "styles", {
46
- enumerable: true,
47
- configurable: true,
48
- writable: true,
49
- value: { total: 0, loaded: 0, elements: [] }
50
- });
51
- Object.defineProperty(this, "ldService", {
52
- enumerable: true,
53
- configurable: true,
54
- writable: true,
55
- value: void 0
56
- });
57
- Object.defineProperty(this, "logService", {
58
- enumerable: true,
59
- configurable: true,
60
- writable: true,
61
- value: void 0
62
- });
63
- Object.defineProperty(this, "historyManager", {
64
- enumerable: true,
65
- configurable: true,
66
- writable: true,
67
- value: void 0
68
- });
69
- Object.defineProperty(this, "exposedDependencies", {
70
- enumerable: true,
71
- configurable: true,
72
- writable: true,
73
- value: void 0
74
- });
75
- Object.defineProperty(this, "exposedInstanceDependencies", {
76
- enumerable: true,
77
- configurable: true,
78
- writable: true,
79
- value: void 0
80
- });
81
- Object.defineProperty(this, "eventBus", {
82
- enumerable: true,
83
- configurable: true,
84
- writable: true,
85
- value: void 0
86
- });
87
- Object.defineProperty(this, "basename", {
88
- enumerable: true,
89
- configurable: true,
90
- writable: true,
91
- value: void 0
92
- });
93
- Object.defineProperty(this, "onReady", {
94
- enumerable: true,
95
- configurable: true,
96
- writable: true,
97
- value: void 0
98
- });
99
- Object.defineProperty(this, "onDispose", {
100
- enumerable: true,
101
- configurable: true,
102
- writable: true,
103
- value: void 0
104
- });
105
- Object.defineProperty(this, "view", {
106
- enumerable: true,
107
- configurable: true,
108
- writable: true,
109
- value: void 0
110
- });
111
- Object.defineProperty(this, "provide", {
112
- enumerable: true,
113
- configurable: true,
114
- writable: true,
115
- value: (entries) => {
116
- for (const [key, value] of Object.entries(entries)) {
117
- this[key] = value;
118
- }
119
- if (this.styles.loaded === this.styles.total && Object.values(entries).some(v => !!v)) {
120
- this.render();
121
- }
122
- }
123
- });
124
- Object.defineProperty(this, "handleLoad", {
125
- enumerable: true,
126
- configurable: true,
127
- writable: true,
128
- value: () => {
129
- this.styles.loaded++;
130
- if (this.styles.loaded === this.styles.total) {
131
- this.render();
132
- }
133
- }
134
- });
135
- Object.defineProperty(this, "attachStyles", {
136
- enumerable: true,
137
- configurable: true,
138
- writable: true,
139
- value: (node, urls) => {
140
- const elements = [];
141
- for (const url of urls) {
142
- const element = createLink(url, this.handleLoad);
143
- node.appendChild(element);
144
- elements.push(element);
145
- }
146
- return elements;
147
- }
148
- });
149
- Object.defineProperty(this, "render", {
150
- enumerable: true,
151
- configurable: true,
152
- writable: true,
153
- value: () => {
154
- var _a;
155
- /*
156
- * Check for this.root first, otherwise we get error when
157
- * attributeChangedCallback happens on load
158
- */
159
- if (this.root) {
160
- const mfeData = this.dataset.mfeData
161
- ? /*
162
- * Data was stringified in order to come through the data-mfe-data attribute
163
- * So we must JSON.parse it here to get an object back
164
- */
165
- JSON.parse(this.dataset.mfeData)
166
- : /*
167
- * If mfeData isn't there, then the Host may not be up to date with web-components
168
- * and is instead passing data through separate data-attributes, so we want to
169
- * spread all of those instead
170
- */
171
- { ...this.dataset };
172
- const metadata = {
173
- shadowRoot: this.root,
174
- portalShadowRoot: this.portal,
175
- };
176
- (_a = this.view) === null || _a === void 0 ? void 0 : _a.rerender(_jsx(Provider, { singletons: [
177
- { provide: IS_WEB_COMPONENT_TOKEN, useValue: true },
178
- { provide: RENDER_ROOT_TOKEN, useValue: this.root },
179
- ], children: _jsx(Provider, { singletons: [
180
- { provide: Log, useValue: this.logService },
181
- {
182
- provide: HistoryManager,
183
- useValue: this.historyManager,
184
- },
185
- {
186
- provide: EXPOSED_DEPENDENCIES_TOKEN,
187
- useValue: this.exposedDependencies,
188
- },
189
- {
190
- provide: EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,
191
- useValue: this.exposedInstanceDependencies,
192
- },
193
- { provide: BASENAME_TOKEN, useValue: this.basename },
194
- { provide: EVENT_BUS_TOKEN, useValue: this.eventBus },
195
- { provide: getLDServiceToken(), useValue: this.ldService },
196
- ].filter(({ provide, useValue }) => useValue !== undefined && provide !== undefined), children: _jsx(MFEDataContext.Provider, { value: { ...mfeData }, children: _jsxs(MFEMetadataContext.Provider, { value: metadata, children: [this.withProviders(_jsx(Component, { ...mfeData })), this.onReady && _jsx(RenderCallback, { callback: this.onReady })] }) }) }) }));
197
- }
198
- }
199
- });
200
- }
201
42
  connectedCallback() {
202
- var _a, _b, _c;
43
+ var _this_root;
203
44
  /*
204
45
  * connectedCallback can be called when DOM element has moved
205
46
  * check that root is still connected to the DOM
206
47
  * if that's the case we don't need to reconnect MFE
207
- */
208
- if ((_a = this.root) === null || _a === void 0 ? void 0 : _a.isConnected) {
48
+ */ if ((_this_root = this.root) === null || _this_root === void 0 ? void 0 : _this_root.isConnected) {
209
49
  return;
210
50
  }
211
- const sharedDependenciesNames = (_b = options === null || options === void 0 ? void 0 : options.sharedDependenciesNames) !== null && _b !== void 0 ? _b : [];
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 : [];
212
53
  const styleUrls = getStyleUrls(light, sharedDependenciesNames, this);
213
54
  this.styles = {
214
55
  total: styleUrls.length * 2,
215
56
  loaded: 0,
216
- elements: [],
57
+ elements: []
217
58
  };
218
- this.root = (_c = this.shadowRoot) !== null && _c !== void 0 ? _c : this.attachShadow({ mode: 'open' });
59
+ var _this_shadowRoot;
60
+ this.root = (_this_shadowRoot = this.shadowRoot) !== null && _this_shadowRoot !== void 0 ? _this_shadowRoot : this.attachShadow({
61
+ mode: 'open'
62
+ });
219
63
  /*
220
64
  * Portal shadow dom is created at the bottom of the body in order to be used as
221
65
  * the element for the design system components to attach modals and popups to.
222
66
  * This element is passed down the tree through context, and used within
223
67
  * the design system components.
224
- */
225
- const portalElement = document.createElement('div');
226
- portalElement.setAttribute('data-mfe-portal-name', getElementName({ WebComponent: WEB_COMPONENT_NAME }));
227
- this.portal = document.body.appendChild(portalElement).attachShadow({ mode: 'open' });
68
+ */ const portalElement = document.createElement('div');
69
+ portalElement.setAttribute('data-mfe-portal-name', getElementName({
70
+ WebComponent: WEB_COMPONENT_NAME
71
+ }));
72
+ this.portal = document.body.appendChild(portalElement).attachShadow({
73
+ mode: 'open'
74
+ });
228
75
  /*
229
76
  * Add element inside of portal so that Anvil 2 can attach modals and popups to it
230
77
  * since floating-ui does not support attaching straight to shadow dom
231
- */
232
- this.portalAnvilContainer = document.createElement('div');
78
+ */ this.portalAnvilContainer = document.createElement('div');
233
79
  this.portal.appendChild(this.portalAnvilContainer);
234
- this.view = render(_jsx(Placeholder, {}), this.root, options);
80
+ this.view = render(/*#__PURE__*/ _jsx(Placeholder, {}), this.root, options);
235
81
  this.styles.elements.push(...this.attachStyles(this.root, styleUrls), ...this.attachStyles(this.portal, styleUrls));
236
82
  }
237
83
  disconnectedCallback() {
238
- var _a, _b, _c;
239
- if (!this.root || ((_a = this.root) === null || _a === void 0 ? void 0 : _a.isConnected)) {
84
+ var _this_root, _this_view, _this_onDispose, _this;
85
+ if (!this.root || ((_this_root = this.root) === null || _this_root === void 0 ? void 0 : _this_root.isConnected)) {
240
86
  return;
241
87
  }
242
- for (const element of this.styles.elements) {
88
+ for (const element of this.styles.elements){
243
89
  element.remove();
244
90
  }
245
- (_b = this.view) === null || _b === void 0 ? void 0 : _b.unmount();
91
+ (_this_view = this.view) === null || _this_view === void 0 ? void 0 : _this_view.unmount();
246
92
  document.body.removeChild(this.portal.host);
247
93
  this.root = undefined;
248
94
  this.portal = undefined;
249
95
  this.portalAnvilContainer = undefined;
250
- (_c = this.onDispose) === null || _c === void 0 ? void 0 : _c.call(this);
96
+ (_this_onDispose = (_this = this).onDispose) === null || _this_onDispose === void 0 ? void 0 : _this_onDispose.call(_this);
251
97
  }
252
98
  // Observe changes to the data-mfe-data attribute so that we can re-render when it changes
253
99
  static get observedAttributes() {
254
- return ['data-mfe-data'];
100
+ return [
101
+ 'data-mfe-data'
102
+ ];
255
103
  }
256
104
  attributeChangedCallback() {
257
105
  this.render();
@@ -261,14 +109,18 @@ export function register(Component, light, options) {
261
109
  /**
262
110
  * Note, the webpack.IgnorePlugin must be configured to ignore this dependency.
263
111
  * @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}
264
- */
265
- const { DefaultPortalContext, TablePopupPropsContext } = require('@servicetitan/design-system');
266
- return (_jsx(DefaultPortalContext.Provider, { value: this.portal, children: _jsx(TablePopupPropsContext.Provider, { value: props => ({
267
- ...props,
268
- appendTo: this.root,
269
- }), children: children }) }));
270
- }
271
- catch (_a) {
112
+ */ const { DefaultPortalContext, TablePopupPropsContext } = require('@servicetitan/design-system');
113
+ return /*#__PURE__*/ _jsx(DefaultPortalContext.Provider, {
114
+ value: this.portal,
115
+ children: /*#__PURE__*/ _jsx(TablePopupPropsContext.Provider, {
116
+ value: (props)=>({
117
+ ...props,
118
+ appendTo: this.root
119
+ }),
120
+ children: children
121
+ })
122
+ });
123
+ } catch (e) {
272
124
  return children;
273
125
  }
274
126
  }
@@ -277,17 +129,126 @@ export function register(Component, light, options) {
277
129
  /**
278
130
  * Note, the webpack.IgnorePlugin must be configured to ignore this dependency.
279
131
  * @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}
280
- */
281
- const { PortalProvider } = require('@servicetitan/anvil2');
282
- return _jsx(PortalProvider, { root: this.portalAnvilContainer, children: children });
283
- }
284
- catch (_a) {
132
+ */ const { PortalProvider } = require('@servicetitan/anvil2');
133
+ return /*#__PURE__*/ _jsx(PortalProvider, {
134
+ root: this.portalAnvilContainer,
135
+ children: children
136
+ });
137
+ } catch (e) {
285
138
  return children;
286
139
  }
287
140
  }
288
141
  withProviders(children) {
289
142
  return this.withAnvil2Providers(this.withAnvil1Providers(children));
290
143
  }
144
+ constructor(...args){
145
+ super(...args), _define_property(this, "root", void 0), _define_property(this, "portal", void 0), _define_property(this, "portalAnvilContainer", void 0), _define_property(this, "styles", {
146
+ total: 0,
147
+ loaded: 0,
148
+ elements: []
149
+ }), _define_property(this, "ldService", void 0), _define_property(this, "logService", void 0), _define_property(this, "historyManager", void 0), _define_property(this, "exposedDependencies", void 0), _define_property(this, "exposedInstanceDependencies", void 0), _define_property(this, "eventBus", void 0), _define_property(this, "basename", void 0), _define_property(this, "onReady", void 0), _define_property(this, "onDispose", void 0), _define_property(this, "view", void 0), _define_property(this, "provide", (entries)=>{
150
+ for (const [key, value] of Object.entries(entries)){
151
+ this[key] = value;
152
+ }
153
+ if (this.styles.loaded === this.styles.total && Object.values(entries).some((v)=>!!v)) {
154
+ this.render();
155
+ }
156
+ }), _define_property(this, "handleLoad", ()=>{
157
+ this.styles.loaded++;
158
+ if (this.styles.loaded === this.styles.total) {
159
+ this.render();
160
+ }
161
+ }), _define_property(this, "attachStyles", (node, urls)=>{
162
+ const elements = [];
163
+ for (const url of urls){
164
+ const element = createLink(url, this.handleLoad);
165
+ node.appendChild(element);
166
+ elements.push(element);
167
+ }
168
+ return elements;
169
+ }), _define_property(this, "render", ()=>{
170
+ /*
171
+ * Check for this.root first, otherwise we get error when
172
+ * attributeChangedCallback happens on load
173
+ */ if (this.root) {
174
+ var _this_view;
175
+ const mfeData = this.dataset.mfeData ? /*
176
+ * Data was stringified in order to come through the data-mfe-data attribute
177
+ * So we must JSON.parse it here to get an object back
178
+ */ JSON.parse(this.dataset.mfeData) : /*
179
+ * If mfeData isn't there, then the Host may not be up to date with web-components
180
+ * and is instead passing data through separate data-attributes, so we want to
181
+ * spread all of those instead
182
+ */ {
183
+ ...this.dataset
184
+ };
185
+ const metadata = {
186
+ shadowRoot: this.root,
187
+ portalShadowRoot: this.portal
188
+ };
189
+ (_this_view = this.view) === null || _this_view === void 0 ? void 0 : _this_view.rerender(/*#__PURE__*/ _jsx(Provider, {
190
+ singletons: [
191
+ {
192
+ provide: IS_WEB_COMPONENT_TOKEN,
193
+ useValue: true
194
+ },
195
+ {
196
+ provide: RENDER_ROOT_TOKEN,
197
+ useValue: this.root
198
+ }
199
+ ],
200
+ children: /*#__PURE__*/ _jsx(Provider, {
201
+ singletons: [
202
+ {
203
+ provide: Log,
204
+ useValue: this.logService
205
+ },
206
+ {
207
+ provide: HistoryManager,
208
+ useValue: this.historyManager
209
+ },
210
+ {
211
+ provide: EXPOSED_DEPENDENCIES_TOKEN,
212
+ useValue: this.exposedDependencies
213
+ },
214
+ {
215
+ provide: EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,
216
+ useValue: this.exposedInstanceDependencies
217
+ },
218
+ {
219
+ provide: BASENAME_TOKEN,
220
+ useValue: this.basename
221
+ },
222
+ {
223
+ provide: EVENT_BUS_TOKEN,
224
+ useValue: this.eventBus
225
+ },
226
+ {
227
+ provide: getLDServiceToken(),
228
+ useValue: this.ldService
229
+ }
230
+ ].filter(({ provide, useValue })=>useValue !== undefined && provide !== undefined),
231
+ children: /*#__PURE__*/ _jsx(MFEDataContext.Provider, {
232
+ value: {
233
+ ...mfeData
234
+ },
235
+ children: /*#__PURE__*/ _jsxs(MFEMetadataContext.Provider, {
236
+ value: metadata,
237
+ children: [
238
+ this.withProviders(/*#__PURE__*/ _jsx(Component, {
239
+ ...mfeData
240
+ })),
241
+ this.onReady && /*#__PURE__*/ _jsx(RenderCallback, {
242
+ callback: this.onReady
243
+ })
244
+ ]
245
+ })
246
+ })
247
+ })
248
+ }));
249
+ }
250
+ });
251
+ }
291
252
  }
292
253
  if (!WEB_COMPONENT_NAME) {
293
254
  // eslint-disable-next-line no-console
@@ -298,24 +259,27 @@ export function register(Component, light, options) {
298
259
  }
299
260
  function getStyleUrls(light, sharedDependenciesNames, el) {
300
261
  function getCssUrl(dependencyName, cssFileRegEx) {
301
- var _a;
302
262
  if (light && sharedDependenciesNames.includes(dependencyName)) {
303
- return (_a = Array.from(document.getElementsByTagName('link')).find(({ href }) => href && cssFileRegEx.test(href))) === null || _a === void 0 ? void 0 : _a.href;
263
+ var _Array_from_find;
264
+ return (_Array_from_find = Array.from(document.getElementsByTagName('link')).find(({ href })=>href && cssFileRegEx.test(href))) === null || _Array_from_find === void 0 ? void 0 : _Array_from_find.href;
304
265
  }
305
266
  }
306
267
  const designSystemUrl = getCssUrl('@servicetitan/design-system', /design-system(\..+)?\.bundle\.css/);
307
268
  const anvil2CssUrl = getCssUrl('@servicetitan/anvil2', /anvil2(\..+)?\.bundle\.css/);
308
269
  return [
309
- ...(designSystemUrl ? [designSystemUrl] : []),
310
- ...(anvil2CssUrl ? [anvil2CssUrl] : []),
311
- ...(el.hasAttribute('style-urls')
312
- ? JSON.parse(decodeURIComponent(el.getAttribute('style-urls')))
313
- : []),
270
+ ...designSystemUrl ? [
271
+ designSystemUrl
272
+ ] : [],
273
+ ...anvil2CssUrl ? [
274
+ anvil2CssUrl
275
+ ] : [],
276
+ ...el.hasAttribute('style-urls') ? JSON.parse(decodeURIComponent(el.getAttribute('style-urls'))) : []
314
277
  ];
315
278
  }
316
279
  function RenderCallback({ callback }) {
317
280
  // eslint-disable-next-line react-hooks/exhaustive-deps
318
- useEffect(() => callback(), []);
281
+ useEffect(()=>callback(), []);
319
282
  return null;
320
283
  }
284
+
321
285
  //# sourceMappingURL=register.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/register.tsx"],"sourcesContent":["import { FC, ComponentType, ReactElement, useEffect } from 'react';\nimport { type LDService } from '@servicetitan/launchdarkly-service';\nimport { Log } from '@servicetitan/log-service';\nimport { Provider } from '@servicetitan/react-ioc';\n\nimport {\n BASENAME_TOKEN,\n EXPOSED_DEPENDENCIES_TOKEN,\n EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,\n IS_WEB_COMPONENT_TOKEN,\n RENDER_ROOT_TOKEN,\n Entries,\n ExposedDependencies,\n ExposedInstanceDependencies,\n IWebComponent,\n} from './common';\nimport { MFEDataContext } from './contexts/mfe-data-context';\nimport { MFEMetadataContext } from './contexts/mfe-metadata-context';\nimport { EventBus, EVENT_BUS_TOKEN } from './event-bus';\nimport { WEB_COMPONENT_NAME } from './globals';\nimport { HistoryManager } from './history-manager';\nimport { render } from './render';\nimport { getElementName, getLDServiceToken } from './utils';\n\nfunction createLink(url: string, onLoad: () => void) {\n const element = document.createElement('link');\n\n element.href = url;\n element.rel = 'stylesheet';\n element.crossOrigin = 'anonymous';\n element.onload = onLoad;\n element.onerror = onLoad;\n\n return element;\n}\n\nconst Placeholder: FC = () => <div style={{ display: 'none' }} />;\n\nexport interface RegisterOptions {\n legacyRoot?: boolean;\n sharedDependenciesNames?: string[];\n}\n\nexport function register(Component: ComponentType, light: boolean, options?: RegisterOptions) {\n class WebComponent extends HTMLElement implements IWebComponent {\n private root?: ShadowRoot;\n private portal?: ShadowRoot;\n private portalAnvilContainer?: HTMLDivElement;\n\n private styles: {\n total: number;\n loaded: number;\n elements: HTMLElement[];\n } = { total: 0, loaded: 0, elements: [] };\n\n private ldService?: LDService;\n private logService?: Log;\n private historyManager?: HistoryManager;\n private exposedDependencies?: ExposedDependencies;\n private exposedInstanceDependencies?: ExposedInstanceDependencies;\n private eventBus?: EventBus;\n private basename?: string;\n private onReady?: () => void;\n private onDispose?: () => void;\n private view?: ReturnType<typeof render>;\n\n connectedCallback() {\n /*\n * connectedCallback can be called when DOM element has moved\n * check that root is still connected to the DOM\n * if that's the case we don't need to reconnect MFE\n */\n if (this.root?.isConnected) {\n return;\n }\n const sharedDependenciesNames = options?.sharedDependenciesNames ?? [];\n const styleUrls = getStyleUrls(light, sharedDependenciesNames, this);\n\n this.styles = {\n total: styleUrls.length * 2,\n loaded: 0,\n elements: [],\n };\n\n this.root = this.shadowRoot ?? this.attachShadow({ mode: 'open' });\n /*\n * Portal shadow dom is created at the bottom of the body in order to be used as\n * the element for the design system components to attach modals and popups to.\n * This element is passed down the tree through context, and used within\n * the design system components.\n */\n const portalElement = document.createElement('div');\n portalElement.setAttribute(\n 'data-mfe-portal-name',\n getElementName({ WebComponent: WEB_COMPONENT_NAME! })\n );\n this.portal = document.body.appendChild(portalElement).attachShadow({ mode: 'open' });\n /*\n * Add element inside of portal so that Anvil 2 can attach modals and popups to it\n * since floating-ui does not support attaching straight to shadow dom\n */\n this.portalAnvilContainer = document.createElement('div');\n this.portal.appendChild(this.portalAnvilContainer);\n\n this.view = render(<Placeholder />, this.root, options);\n\n this.styles.elements.push(\n ...this.attachStyles(this.root, styleUrls),\n ...this.attachStyles(this.portal, styleUrls)\n );\n }\n\n disconnectedCallback() {\n if (!this.root || this.root?.isConnected) {\n return;\n }\n for (const element of this.styles.elements) {\n element.remove();\n }\n\n this.view?.unmount();\n document.body.removeChild(this.portal!.host);\n this.root = undefined;\n this.portal = undefined;\n this.portalAnvilContainer = undefined;\n\n this.onDispose?.();\n }\n\n // Observe changes to the data-mfe-data attribute so that we can re-render when it changes\n static get observedAttributes() {\n return ['data-mfe-data'];\n }\n\n attributeChangedCallback() {\n this.render();\n }\n\n provide = (entries: Entries) => {\n for (const [key, value] of Object.entries(entries)) {\n this[key as keyof IWebComponent] = value;\n }\n\n if (this.styles.loaded === this.styles.total && Object.values(entries).some(v => !!v)) {\n this.render();\n }\n };\n\n private handleLoad = () => {\n this.styles.loaded++;\n\n if (this.styles.loaded === this.styles.total) {\n this.render();\n }\n };\n\n private attachStyles = (node: ShadowRoot, urls: string[]) => {\n const elements: HTMLElement[] = [];\n\n for (const url of urls) {\n const element = createLink(url, this.handleLoad);\n node.appendChild(element);\n elements.push(element);\n }\n\n return elements;\n };\n\n private withAnvil1Providers(children: ReactElement): ReactElement {\n try {\n /**\n * Note, the webpack.IgnorePlugin must be configured to ignore this dependency.\n * @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}\n */\n const { DefaultPortalContext, TablePopupPropsContext } =\n require('@servicetitan/design-system') as typeof import('@servicetitan/design-system');\n return (\n <DefaultPortalContext.Provider value={this.portal as unknown as HTMLElement}>\n <TablePopupPropsContext.Provider\n value={props => ({\n ...props,\n appendTo: this.root as unknown as HTMLElement,\n })}\n >\n {children}\n </TablePopupPropsContext.Provider>\n </DefaultPortalContext.Provider>\n );\n } catch {\n return children;\n }\n }\n\n private withAnvil2Providers(children: ReactElement): ReactElement {\n try {\n /**\n * Note, the webpack.IgnorePlugin must be configured to ignore this dependency.\n * @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}\n */\n const { PortalProvider } =\n require('@servicetitan/anvil2') as typeof import('@servicetitan/anvil2');\n return <PortalProvider root={this.portalAnvilContainer}>{children}</PortalProvider>;\n } catch {\n return children;\n }\n }\n\n private withProviders(children: ReactElement): ReactElement {\n return this.withAnvil2Providers(this.withAnvil1Providers(children));\n }\n\n private render = () => {\n /*\n * Check for this.root first, otherwise we get error when\n * attributeChangedCallback happens on load\n */\n if (this.root) {\n const mfeData = this.dataset.mfeData\n ? /*\n * Data was stringified in order to come through the data-mfe-data attribute\n * So we must JSON.parse it here to get an object back\n */\n JSON.parse(this.dataset.mfeData)\n : /*\n * If mfeData isn't there, then the Host may not be up to date with web-components\n * and is instead passing data through separate data-attributes, so we want to\n * spread all of those instead\n */\n { ...this.dataset };\n\n const metadata = {\n shadowRoot: this.root,\n portalShadowRoot: this.portal!,\n };\n\n this.view?.rerender(\n <Provider\n singletons={[\n { provide: IS_WEB_COMPONENT_TOKEN, useValue: true },\n { provide: RENDER_ROOT_TOKEN, useValue: this.root },\n ]}\n >\n <Provider\n singletons={[\n { provide: Log, useValue: this.logService },\n {\n provide: HistoryManager,\n useValue: this.historyManager,\n },\n {\n provide: EXPOSED_DEPENDENCIES_TOKEN,\n useValue: this.exposedDependencies,\n },\n {\n provide: EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,\n useValue: this.exposedInstanceDependencies,\n },\n { provide: BASENAME_TOKEN, useValue: this.basename },\n { provide: EVENT_BUS_TOKEN, useValue: this.eventBus },\n { provide: getLDServiceToken(), useValue: this.ldService },\n ].filter(\n ({ provide, useValue }) =>\n useValue !== undefined && provide !== undefined\n )}\n >\n <MFEDataContext.Provider value={{ ...mfeData }}>\n <MFEMetadataContext.Provider value={metadata}>\n {this.withProviders(<Component {...mfeData} />)}\n {this.onReady && <RenderCallback callback={this.onReady} />}\n </MFEMetadataContext.Provider>\n </MFEDataContext.Provider>\n </Provider>\n </Provider>\n );\n }\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(WEB_COMPONENT_NAME, WebComponent);\n}\n\nfunction getStyleUrls(light: boolean, sharedDependenciesNames: string[], el: HTMLElement) {\n function getCssUrl(dependencyName: string, cssFileRegEx: RegExp) {\n if (light && sharedDependenciesNames.includes(dependencyName)) {\n return Array.from(document.getElementsByTagName('link')).find(\n ({ href }) => href && cssFileRegEx.test(href)\n )?.href;\n }\n }\n\n const designSystemUrl = getCssUrl(\n '@servicetitan/design-system',\n /design-system(\\..+)?\\.bundle\\.css/\n );\n const anvil2CssUrl = getCssUrl('@servicetitan/anvil2', /anvil2(\\..+)?\\.bundle\\.css/);\n\n return [\n ...(designSystemUrl ? [designSystemUrl] : []),\n ...(anvil2CssUrl ? [anvil2CssUrl] : []),\n ...(el.hasAttribute('style-urls')\n ? JSON.parse(decodeURIComponent(el.getAttribute('style-urls')!))\n : []),\n ];\n}\n\nfunction RenderCallback({ callback }: { callback: () => void }) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => callback(), []);\n return null;\n}\n"],"names":["useEffect","Log","Provider","BASENAME_TOKEN","EXPOSED_DEPENDENCIES_TOKEN","EXPOSED_INSTANCE_DEPENDENCIES_TOKEN","IS_WEB_COMPONENT_TOKEN","RENDER_ROOT_TOKEN","MFEDataContext","MFEMetadataContext","EVENT_BUS_TOKEN","WEB_COMPONENT_NAME","HistoryManager","render","getElementName","getLDServiceToken","createLink","url","onLoad","element","document","createElement","href","rel","crossOrigin","onload","onerror","Placeholder","div","style","display","register","Component","light","options","WebComponent","HTMLElement","connectedCallback","root","isConnected","sharedDependenciesNames","styleUrls","getStyleUrls","styles","total","length","loaded","elements","shadowRoot","attachShadow","mode","portalElement","setAttribute","portal","body","appendChild","portalAnvilContainer","view","push","attachStyles","disconnectedCallback","remove","unmount","removeChild","host","undefined","onDispose","observedAttributes","attributeChangedCallback","withAnvil1Providers","children","DefaultPortalContext","TablePopupPropsContext","require","value","props","appendTo","withAnvil2Providers","PortalProvider","withProviders","ldService","logService","historyManager","exposedDependencies","exposedInstanceDependencies","eventBus","basename","onReady","provide","entries","key","Object","values","some","v","handleLoad","node","urls","mfeData","dataset","JSON","parse","metadata","portalShadowRoot","rerender","singletons","useValue","filter","RenderCallback","callback","console","error","window","customElements","define","el","getCssUrl","dependencyName","cssFileRegEx","includes","Array","from","getElementsByTagName","find","test","designSystemUrl","anvil2CssUrl","hasAttribute","decodeURIComponent","getAttribute"],"mappings":"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"}
package/dist/render.js CHANGED
@@ -1,14 +1,12 @@
1
- import ReactDOM from 'react-dom';
1
+ /* eslint-disable react/no-deprecated */ import ReactDOM from 'react-dom';
2
2
  let createRoot;
3
3
  try {
4
4
  /**
5
5
  * Note, the webpack.IgnorePlugin must be configured to ignore this dependency.
6
6
  * @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}
7
- */
8
- createRoot = require('react-dom/client').createRoot;
9
- }
10
- catch (_a) {
11
- // ignore
7
+ */ createRoot = require('react-dom/client').createRoot;
8
+ } catch (e) {
9
+ // ignore
12
10
  }
13
11
  export function render(element, container, options) {
14
12
  if (typeof createRoot !== 'function' || (options === null || options === void 0 ? void 0 : options.legacyRoot)) {
@@ -17,23 +15,24 @@ export function render(element, container, options) {
17
15
  const root = createRoot(container);
18
16
  root.render(element);
19
17
  return {
20
- rerender(element) {
18
+ rerender (element) {
21
19
  root.render(element);
22
20
  },
23
- unmount() {
21
+ unmount () {
24
22
  root.unmount();
25
- },
23
+ }
26
24
  };
27
25
  }
28
26
  function renderLegacyRoot(element, container) {
29
27
  ReactDOM.render(element, container);
30
28
  return {
31
- rerender(element) {
29
+ rerender (element) {
32
30
  ReactDOM.render(element, container);
33
31
  },
34
- unmount() {
32
+ unmount () {
35
33
  ReactDOM.unmountComponentAtNode(container);
36
- },
34
+ }
37
35
  };
38
36
  }
37
+
39
38
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,IAAI,UAA4C,CAAC;AACjD,IAAI,CAAC;IACD;;;OAGG;IACH,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC;AACxD,CAAC;AAAC,WAAM,CAAC;IACL,SAAS;AACb,CAAC;AAWD,MAAM,UAAU,MAAM,CAClB,OAAqB,EACrB,SAAqC,EACrC,OAAuB;IAEvB,IAAI,OAAO,UAAU,KAAK,UAAU,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAA,EAAE,CAAC;QAC1D,OAAO,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAErB,OAAO;QACH,QAAQ,CAAC,OAAqB;YAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,OAAO;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CACrB,OAAqB,EACrB,SAAqC;IAErC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEpC,OAAO;QACH,QAAQ,CAAC,OAAqB;YAC1B,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;YACH,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"sources":["../src/render.ts"],"sourcesContent":["/* eslint-disable react/no-deprecated */\nimport { ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport type ReactDOMClient from 'react-dom/client';\n\nlet createRoot: typeof ReactDOMClient.createRoot;\ntry {\n /**\n * Note, the webpack.IgnorePlugin must be configured to ignore this dependency.\n * @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}\n */\n createRoot = require('react-dom/client').createRoot;\n} catch {\n // ignore\n}\n\ninterface RenderOptions {\n legacyRoot?: boolean;\n}\n\ninterface RenderResult {\n rerender(element: ReactElement): void;\n unmount(): void;\n}\n\nexport function render(\n element: ReactElement,\n container: Element | DocumentFragment,\n options?: RenderOptions\n): RenderResult {\n if (typeof createRoot !== 'function' || options?.legacyRoot) {\n return renderLegacyRoot(element, container);\n }\n\n const root = createRoot(container);\n root.render(element);\n\n return {\n rerender(element: ReactElement) {\n root.render(element);\n },\n unmount() {\n root.unmount();\n },\n };\n}\n\nfunction renderLegacyRoot(\n element: ReactElement,\n container: Element | DocumentFragment\n): RenderResult {\n ReactDOM.render(element, container);\n\n return {\n rerender(element: ReactElement) {\n ReactDOM.render(element, container);\n },\n unmount() {\n ReactDOM.unmountComponentAtNode(container);\n },\n };\n}\n"],"names":["ReactDOM","createRoot","require","render","element","container","options","legacyRoot","renderLegacyRoot","root","rerender","unmount","unmountComponentAtNode"],"mappings":"AAAA,sCAAsC,GAEtC,OAAOA,cAAc,YAAY;AAGjC,IAAIC;AACJ,IAAI;IACA;;;KAGC,GACDA,aAAaC,QAAQ,oBAAoBD,UAAU;AACvD,EAAE,UAAM;AACJ,SAAS;AACb;AAWA,OAAO,SAASE,OACZC,OAAqB,EACrBC,SAAqC,EACrCC,OAAuB;IAEvB,IAAI,OAAOL,eAAe,eAAcK,oBAAAA,8BAAAA,QAASC,UAAU,GAAE;QACzD,OAAOC,iBAAiBJ,SAASC;IACrC;IAEA,MAAMI,OAAOR,WAAWI;IACxBI,KAAKN,MAAM,CAACC;IAEZ,OAAO;QACHM,UAASN,OAAqB;YAC1BK,KAAKN,MAAM,CAACC;QAChB;QACAO;YACIF,KAAKE,OAAO;QAChB;IACJ;AACJ;AAEA,SAASH,iBACLJ,OAAqB,EACrBC,SAAqC;IAErCL,SAASG,MAAM,CAACC,SAASC;IAEzB,OAAO;QACHK,UAASN,OAAqB;YAC1BJ,SAASG,MAAM,CAACC,SAASC;QAC7B;QACAM;YACIX,SAASY,sBAAsB,CAACP;QACpC;IACJ;AACJ"}
package/dist/types.js CHANGED
@@ -1,2 +1,3 @@
1
- export {};
1
+ export { };
2
+
2
3
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["export type JSONPrimitive = string | number | boolean | null | undefined;\n\nexport type JSON = JSONPrimitive | { [key: string | number]: JSON } | JSON[];\n\nexport type Serializable<T> = {\n [P in keyof T]: T[P] extends JSONPrimitive\n ? T[P]\n : T[P] extends Function | Date | Map<any, any> | Set<any> | symbol\n ? never\n : T[P] extends (infer U)[]\n ? Serializable<U>[]\n : Serializable<T[P]>;\n};\n"],"names":[],"mappings":"AAIA,WAQE"}