@servicetitan/web-components 36.3.0 → 36.4.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.
- package/dist/css-injector/index.d.ts +3 -0
- package/dist/css-injector/index.d.ts.map +1 -0
- package/dist/css-injector/index.js +4 -0
- package/dist/css-injector/index.js.map +1 -0
- package/dist/css-injector/mfe-style-registry.d.ts +14 -0
- package/dist/css-injector/mfe-style-registry.d.ts.map +1 -0
- package/dist/css-injector/mfe-style-registry.js +63 -0
- package/dist/css-injector/mfe-style-registry.js.map +1 -0
- package/dist/css-injector/with-css-injector.d.ts +6 -0
- package/dist/css-injector/with-css-injector.d.ts.map +1 -0
- package/dist/css-injector/with-css-injector.js +38 -0
- package/dist/css-injector/with-css-injector.js.map +1 -0
- package/dist/globals.d.ts +3 -3
- package/dist/globals.d.ts.map +1 -1
- package/dist/globals.js +19 -4
- package/dist/globals.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/register-headless.d.ts.map +1 -1
- package/dist/register-headless.js +1 -0
- package/dist/register-headless.js.map +1 -1
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +43 -37
- package/dist/register.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +2 -2
- package/dist/render.js.map +1 -1
- package/dist/utils/get-bundle-info.d.ts.map +1 -1
- package/dist/utils/get-bundle-info.js +11 -4
- package/dist/utils/get-bundle-info.js.map +1 -1
- package/dist/utils/get-entry-points.d.ts +1 -0
- package/dist/utils/get-entry-points.d.ts.map +1 -1
- package/dist/utils/get-entry-points.js.map +1 -1
- package/package.json +23 -12
- package/src/__mocks__/register-anvil2-harness.tsx +49 -0
- package/src/__mocks__/test-component.tsx +9 -2
- package/src/__tests__/loader.test.tsx +32 -0
- package/src/__tests__/register-anvil2.test.tsx +21 -56
- package/src/css-injector/__tests__/mfe-style-registry.test.ts +163 -0
- package/src/css-injector/__tests__/with-css-injector.test.tsx +128 -0
- package/src/css-injector/index.ts +2 -0
- package/src/css-injector/mfe-style-registry.ts +48 -0
- package/src/css-injector/with-css-injector.tsx +40 -0
- package/src/globals.ts +30 -10
- package/src/index.ts +1 -0
- package/src/register-headless.ts +1 -0
- package/src/register.tsx +54 -43
- package/src/render.ts +2 -3
- package/src/utils/get-bundle-info.ts +12 -5
- package/src/utils/get-entry-points.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/css-injector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/css-injector/index.ts"],"sourcesContent":["export { MfeStyleRegistry } from './mfe-style-registry';\nexport { withCssInjector } from './with-css-injector';\n"],"names":["MfeStyleRegistry","withCssInjector"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,eAAe,QAAQ,sBAAsB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
var __mfeStyles__: Record<string, MfeStyleRegistry> | undefined;
|
|
3
|
+
}
|
|
4
|
+
type StyleRoot = ShadowRoot | Document;
|
|
5
|
+
export declare class MfeStyleRegistry {
|
|
6
|
+
readonly sheets: Map<string, CSSStyleSheet>;
|
|
7
|
+
readonly roots: Set<StyleRoot>;
|
|
8
|
+
static for(componentName: string): MfeStyleRegistry;
|
|
9
|
+
injectSheet(sheetId: string, css: string): void;
|
|
10
|
+
observeRoot(root: StyleRoot): void;
|
|
11
|
+
unobserveRoot(root: StyleRoot): void;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=mfe-style-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mfe-style-registry.d.ts","sourceRoot":"","sources":["../../src/css-injector/mfe-style-registry.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IAEX,IAAI,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAC;CACnE;AAED,KAAK,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEvC,qBAAa,gBAAgB;IACzB,QAAQ,CAAC,MAAM,6BAAoC;IACnD,QAAQ,CAAC,KAAK,iBAAwB;IAGtC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB;IAMnD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAcxC,WAAW,CAAC,IAAI,EAAE,SAAS;IAS3B,aAAa,CAAC,IAAI,EAAE,SAAS;CAMhC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
}
|
|
14
|
+
export class MfeStyleRegistry {
|
|
15
|
+
// Per-component state stored on globalThis.__mfeStyles__ so it survives Vite HMR module reloads.
|
|
16
|
+
static for(componentName) {
|
|
17
|
+
var _globalThis, ___mfeStyles__, _globalThis___mfeStyles__, _componentName, _;
|
|
18
|
+
(___mfeStyles__ = (_globalThis = globalThis).__mfeStyles__) !== null && ___mfeStyles__ !== void 0 ? ___mfeStyles__ : _globalThis.__mfeStyles__ = {};
|
|
19
|
+
(_ = (_globalThis___mfeStyles__ = globalThis.__mfeStyles__)[_componentName = componentName]) !== null && _ !== void 0 ? _ : _globalThis___mfeStyles__[_componentName] = new MfeStyleRegistry();
|
|
20
|
+
return globalThis.__mfeStyles__[componentName];
|
|
21
|
+
}
|
|
22
|
+
injectSheet(sheetId, css) {
|
|
23
|
+
let sheet = this.sheets.get(sheetId);
|
|
24
|
+
if (sheet) {
|
|
25
|
+
sheet.replaceSync(css);
|
|
26
|
+
} else {
|
|
27
|
+
sheet = new CSSStyleSheet();
|
|
28
|
+
sheet.replaceSync(css);
|
|
29
|
+
this.sheets.set(sheetId, sheet);
|
|
30
|
+
for (const root of this.roots){
|
|
31
|
+
root.adoptedStyleSheets = [
|
|
32
|
+
...root.adoptedStyleSheets,
|
|
33
|
+
sheet
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
observeRoot(root) {
|
|
39
|
+
var _root, _adoptedStyleSheets;
|
|
40
|
+
if (this.roots.has(root)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.roots.add(root);
|
|
44
|
+
(_adoptedStyleSheets = (_root = root).adoptedStyleSheets) !== null && _adoptedStyleSheets !== void 0 ? _adoptedStyleSheets : _root.adoptedStyleSheets = [];
|
|
45
|
+
root.adoptedStyleSheets = [
|
|
46
|
+
...root.adoptedStyleSheets,
|
|
47
|
+
...this.sheets.values()
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
unobserveRoot(root) {
|
|
51
|
+
var _root, _adoptedStyleSheets;
|
|
52
|
+
this.roots.delete(root);
|
|
53
|
+
const sheets = new Set(this.sheets.values());
|
|
54
|
+
(_adoptedStyleSheets = (_root = root).adoptedStyleSheets) !== null && _adoptedStyleSheets !== void 0 ? _adoptedStyleSheets : _root.adoptedStyleSheets = [];
|
|
55
|
+
root.adoptedStyleSheets = root.adoptedStyleSheets.filter((s)=>!sheets.has(s));
|
|
56
|
+
}
|
|
57
|
+
constructor(){
|
|
58
|
+
_define_property(this, "sheets", new Map());
|
|
59
|
+
_define_property(this, "roots", new Set());
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=mfe-style-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/css-injector/mfe-style-registry.ts"],"sourcesContent":["declare global {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n var __mfeStyles__: Record<string, MfeStyleRegistry> | undefined;\n}\n\ntype StyleRoot = ShadowRoot | Document;\n\nexport class MfeStyleRegistry {\n readonly sheets = new Map<string, CSSStyleSheet>();\n readonly roots = new Set<StyleRoot>();\n\n // Per-component state stored on globalThis.__mfeStyles__ so it survives Vite HMR module reloads.\n static for(componentName: string): MfeStyleRegistry {\n globalThis.__mfeStyles__ ??= {};\n globalThis.__mfeStyles__[componentName] ??= new MfeStyleRegistry();\n return globalThis.__mfeStyles__[componentName];\n }\n\n injectSheet(sheetId: string, css: string) {\n let sheet = this.sheets.get(sheetId);\n if (sheet) {\n sheet.replaceSync(css);\n } else {\n sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n this.sheets.set(sheetId, sheet);\n for (const root of this.roots) {\n root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];\n }\n }\n }\n\n observeRoot(root: StyleRoot) {\n if (this.roots.has(root)) {\n return;\n }\n this.roots.add(root);\n root.adoptedStyleSheets ??= [];\n root.adoptedStyleSheets = [...root.adoptedStyleSheets, ...this.sheets.values()];\n }\n\n unobserveRoot(root: StyleRoot) {\n this.roots.delete(root);\n const sheets = new Set(this.sheets.values());\n root.adoptedStyleSheets ??= [];\n root.adoptedStyleSheets = root.adoptedStyleSheets.filter(s => !sheets.has(s));\n }\n}\n"],"names":["MfeStyleRegistry","for","componentName","globalThis","__mfeStyles__","injectSheet","sheetId","css","sheet","sheets","get","replaceSync","CSSStyleSheet","set","root","roots","adoptedStyleSheets","observeRoot","has","add","values","unobserveRoot","delete","Set","filter","s","Map"],"mappings":";;;;;;;;;;;;;AAOA,OAAO,MAAMA;IAIT,iGAAiG;IACjG,OAAOC,IAAIC,aAAqB,EAAoB;YAChDC,aAAAA,gBACAA,2BAAyBD,gBAAzBC;SADAA,iBAAAA,CAAAA,cAAAA,YAAWC,aAAa,cAAxBD,4BAAAA,iBAAAA,YAAWC,aAAa,GAAK,CAAC;SAC9BD,IAAAA,CAAAA,4BAAAA,WAAWC,aAAa,CAAA,CAACF,iBAAAA,cAAc,cAAvCC,eAAAA,IAAAA,yBAAwB,CAACD,eAAc,GAAK,IAAIF;QAChD,OAAOG,WAAWC,aAAa,CAACF,cAAc;IAClD;IAEAG,YAAYC,OAAe,EAAEC,GAAW,EAAE;QACtC,IAAIC,QAAQ,IAAI,CAACC,MAAM,CAACC,GAAG,CAACJ;QAC5B,IAAIE,OAAO;YACPA,MAAMG,WAAW,CAACJ;QACtB,OAAO;YACHC,QAAQ,IAAII;YACZJ,MAAMG,WAAW,CAACJ;YAClB,IAAI,CAACE,MAAM,CAACI,GAAG,CAACP,SAASE;YACzB,KAAK,MAAMM,QAAQ,IAAI,CAACC,KAAK,CAAE;gBAC3BD,KAAKE,kBAAkB,GAAG;uBAAIF,KAAKE,kBAAkB;oBAAER;iBAAM;YACjE;QACJ;IACJ;IAEAS,YAAYH,IAAe,EAAE;YAKzBA,OAAAA;QAJA,IAAI,IAAI,CAACC,KAAK,CAACG,GAAG,CAACJ,OAAO;YACtB;QACJ;QACA,IAAI,CAACC,KAAK,CAACI,GAAG,CAACL;SACfA,sBAAAA,CAAAA,QAAAA,MAAKE,kBAAkB,cAAvBF,iCAAAA,sBAAAA,MAAKE,kBAAkB,GAAK,EAAE;QAC9BF,KAAKE,kBAAkB,GAAG;eAAIF,KAAKE,kBAAkB;eAAK,IAAI,CAACP,MAAM,CAACW,MAAM;SAAG;IACnF;IAEAC,cAAcP,IAAe,EAAE;YAG3BA,OAAAA;QAFA,IAAI,CAACC,KAAK,CAACO,MAAM,CAACR;QAClB,MAAML,SAAS,IAAIc,IAAI,IAAI,CAACd,MAAM,CAACW,MAAM;SACzCN,sBAAAA,CAAAA,QAAAA,MAAKE,kBAAkB,cAAvBF,iCAAAA,sBAAAA,MAAKE,kBAAkB,GAAK,EAAE;QAC9BF,KAAKE,kBAAkB,GAAGF,KAAKE,kBAAkB,CAACQ,MAAM,CAACC,CAAAA,IAAK,CAAChB,OAAOS,GAAG,CAACO;IAC9E;;QAtCA,uBAAShB,UAAS,IAAIiB;QACtB,uBAASX,SAAQ,IAAIQ;;AAsCzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-css-injector.d.ts","sourceRoot":"","sources":["../../src/css-injector/with-css-injector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,OAAO,CAAC;AAKvD,OAAO,CAAC,MAAM,CAAC;IAEX,IAAI,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9C;AAMD,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAyB/F"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useLayoutEffect } from 'react';
|
|
3
|
+
import { useMFEMetadataContext } from '../contexts/mfe-metadata-context';
|
|
4
|
+
import { WEB_COMPONENT_NAME } from '../globals';
|
|
5
|
+
import { MfeStyleRegistry } from './mfe-style-registry';
|
|
6
|
+
/*
|
|
7
|
+
* HOC wrapping the MFE's root component in register(). Adopts sheets from the registry into
|
|
8
|
+
* the MFE's shadow roots. Only active in development; eliminated by Vite in production builds.
|
|
9
|
+
*/ export function withCssInjector(Component) {
|
|
10
|
+
if (process.env.NODE_ENV === 'production') {
|
|
11
|
+
return Component;
|
|
12
|
+
}
|
|
13
|
+
return function CssInjectorWrapper(props) {
|
|
14
|
+
const { shadowRoot, portalShadowRoot } = useMFEMetadataContext();
|
|
15
|
+
useLayoutEffect(()=>{
|
|
16
|
+
const registry = MfeStyleRegistry.for(WEB_COMPONENT_NAME);
|
|
17
|
+
const roots = [
|
|
18
|
+
shadowRoot,
|
|
19
|
+
portalShadowRoot,
|
|
20
|
+
...globalThis.__mfeSelfHosted__ ? [
|
|
21
|
+
document
|
|
22
|
+
] : []
|
|
23
|
+
];
|
|
24
|
+
roots.forEach((root)=>registry.observeRoot(root));
|
|
25
|
+
return ()=>{
|
|
26
|
+
roots.forEach((root)=>registry.unobserveRoot(root));
|
|
27
|
+
};
|
|
28
|
+
}, [
|
|
29
|
+
shadowRoot,
|
|
30
|
+
portalShadowRoot
|
|
31
|
+
]);
|
|
32
|
+
return /*#__PURE__*/ _jsx(Component, {
|
|
33
|
+
...props
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=with-css-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/css-injector/with-css-injector.tsx"],"sourcesContent":["import { ComponentType, useLayoutEffect } from 'react';\nimport { useMFEMetadataContext } from '../contexts/mfe-metadata-context';\nimport { WEB_COMPONENT_NAME } from '../globals';\nimport { MfeStyleRegistry } from './mfe-style-registry';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n var __mfeSelfHosted__: boolean | undefined;\n}\n\n/*\n * HOC wrapping the MFE's root component in register(). Adopts sheets from the registry into\n * the MFE's shadow roots. Only active in development; eliminated by Vite in production builds.\n */\nexport function withCssInjector<P extends object>(Component: ComponentType<P>): ComponentType<P> {\n if (process.env.NODE_ENV === 'production') {\n return Component;\n }\n\n return function CssInjectorWrapper(props: P) {\n const { shadowRoot, portalShadowRoot } = useMFEMetadataContext();\n\n useLayoutEffect(() => {\n const registry = MfeStyleRegistry.for(WEB_COMPONENT_NAME);\n const roots = [\n shadowRoot,\n portalShadowRoot,\n ...(globalThis.__mfeSelfHosted__ ? [document] : []),\n ];\n\n roots.forEach(root => registry.observeRoot(root));\n\n return () => {\n roots.forEach(root => registry.unobserveRoot(root));\n };\n }, [shadowRoot, portalShadowRoot]);\n\n return <Component {...props} />;\n };\n}\n"],"names":["useLayoutEffect","useMFEMetadataContext","WEB_COMPONENT_NAME","MfeStyleRegistry","withCssInjector","Component","process","env","NODE_ENV","CssInjectorWrapper","props","shadowRoot","portalShadowRoot","registry","for","roots","globalThis","__mfeSelfHosted__","document","forEach","root","observeRoot","unobserveRoot"],"mappings":";AAAA,SAAwBA,eAAe,QAAQ,QAAQ;AACvD,SAASC,qBAAqB,QAAQ,mCAAmC;AACzE,SAASC,kBAAkB,QAAQ,aAAa;AAChD,SAASC,gBAAgB,QAAQ,uBAAuB;AAOxD;;;CAGC,GACD,OAAO,SAASC,gBAAkCC,SAA2B;IACzE,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;QACvC,OAAOH;IACX;IAEA,OAAO,SAASI,mBAAmBC,KAAQ;QACvC,MAAM,EAAEC,UAAU,EAAEC,gBAAgB,EAAE,GAAGX;QAEzCD,gBAAgB;YACZ,MAAMa,WAAWV,iBAAiBW,GAAG,CAACZ;YACtC,MAAMa,QAAQ;gBACVJ;gBACAC;mBACII,WAAWC,iBAAiB,GAAG;oBAACC;iBAAS,GAAG,EAAE;aACrD;YAEDH,MAAMI,OAAO,CAACC,CAAAA,OAAQP,SAASQ,WAAW,CAACD;YAE3C,OAAO;gBACHL,MAAMI,OAAO,CAACC,CAAAA,OAAQP,SAASS,aAAa,CAACF;YACjD;QACJ,GAAG;YAACT;YAAYC;SAAiB;QAEjC,qBAAO,KAACP;YAAW,GAAGK,KAAK;;IAC/B;AACJ"}
|
package/dist/globals.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ declare global {
|
|
|
5
5
|
export const EXPOSED_INSTANCE_DEPENDENCIES: ExposedInstanceDependencies | undefined;
|
|
6
6
|
export const WEB_COMPONENT_NAME: string | undefined;
|
|
7
7
|
}
|
|
8
|
-
declare const _EXPOSED_DEPENDENCIES:
|
|
9
|
-
declare const _WEB_COMPONENT_NAME:
|
|
10
|
-
declare const _EXPOSED_INSTANCE_DEPENDENCIES:
|
|
8
|
+
declare const _EXPOSED_DEPENDENCIES: any;
|
|
9
|
+
declare const _WEB_COMPONENT_NAME: any;
|
|
10
|
+
declare const _EXPOSED_INSTANCE_DEPENDENCIES: any;
|
|
11
11
|
export { _EXPOSED_DEPENDENCIES as EXPOSED_DEPENDENCIES, _EXPOSED_INSTANCE_DEPENDENCIES as EXPOSED_INSTANCE_DEPENDENCIES, _WEB_COMPONENT_NAME as WEB_COMPONENT_NAME, };
|
|
12
12
|
//# sourceMappingURL=globals.d.ts.map
|
package/dist/globals.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,CAAC,MAAM,CAAC;IACX,MAAM,CAAC,MAAM,oBAAoB,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACnE,MAAM,CAAC,MAAM,6BAA6B,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACpF,MAAM,CAAC,MAAM,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;CACvD;AAiBD,QAAA,MAAM,qBAAqB,KAMrB,CAAC;AAEP,QAAA,MAAM,mBAAmB,KAMnB,CAAC;AACP,QAAA,MAAM,8BAA8B,KAM9B,CAAC;AAEP,OAAO,EACH,qBAAqB,IAAI,oBAAoB,EAC7C,8BAA8B,IAAI,6BAA6B,EAC/D,mBAAmB,IAAI,kBAAkB,GAC5C,CAAC"}
|
package/dist/globals.js
CHANGED
|
@@ -1,18 +1,33 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/naming-convention */
|
|
1
|
+
/* eslint-disable @typescript-eslint/naming-convention */ // eslint-disable-next-line spaced-comment
|
|
2
|
+
/// <reference types="vite/client" /> — provides types for import.meta.env
|
|
3
|
+
var _get, _get1, _get2;
|
|
4
|
+
/*
|
|
5
|
+
* Safely access a value that may not exist. Returns undefined instead of
|
|
6
|
+
* throwing a ReferenceError. Used below to try global constants first
|
|
7
|
+
* (set by webpack DefinePlugin), then fall back to import.meta.env
|
|
8
|
+
* (set by Vite's define config). One of these will always be defined
|
|
9
|
+
* depending on which bundler built the code.
|
|
10
|
+
*/ function get(fetch) {
|
|
2
11
|
try {
|
|
3
12
|
return fetch();
|
|
4
13
|
} catch (unused) {
|
|
5
14
|
return undefined;
|
|
6
15
|
}
|
|
7
16
|
}
|
|
8
|
-
const _EXPOSED_DEPENDENCIES = get(()=>{
|
|
17
|
+
const _EXPOSED_DEPENDENCIES = (_get = get(()=>{
|
|
9
18
|
return EXPOSED_DEPENDENCIES;
|
|
19
|
+
})) !== null && _get !== void 0 ? _get : get(()=>{
|
|
20
|
+
return import.meta.env.EXPOSED_DEPENDENCIES;
|
|
10
21
|
});
|
|
11
|
-
const _WEB_COMPONENT_NAME = get(()=>{
|
|
22
|
+
const _WEB_COMPONENT_NAME = (_get1 = get(()=>{
|
|
12
23
|
return WEB_COMPONENT_NAME;
|
|
24
|
+
})) !== null && _get1 !== void 0 ? _get1 : get(()=>{
|
|
25
|
+
return import.meta.env.WEB_COMPONENT_NAME;
|
|
13
26
|
});
|
|
14
|
-
const _EXPOSED_INSTANCE_DEPENDENCIES = get(()=>{
|
|
27
|
+
const _EXPOSED_INSTANCE_DEPENDENCIES = (_get2 = get(()=>{
|
|
15
28
|
return EXPOSED_INSTANCE_DEPENDENCIES;
|
|
29
|
+
})) !== null && _get2 !== void 0 ? _get2 : get(()=>{
|
|
30
|
+
return import.meta.env.EXPOSED_INSTANCE_DEPENDENCIES;
|
|
16
31
|
});
|
|
17
32
|
export { _EXPOSED_DEPENDENCIES as EXPOSED_DEPENDENCIES, _EXPOSED_INSTANCE_DEPENDENCIES as EXPOSED_INSTANCE_DEPENDENCIES, _WEB_COMPONENT_NAME as WEB_COMPONENT_NAME };
|
|
18
33
|
|
package/dist/globals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/globals.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { ExposedDependencies } from '@servicetitan/startup-utils';\nimport { ExposedInstanceDependencies } from './common';\n\ndeclare global {\n export const EXPOSED_DEPENDENCIES: ExposedDependencies | undefined;\n export const EXPOSED_INSTANCE_DEPENDENCIES: ExposedInstanceDependencies | undefined;\n export const WEB_COMPONENT_NAME: string | undefined;\n}\n\nfunction get<T>(fetch: () => T) {\n try {\n return fetch();\n } catch {\n return undefined;\n }\n}\n\nconst _EXPOSED_DEPENDENCIES
|
|
1
|
+
{"version":3,"sources":["../src/globals.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\n// eslint-disable-next-line spaced-comment\n/// <reference types=\"vite/client\" /> — provides types for import.meta.env\nimport { ExposedDependencies } from '@servicetitan/startup-utils';\nimport { ExposedInstanceDependencies } from './common';\n\ndeclare global {\n export const EXPOSED_DEPENDENCIES: ExposedDependencies | undefined;\n export const EXPOSED_INSTANCE_DEPENDENCIES: ExposedInstanceDependencies | undefined;\n export const WEB_COMPONENT_NAME: string | undefined;\n}\n\n/*\n * Safely access a value that may not exist. Returns undefined instead of\n * throwing a ReferenceError. Used below to try global constants first\n * (set by webpack DefinePlugin), then fall back to import.meta.env\n * (set by Vite's define config). One of these will always be defined\n * depending on which bundler built the code.\n */\nfunction get<T>(fetch: () => T) {\n try {\n return fetch();\n } catch {\n return undefined;\n }\n}\n\nconst _EXPOSED_DEPENDENCIES =\n get(() => {\n return EXPOSED_DEPENDENCIES;\n }) ??\n get(() => {\n return import.meta.env.EXPOSED_DEPENDENCIES;\n });\n\nconst _WEB_COMPONENT_NAME =\n get(() => {\n return WEB_COMPONENT_NAME;\n }) ??\n get(() => {\n return import.meta.env.WEB_COMPONENT_NAME;\n });\nconst _EXPOSED_INSTANCE_DEPENDENCIES =\n get(() => {\n return EXPOSED_INSTANCE_DEPENDENCIES;\n }) ??\n get(() => {\n return import.meta.env.EXPOSED_INSTANCE_DEPENDENCIES;\n });\n\nexport {\n _EXPOSED_DEPENDENCIES as EXPOSED_DEPENDENCIES,\n _EXPOSED_INSTANCE_DEPENDENCIES as EXPOSED_INSTANCE_DEPENDENCIES,\n _WEB_COMPONENT_NAME as WEB_COMPONENT_NAME,\n};\n"],"names":["get","fetch","undefined","_EXPOSED_DEPENDENCIES","EXPOSED_DEPENDENCIES","env","_WEB_COMPONENT_NAME","WEB_COMPONENT_NAME","_EXPOSED_INSTANCE_DEPENDENCIES","EXPOSED_INSTANCE_DEPENDENCIES"],"mappings":"AAAA,uDAAuD,GACvD,0CAA0C;AAC1C,0EAA0E;IA0BtEA,MAQAA,OAOAA;AA/BJ;;;;;;CAMC,GACD,SAASA,IAAOC,KAAc;IAC1B,IAAI;QACA,OAAOA;IACX,EAAE,eAAM;QACJ,OAAOC;IACX;AACJ;AAEA,MAAMC,yBACFH,OAAAA,IAAI;IACA,OAAOI;AACX,gBAFAJ,kBAAAA,OAGAA,IAAI;IACA,OAAO,YAAYK,GAAG,CAACD,oBAAoB;AAC/C;AAEJ,MAAME,uBACFN,QAAAA,IAAI;IACA,OAAOO;AACX,gBAFAP,mBAAAA,QAGAA,IAAI;IACA,OAAO,YAAYK,GAAG,CAACE,kBAAkB;AAC7C;AACJ,MAAMC,kCACFR,QAAAA,IAAI;IACA,OAAOS;AACX,gBAFAT,mBAAAA,QAGAA,IAAI;IACA,OAAO,YAAYK,GAAG,CAACI,6BAA6B;AACxD;AAEJ,SACIN,yBAAyBC,oBAAoB,EAC7CI,kCAAkCC,6BAA6B,EAC/DH,uBAAuBC,kBAAkB,GAC3C"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAE/B,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAE/B,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './common';\nexport * from './contexts';\nexport * from './event-bus';\nexport * from './get-value-for-environment';\nexport * from './headless-loader';\nexport * from './history-manager';\nexport * from './loader';\nexport * from './register';\nexport * from './register-headless';\nexport * from './use-prefetch';\n\nexport type { JSON, JSONPrimitive, Serializable } from './types';\n"],"names":[],"mappings":"AAAA,cAAc,WAAW;AACzB,cAAc,aAAa;AAC3B,cAAc,cAAc;AAC5B,cAAc,8BAA8B;AAC5C,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,WAAW;AACzB,cAAc,aAAa;AAC3B,cAAc,sBAAsB;AACpC,cAAc,iBAAiB"}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './common';\nexport * from './contexts';\nexport * from './css-injector';\nexport * from './event-bus';\nexport * from './get-value-for-environment';\nexport * from './headless-loader';\nexport * from './history-manager';\nexport * from './loader';\nexport * from './register';\nexport * from './register-headless';\nexport * from './use-prefetch';\n\nexport type { JSON, JSONPrimitive, Serializable } from './types';\n"],"names":[],"mappings":"AAAA,cAAc,WAAW;AACzB,cAAc,aAAa;AAC3B,cAAc,iBAAiB;AAC/B,cAAc,cAAc;AAC5B,cAAc,8BAA8B;AAC5C,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,WAAW;AACzB,cAAc,aAAa;AAC3B,cAAc,sBAAsB;AACpC,cAAc,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-headless.d.ts","sourceRoot":"","sources":["../src/register-headless.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"register-headless.d.ts","sourceRoot":"","sources":["../src/register-headless.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,oBAAoB,CAAC,QAAQ,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAC7E,OAAO,EACP,WAAW,GAAG,YAAY,CAC7B,GAAG;IACA,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,gBAAgB,CAAC,QAAQ,GAAG,GAAG,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,CAClF,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,IAAI,CAAC;AAEV,wBAAgB,gBAAgB,CAC5B,iBAAiB,CAAC,EAAE,gBAAgB,EACpC,oBAAoB,CAAC,EAAE,gBAAgB,QAmE1C"}
|
|
@@ -11,6 +11,7 @@ function _define_property(obj, key, value) {
|
|
|
11
11
|
}
|
|
12
12
|
return obj;
|
|
13
13
|
}
|
|
14
|
+
import { WEB_COMPONENT_NAME } from './globals';
|
|
14
15
|
export function registerHeadless(connectedCallback, disconnectedCallback) {
|
|
15
16
|
class Headless extends HTMLElement {
|
|
16
17
|
async connectedCallback() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/register-headless.ts"],"sourcesContent":["import type { LDService } from '@servicetitan/launchdarkly-service';\nimport type { Log } from '@servicetitan/log-service';\nimport type { Entries, IWebComponent } from './common';\nimport type { EventBus } from './event-bus';\nimport { Serializable } from './types';\n\ntype HeadlessCallbackArgs<TMfeData, TEventBus extends EventBus = EventBus> = Pick<\n Entries,\n 'ldService' | 'logService'\n> & {\n eventBus?: TEventBus;\n mfeData?: Serializable<TMfeData>;\n};\nexport type HeadlessCallback<TMfeData = any, TEventBus extends EventBus = EventBus> = (\n params: HeadlessCallbackArgs<TMfeData, TEventBus>\n) => void;\n\nexport function registerHeadless(\n connectedCallback?: HeadlessCallback,\n disconnectedCallback?: HeadlessCallback\n) {\n class Headless extends HTMLElement implements IWebComponent {\n private ldService?: LDService;\n private logService?: Log;\n private eventBus?: EventBus;\n private readonly readyPromise: Promise<void>;\n private resolveReadyPromise!: () => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise(resolve => {\n this.resolveReadyPromise = resolve;\n });\n }\n\n provide = (entries: Entries) => {\n this.ldService = entries.ldService;\n this.logService = entries.logService;\n this.eventBus = entries.eventBus;\n this.resolveReadyPromise();\n };\n\n async connectedCallback() {\n await this.readyPromise;\n connectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n async disconnectedCallback() {\n await this.readyPromise;\n disconnectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n connectedMoveCallback() {\n /*\n * Defining connectedMoveCallback prevents connectedCallback or disconnectedCallback\n * from running when the element is moved in the DOM\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\n }\n\n private get services() {\n return {\n ldService: this.ldService,\n logService: this.logService,\n eventBus: this.eventBus,\n };\n }\n\n private get mfeData() {\n return JSON.parse(this.dataset.mfeData ?? '{}');\n }\n }\n\n if (!WEB_COMPONENT_NAME) {\n // eslint-disable-next-line no-console\n console.error('\"WEB_COMPONENT_NAME\" is not defined!');\n return;\n }\n\n window.customElements.define(`headless-${WEB_COMPONENT_NAME}`, Headless);\n}\n"],"names":["registerHeadless","connectedCallback","disconnectedCallback","Headless","HTMLElement","readyPromise","services","mfeData","connectedMoveCallback","ldService","logService","eventBus","JSON","parse","dataset","resolveReadyPromise","provide","entries","Promise","resolve","
|
|
1
|
+
{"version":3,"sources":["../src/register-headless.ts"],"sourcesContent":["import type { LDService } from '@servicetitan/launchdarkly-service';\nimport type { Log } from '@servicetitan/log-service';\nimport type { Entries, IWebComponent } from './common';\nimport type { EventBus } from './event-bus';\nimport { WEB_COMPONENT_NAME } from './globals';\nimport { Serializable } from './types';\n\ntype HeadlessCallbackArgs<TMfeData, TEventBus extends EventBus = EventBus> = Pick<\n Entries,\n 'ldService' | 'logService'\n> & {\n eventBus?: TEventBus;\n mfeData?: Serializable<TMfeData>;\n};\nexport type HeadlessCallback<TMfeData = any, TEventBus extends EventBus = EventBus> = (\n params: HeadlessCallbackArgs<TMfeData, TEventBus>\n) => void;\n\nexport function registerHeadless(\n connectedCallback?: HeadlessCallback,\n disconnectedCallback?: HeadlessCallback\n) {\n class Headless extends HTMLElement implements IWebComponent {\n private ldService?: LDService;\n private logService?: Log;\n private eventBus?: EventBus;\n private readonly readyPromise: Promise<void>;\n private resolveReadyPromise!: () => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise(resolve => {\n this.resolveReadyPromise = resolve;\n });\n }\n\n provide = (entries: Entries) => {\n this.ldService = entries.ldService;\n this.logService = entries.logService;\n this.eventBus = entries.eventBus;\n this.resolveReadyPromise();\n };\n\n async connectedCallback() {\n await this.readyPromise;\n connectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n async disconnectedCallback() {\n await this.readyPromise;\n disconnectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n connectedMoveCallback() {\n /*\n * Defining connectedMoveCallback prevents connectedCallback or disconnectedCallback\n * from running when the element is moved in the DOM\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\n }\n\n private get services() {\n return {\n ldService: this.ldService,\n logService: this.logService,\n eventBus: this.eventBus,\n };\n }\n\n private get mfeData() {\n return JSON.parse(this.dataset.mfeData ?? '{}');\n }\n }\n\n if (!WEB_COMPONENT_NAME) {\n // eslint-disable-next-line no-console\n console.error('\"WEB_COMPONENT_NAME\" is not defined!');\n return;\n }\n\n window.customElements.define(`headless-${WEB_COMPONENT_NAME}`, Headless);\n}\n"],"names":["WEB_COMPONENT_NAME","registerHeadless","connectedCallback","disconnectedCallback","Headless","HTMLElement","readyPromise","services","mfeData","connectedMoveCallback","ldService","logService","eventBus","JSON","parse","dataset","resolveReadyPromise","provide","entries","Promise","resolve","console","error","window","customElements","define"],"mappings":";;;;;;;;;;;;;AAIA,SAASA,kBAAkB,QAAQ,YAAY;AAc/C,OAAO,SAASC,iBACZC,iBAAoC,EACpCC,oBAAuC;IAEvC,MAAMC,iBAAiBC;QAqBnB,MAAMH,oBAAoB;YACtB,MAAM,IAAI,CAACI,YAAY;YACvBJ,8BAAAA,wCAAAA,kBAAoB;gBAChB,GAAG,IAAI,CAACK,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEA,MAAML,uBAAuB;YACzB,MAAM,IAAI,CAACG,YAAY;YACvBH,iCAAAA,2CAAAA,qBAAuB;gBACnB,GAAG,IAAI,CAACI,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEAC,wBAAwB;QACpB;;;;aAIC,GACL;QAEA,IAAYF,WAAW;YACnB,OAAO;gBACHG,WAAW,IAAI,CAACA,SAAS;gBACzBC,YAAY,IAAI,CAACA,UAAU;gBAC3BC,UAAU,IAAI,CAACA,QAAQ;YAC3B;QACJ;QAEA,IAAYJ,UAAU;gBACA;YAAlB,OAAOK,KAAKC,KAAK,EAAC,wBAAA,IAAI,CAACC,OAAO,CAACP,OAAO,cAApB,mCAAA,wBAAwB;QAC9C;QAhDA,aAAc;YACV,KAAK,IAPT,uBAAQE,aAAR,KAAA,IACA,uBAAQC,cAAR,KAAA,IACA,uBAAQC,YAAR,KAAA,IACA,uBAAiBN,gBAAjB,KAAA,IACA,uBAAQU,uBAAR,KAAA,IASAC,uBAAAA,WAAU,CAACC;gBACP,IAAI,CAACR,SAAS,GAAGQ,QAAQR,SAAS;gBAClC,IAAI,CAACC,UAAU,GAAGO,QAAQP,UAAU;gBACpC,IAAI,CAACC,QAAQ,GAAGM,QAAQN,QAAQ;gBAChC,IAAI,CAACI,mBAAmB;YAC5B;YAVI,IAAI,CAACV,YAAY,GAAG,IAAIa,QAAQC,CAAAA;gBAC5B,IAAI,CAACJ,mBAAmB,GAAGI;YAC/B;QACJ;IA4CJ;IAEA,IAAI,CAACpB,oBAAoB;QACrB,sCAAsC;QACtCqB,QAAQC,KAAK,CAAC;QACd;IACJ;IAEAC,OAAOC,cAAc,CAACC,MAAM,CAAC,CAAC,SAAS,EAAEzB,oBAAoB,EAAEI;AACnE"}
|
package/dist/register.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAA+
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAA+D,MAAM,OAAO,CAAC;AAkCnG,MAAM,WAAW,eAAe;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC;AA2CD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,QAmN3F"}
|
package/dist/register.js
CHANGED
|
@@ -14,10 +14,11 @@ function _define_property(obj, key, value) {
|
|
|
14
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
15
|
import { Log } from '@servicetitan/log-service';
|
|
16
16
|
import { Provider } from '@servicetitan/react-ioc';
|
|
17
|
-
import { useEffect } from 'react';
|
|
17
|
+
import { useCallback, useEffect } from 'react';
|
|
18
18
|
import { BASENAME_TOKEN, EXPOSED_DEPENDENCIES_TOKEN, EXPOSED_INSTANCE_DEPENDENCIES_TOKEN, IS_WEB_COMPONENT_TOKEN, RENDER_ROOT_TOKEN } from './common';
|
|
19
19
|
import { MFEDataContext } from './contexts/mfe-data-context';
|
|
20
20
|
import { MFEMetadataContext } from './contexts/mfe-metadata-context';
|
|
21
|
+
import { withCssInjector } from './css-injector';
|
|
21
22
|
import { EVENT_BUS_TOKEN } from './event-bus';
|
|
22
23
|
import { WEB_COMPONENT_NAME } from './globals';
|
|
23
24
|
import { HistoryManager } from './history-manager';
|
|
@@ -37,7 +38,39 @@ const Placeholder = ()=>/*#__PURE__*/ _jsx("div", {
|
|
|
37
38
|
display: 'none'
|
|
38
39
|
}
|
|
39
40
|
});
|
|
41
|
+
const Anvil1Providers = ({ root, portal, children })=>{
|
|
42
|
+
const getTablePopupProps = useCallback((props)=>({
|
|
43
|
+
...props,
|
|
44
|
+
appendTo: root
|
|
45
|
+
}), [
|
|
46
|
+
root
|
|
47
|
+
]);
|
|
48
|
+
try {
|
|
49
|
+
const { DefaultPortalContext, TablePopupPropsContext } = require('@servicetitan/design-system');
|
|
50
|
+
return /*#__PURE__*/ _jsx(DefaultPortalContext.Provider, {
|
|
51
|
+
value: portal,
|
|
52
|
+
children: /*#__PURE__*/ _jsx(TablePopupPropsContext.Provider, {
|
|
53
|
+
value: getTablePopupProps,
|
|
54
|
+
children: children
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
} catch (unused) {
|
|
58
|
+
return children;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const Anvil2Providers = ({ portalAnvilContainer, children })=>{
|
|
62
|
+
try {
|
|
63
|
+
const { PortalProvider } = require('@servicetitan/anvil2');
|
|
64
|
+
return /*#__PURE__*/ _jsx(PortalProvider, {
|
|
65
|
+
root: portalAnvilContainer,
|
|
66
|
+
children: children
|
|
67
|
+
});
|
|
68
|
+
} catch (unused) {
|
|
69
|
+
return children;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
40
72
|
export function register(Component, light, options) {
|
|
73
|
+
const WrappedComponent = withCssInjector(Component);
|
|
41
74
|
class WebComponent extends HTMLElement {
|
|
42
75
|
connectedCallback() {
|
|
43
76
|
var _ref, _this_shadowRoot;
|
|
@@ -103,42 +136,15 @@ export function register(Component, light, options) {
|
|
|
103
136
|
attributeChangedCallback() {
|
|
104
137
|
this.render();
|
|
105
138
|
}
|
|
106
|
-
withAnvil1Providers(children) {
|
|
107
|
-
try {
|
|
108
|
-
/**
|
|
109
|
-
* Note, the webpack.IgnorePlugin must be configured to ignore this dependency.
|
|
110
|
-
* @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}
|
|
111
|
-
*/ const { DefaultPortalContext, TablePopupPropsContext } = require('@servicetitan/design-system');
|
|
112
|
-
return /*#__PURE__*/ _jsx(DefaultPortalContext.Provider, {
|
|
113
|
-
value: this.portal,
|
|
114
|
-
children: /*#__PURE__*/ _jsx(TablePopupPropsContext.Provider, {
|
|
115
|
-
value: (props)=>({
|
|
116
|
-
...props,
|
|
117
|
-
appendTo: this.root
|
|
118
|
-
}),
|
|
119
|
-
children: children
|
|
120
|
-
})
|
|
121
|
-
});
|
|
122
|
-
} catch (unused) {
|
|
123
|
-
return children;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
withAnvil2Providers(children) {
|
|
127
|
-
try {
|
|
128
|
-
/**
|
|
129
|
-
* Note, the webpack.IgnorePlugin must be configured to ignore this dependency.
|
|
130
|
-
* @see {@link file://./../../startup/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts}
|
|
131
|
-
*/ const { PortalProvider } = require('@servicetitan/anvil2');
|
|
132
|
-
return /*#__PURE__*/ _jsx(PortalProvider, {
|
|
133
|
-
root: this.portalAnvilContainer,
|
|
134
|
-
children: children
|
|
135
|
-
});
|
|
136
|
-
} catch (unused) {
|
|
137
|
-
return children;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
139
|
withProviders(children) {
|
|
141
|
-
return
|
|
140
|
+
return /*#__PURE__*/ _jsx(Anvil2Providers, {
|
|
141
|
+
portalAnvilContainer: this.portalAnvilContainer,
|
|
142
|
+
children: /*#__PURE__*/ _jsx(Anvil1Providers, {
|
|
143
|
+
root: this.root,
|
|
144
|
+
portal: this.portal,
|
|
145
|
+
children: children
|
|
146
|
+
})
|
|
147
|
+
});
|
|
142
148
|
}
|
|
143
149
|
constructor(...args){
|
|
144
150
|
super(...args), _define_property(this, "root", void 0), _define_property(this, "portal", void 0), _define_property(this, "portalAnvilContainer", void 0), _define_property(this, "styles", {
|
|
@@ -234,7 +240,7 @@ export function register(Component, light, options) {
|
|
|
234
240
|
children: /*#__PURE__*/ _jsxs(MFEMetadataContext.Provider, {
|
|
235
241
|
value: metadata,
|
|
236
242
|
children: [
|
|
237
|
-
this.withProviders(/*#__PURE__*/ _jsx(
|
|
243
|
+
this.withProviders(/*#__PURE__*/ _jsx(WrappedComponent, {
|
|
238
244
|
...mfeData
|
|
239
245
|
})),
|
|
240
246
|
this.onReady && /*#__PURE__*/ _jsx(RenderCallback, {
|
package/dist/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/register.tsx"],"sourcesContent":["import { type LDService } from '@servicetitan/launchdarkly-service';\nimport { Log } from '@servicetitan/log-service';\nimport { Provider } from '@servicetitan/react-ioc';\nimport { ExposedDependencies } from '@servicetitan/startup-utils';\nimport { ComponentType, FC, ReactElement, useEffect } from 'react';\nimport {\n BASENAME_TOKEN,\n Entries,\n EXPOSED_DEPENDENCIES_TOKEN,\n EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,\n ExposedInstanceDependencies,\n IS_WEB_COMPONENT_TOKEN,\n IWebComponent,\n RENDER_ROOT_TOKEN,\n} from './common';\nimport { MFEDataContext } from './contexts/mfe-data-context';\nimport { MFEMetadataContext } from './contexts/mfe-metadata-context';\nimport { EVENT_BUS_TOKEN, EventBus } 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) {\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":["Log","Provider","useEffect","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","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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"}
|
|
1
|
+
{"version":3,"sources":["../src/register.tsx"],"sourcesContent":["import { type LDService } from '@servicetitan/launchdarkly-service';\nimport { Log } from '@servicetitan/log-service';\nimport { Provider } from '@servicetitan/react-ioc';\nimport { ExposedDependencies } from '@servicetitan/startup-utils';\nimport { ComponentType, FC, PropsWithChildren, ReactElement, useCallback, useEffect } from 'react';\nimport {\n BASENAME_TOKEN,\n Entries,\n EXPOSED_DEPENDENCIES_TOKEN,\n EXPOSED_INSTANCE_DEPENDENCIES_TOKEN,\n ExposedInstanceDependencies,\n IS_WEB_COMPONENT_TOKEN,\n IWebComponent,\n RENDER_ROOT_TOKEN,\n} from './common';\nimport { MFEDataContext } from './contexts/mfe-data-context';\nimport { MFEMetadataContext } from './contexts/mfe-metadata-context';\nimport { withCssInjector } from './css-injector';\nimport { EVENT_BUS_TOKEN, EventBus } 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\nconst Anvil1Providers: FC<{ root: ShadowRoot; portal: ShadowRoot } & PropsWithChildren> = ({\n root,\n portal,\n children,\n}) => {\n const getTablePopupProps = useCallback(\n (props: object) => ({\n ...props,\n appendTo: root as unknown as HTMLElement,\n }),\n [root]\n );\n\n try {\n const { DefaultPortalContext, TablePopupPropsContext } =\n require('@servicetitan/design-system') as typeof import('@servicetitan/design-system');\n return (\n <DefaultPortalContext.Provider value={portal as unknown as HTMLElement}>\n <TablePopupPropsContext.Provider value={getTablePopupProps}>\n {children}\n </TablePopupPropsContext.Provider>\n </DefaultPortalContext.Provider>\n );\n } catch {\n return children;\n }\n};\n\nconst Anvil2Providers: FC<{ portalAnvilContainer: HTMLDivElement } & PropsWithChildren> = ({\n portalAnvilContainer,\n children,\n}) => {\n try {\n const { PortalProvider } =\n require('@servicetitan/anvil2') as typeof import('@servicetitan/anvil2');\n return <PortalProvider root={portalAnvilContainer}>{children}</PortalProvider>;\n } catch {\n return children;\n }\n};\n\nexport function register(Component: ComponentType, light: boolean, options?: RegisterOptions) {\n const WrappedComponent = withCssInjector(Component);\n\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) {\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 withProviders(children: ReactElement) {\n return (\n <Anvil2Providers portalAnvilContainer={this.portalAnvilContainer!}>\n <Anvil1Providers root={this.root!} portal={this.portal!}>\n {children}\n </Anvil1Providers>\n </Anvil2Providers>\n );\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(<WrappedComponent {...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":["Log","Provider","useCallback","useEffect","BASENAME_TOKEN","EXPOSED_DEPENDENCIES_TOKEN","EXPOSED_INSTANCE_DEPENDENCIES_TOKEN","IS_WEB_COMPONENT_TOKEN","RENDER_ROOT_TOKEN","MFEDataContext","MFEMetadataContext","withCssInjector","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","Anvil1Providers","root","portal","children","getTablePopupProps","props","appendTo","DefaultPortalContext","TablePopupPropsContext","require","value","Anvil2Providers","portalAnvilContainer","PortalProvider","register","Component","light","options","WrappedComponent","WebComponent","HTMLElement","connectedCallback","isConnected","sharedDependenciesNames","styleUrls","getStyleUrls","styles","total","length","loaded","elements","shadowRoot","attachShadow","mode","portalElement","setAttribute","body","appendChild","view","push","attachStyles","disconnectedCallback","remove","unmount","removeChild","host","undefined","onDispose","observedAttributes","attributeChangedCallback","withProviders","ldService","logService","historyManager","exposedDependencies","exposedInstanceDependencies","eventBus","basename","onReady","provide","entries","key","Object","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.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAcrC,UAAU,aAAa;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,YAAY;IAClB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,wBAAgB,MAAM,CAClB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,OAAO,GAAG,gBAAgB,EACrC,OAAO,CAAC,EAAE,aAAa,GACxB,YAAY,CAgBd"}
|
package/dist/render.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
let createRoot;
|
|
3
3
|
try {
|
|
4
4
|
/**
|
|
5
|
-
* Note,
|
|
6
|
-
* @see {@link file://./../../startup/src/
|
|
5
|
+
* Note, bundlers must be configured to ignore this dependency.
|
|
6
|
+
* @see {@link file://./../../startup/src/core/check-resource/is-managed-react-dom-client-dependency.ts}
|
|
7
7
|
*/ createRoot = require('react-dom/client').createRoot;
|
|
8
8
|
} catch (unused) {
|
|
9
9
|
// ignore
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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, bundlers must be configured to ignore this dependency.\n * @see {@link file://./../../startup/src/core/check-resource/is-managed-react-dom-client-dependency.ts}\n */\n createRoot = require('react-dom/client').createRoot;\n} catch {\n // ignore\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,eAAM;AACJ,SAAS;AACb;AAUA,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-bundle-info.d.ts","sourceRoot":"","sources":["../../src/utils/get-bundle-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAwB,MAAM,6BAA6B,CAAC;AAGxF,OAAO,EAAE,2BAA2B,EAAW,YAAY,EAAE,MAAM,WAAW,CAAC;AAI/E,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAC;AAKjE,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;AAEnE,UAAU,kBAAkB;IACxB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,EAChC,KAAK,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAwB,EACxB,2BAAgC,EAChC,UAAU,EACV,MAAM,EACN,OAAO,EACP,cAAc,GACjB,EAAE,kBAAkB;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"get-bundle-info.d.ts","sourceRoot":"","sources":["../../src/utils/get-bundle-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAwB,MAAM,6BAA6B,CAAC;AAGxF,OAAO,EAAE,2BAA2B,EAAW,YAAY,EAAE,MAAM,WAAW,CAAC;AAI/E,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAC;AAKjE,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;AAEnE,UAAU,kBAAkB;IACxB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,EAChC,KAAK,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAwB,EACxB,2BAAgC,EAChC,UAAU,EACV,MAAM,EACN,OAAO,EACP,cAAc,GACjB,EAAE,kBAAkB;;;;;;;;;;;;;;;;GA8FpB"}
|