@fluid-app/portal-sdk 0.1.374 → 0.1.376
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/{authoring-Di7OJapg.d.cts → authoring-DDJSpQcy.d.cts} +2 -2
- package/dist/{authoring-D0yimRFr.d.mts.map → authoring-DDJSpQcy.d.cts.map} +1 -1
- package/dist/{authoring-D0yimRFr.d.mts → authoring-DUQfz-af.d.mts} +2 -2
- package/dist/{authoring-Di7OJapg.d.cts.map → authoring-DUQfz-af.d.mts.map} +1 -1
- package/dist/index.cjs +119 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +4 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +119 -18
- package/dist/index.mjs.map +1 -1
- package/dist/preview/preview-entry.cjs +1 -1
- package/dist/preview/preview-entry.d.cts +1 -1
- package/dist/preview/preview-entry.d.mts +1 -1
- package/dist/preview/preview-entry.mjs +1 -1
- package/dist/{widget-package-descriptor-Chc8Gb6V.d.cts → widget-package-descriptor-BFknJmTb.d.cts} +11 -1
- package/dist/{widget-package-descriptor-Chc8Gb6V.d.cts.map → widget-package-descriptor-BFknJmTb.d.cts.map} +1 -1
- package/dist/{widget-package-descriptor-fjHqObKE.d.mts → widget-package-descriptor-BTnvi-td.d.mts} +11 -1
- package/dist/{widget-package-descriptor-fjHqObKE.d.mts.map → widget-package-descriptor-BTnvi-td.d.mts.map} +1 -1
- package/dist/{widget-package-utils-pdLitM72.cjs → widget-package-utils-CJp6o3RD.cjs} +94 -40
- package/dist/widget-package-utils-CJp6o3RD.cjs.map +1 -0
- package/dist/{widget-package-utils-DG2ibxqS.mjs → widget-package-utils-DnNxWKOo.mjs} +94 -40
- package/dist/widget-package-utils-DnNxWKOo.mjs.map +1 -0
- package/dist/widgets/authoring.d.cts +1 -1
- package/dist/widgets/authoring.d.mts +1 -1
- package/package.json +23 -23
- package/dist/widget-package-utils-DG2ibxqS.mjs.map +0 -1
- package/dist/widget-package-utils-pdLitM72.cjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Y as AnyComponent, i as WidgetRuntimeResizable, n as WidgetPackageType, o as WidgetManifest, r as WidgetRuntimeContainer, t as WidgetPackageDescriptor } from "./widget-package-descriptor-
|
|
1
|
+
import { Y as AnyComponent, i as WidgetRuntimeResizable, n as WidgetPackageType, o as WidgetManifest, r as WidgetRuntimeContainer, t as WidgetPackageDescriptor } from "./widget-package-descriptor-BFknJmTb.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/widgets/authoring.d.ts
|
|
4
4
|
declare const SOURCE_WIDGET_MARKER = "__fluidSourceWidget";
|
|
@@ -87,4 +87,4 @@ declare function sourceWidgetPackageToManifests(sourcePackage: SourceWidgetPacka
|
|
|
87
87
|
declare function sourceWidgetPackagesToManifests(sourcePackages: readonly SourceWidgetPackage[]): WidgetManifest[];
|
|
88
88
|
//#endregion
|
|
89
89
|
export { SourceWidgetPackageDescriptorOptions as a, defineWidget as c, isSourceWidgetPackage as d, sourceWidgetPackageToDescriptor as f, sourceWidgetPackagesToManifests as h, SourceWidgetPackage as i, defineWidgetPackage as l, sourceWidgetPackagesToDescriptors as m, DefineWidgetPackageOptions as n, WidgetSourceDefaultProps as o, sourceWidgetPackageToManifests as p, SourceWidget as r, WidgetSourceResizable as s, DefineWidgetOptions as t, isSourceWidget as u };
|
|
90
|
-
//# sourceMappingURL=authoring-
|
|
90
|
+
//# sourceMappingURL=authoring-DDJSpQcy.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring-
|
|
1
|
+
{"version":3,"file":"authoring-DDJSpQcy.d.cts","names":[],"sources":["../src/widgets/authoring.ts"],"mappings":";;;cAWM,oBAAA;AAAA,cACA,4BAAA;AAAA,KAWM,wBAAA,GAA2B,QAAA,CAAS,MAAA;AAAA,KAEpC,qBAAA,GACR,sBAAA;EAAA,SAEW,UAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGE,mBAAA,6CAED,wBAAA,GAA2B,wBAAA;EAbJ;EAAA,SAgB5B,IAAA,EAAM,IAAA;EAdjB;EAAA,SAgBW,SAAA,EAAW,YAAA;EAAA,SACX,WAAA;EAAA,SACA,WAAA;EAAA,SACA,IAAA;EAAA,SACA,QAAA;EAAA,SACA,cAAA,GAAiB,QAAA,CAAS,MAAA;EAAA,SAC1B,YAAA,GAAe,OAAA,CAAQ,KAAA,IAAS,wBAAA;EAAA,SAChC,SAAA,GAAY,sBAAA;EAAA,SACZ,aAAA;EAAA,SACA,SAAA,GAAY,qBAAA;AAAA;AAAA,UAGN,YAAA,6CAED,wBAAA,GAA2B,wBAAA,UACjC,mBAAA,CAAoB,IAAA,EAAM,KAAA;EAAA,UACxB,oBAAA;EAAA,SACD,YAAA,EAAc,OAAA,CAAQ,KAAA,IAAS,wBAAA;AAAA;AAAA,UAGhC,8BAAA;;WAKC,KAAA,EAAO,KAAA;;;;;;WAMP,QAAA,GAAW,eAAA;;;;;;WAMX,eAAA,GAAkB,eAAA;EAAA,SAClB,WAAA,GAAc,iBAAA;EAAA,SACd,OAAA;EAAA,SACA,OAAA,WAAkB,YAAA;EAAA,SAClB,OAAA;;WAEA,cAAA;AAAA;AAAA,KAGC,0BAAA,2EAGR,8BAAA,CAA+B,KAAA,EAAO,eAAA;AAAA,UAEzB,mBAAA;EAAA,UAIL,4BAAA;EAAA,SACD,eAAA;EAAA,SACA,KAAA,EAAO,KAAA;EAAA,SACP,eAAA,EAAiB,eAAA;EAAA,SACjB,SAAA,KAAc,KAAA,IAAS,eAAA;EAAA,SACvB,WAAA,EAAa,iBAAA;EAAA,SACb,OAAA;EAAA,SACA,OAAA,WAAkB,YAAA;EAAA,SAClB,OAAA;EAAA,SACA,cAAA;AAAA;AAAA,UAGM,oCAAA;;;;;WAKN,cAAA,cAEH,aAAA,EAAe,mBAAA;;;;;;WAMZ,OAAA;AAAA;AAAA,iBAGK,YAAA,0CAEA,wBAAA,GAA2B,wBAAA,CAAA,CACzC,OAAA,EAAS,mBAAA,CAAoB,IAAA,EAAM,KAAA,IAAS,YAAA,CAAa,IAAA,EAAM,KAAA;AAAA,iBAQjD,mBAAA,kEAAA,CAId,OAAA,EAAS,0BAAA,CAA2B,KAAA,EAAO,eAAA,IAC1C,mBAAA,CAAoB,KAAA,EAAO,eAAA;AAAA,iBA4Bd,cAAA,CAAe,KAAA,YAAiB,KAAA,IAAS,YAAA;AAAA,iBAIzC,qBAAA,CACd,KAAA,YACC,KAAA,IAAS,mBAAA;AAAA,iBAII,+BAAA,CACd,aAAA,EAAe,mBAAA,EACf,OAAA,GAAS,oCAAA,GACR,uBAAA;AAAA,iBAiBa,iCAAA,CACd,cAAA,WAAyB,mBAAA,IACzB,OAAA,GAAS,oCAAA,GACR,uBAAA;AAAA,iBAWa,8BAAA,CACd,aAAA,EAAe,mBAAA,GACd,cAAA;AAAA,iBAMa,+BAAA,CACd,cAAA,WAAyB,mBAAA,KACxB,cAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as WidgetRuntimeResizable, n as WidgetPackageType, o as WidgetManifest, r as WidgetRuntimeContainer, t as WidgetPackageDescriptor, yt as AnyComponent } from "./widget-package-descriptor-
|
|
1
|
+
import { i as WidgetRuntimeResizable, n as WidgetPackageType, o as WidgetManifest, r as WidgetRuntimeContainer, t as WidgetPackageDescriptor, yt as AnyComponent } from "./widget-package-descriptor-BTnvi-td.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/widgets/authoring.d.ts
|
|
4
4
|
declare const SOURCE_WIDGET_MARKER = "__fluidSourceWidget";
|
|
@@ -87,4 +87,4 @@ declare function sourceWidgetPackageToManifests(sourcePackage: SourceWidgetPacka
|
|
|
87
87
|
declare function sourceWidgetPackagesToManifests(sourcePackages: readonly SourceWidgetPackage[]): WidgetManifest[];
|
|
88
88
|
//#endregion
|
|
89
89
|
export { SourceWidgetPackageDescriptorOptions as a, defineWidget as c, isSourceWidgetPackage as d, sourceWidgetPackageToDescriptor as f, sourceWidgetPackagesToManifests as h, SourceWidgetPackage as i, defineWidgetPackage as l, sourceWidgetPackagesToDescriptors as m, DefineWidgetPackageOptions as n, WidgetSourceDefaultProps as o, sourceWidgetPackageToManifests as p, SourceWidget as r, WidgetSourceResizable as s, DefineWidgetOptions as t, isSourceWidget as u };
|
|
90
|
-
//# sourceMappingURL=authoring-
|
|
90
|
+
//# sourceMappingURL=authoring-DUQfz-af.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring-
|
|
1
|
+
{"version":3,"file":"authoring-DUQfz-af.d.mts","names":[],"sources":["../src/widgets/authoring.ts"],"mappings":";;;cAWM,oBAAA;AAAA,cACA,4BAAA;AAAA,KAWM,wBAAA,GAA2B,QAAA,CAAS,MAAA;AAAA,KAEpC,qBAAA,GACR,sBAAA;EAAA,SAEW,UAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGE,mBAAA,6CAED,wBAAA,GAA2B,wBAAA;EAbJ;EAAA,SAgB5B,IAAA,EAAM,IAAA;EAdjB;EAAA,SAgBW,SAAA,EAAW,YAAA;EAAA,SACX,WAAA;EAAA,SACA,WAAA;EAAA,SACA,IAAA;EAAA,SACA,QAAA;EAAA,SACA,cAAA,GAAiB,QAAA,CAAS,MAAA;EAAA,SAC1B,YAAA,GAAe,OAAA,CAAQ,KAAA,IAAS,wBAAA;EAAA,SAChC,SAAA,GAAY,sBAAA;EAAA,SACZ,aAAA;EAAA,SACA,SAAA,GAAY,qBAAA;AAAA;AAAA,UAGN,YAAA,6CAED,wBAAA,GAA2B,wBAAA,UACjC,mBAAA,CAAoB,IAAA,EAAM,KAAA;EAAA,UACxB,oBAAA;EAAA,SACD,YAAA,EAAc,OAAA,CAAQ,KAAA,IAAS,wBAAA;AAAA;AAAA,UAGhC,8BAAA;;WAKC,KAAA,EAAO,KAAA;;;;;;WAMP,QAAA,GAAW,eAAA;;;;;;WAMX,eAAA,GAAkB,eAAA;EAAA,SAClB,WAAA,GAAc,iBAAA;EAAA,SACd,OAAA;EAAA,SACA,OAAA,WAAkB,YAAA;EAAA,SAClB,OAAA;;WAEA,cAAA;AAAA;AAAA,KAGC,0BAAA,2EAGR,8BAAA,CAA+B,KAAA,EAAO,eAAA;AAAA,UAEzB,mBAAA;EAAA,UAIL,4BAAA;EAAA,SACD,eAAA;EAAA,SACA,KAAA,EAAO,KAAA;EAAA,SACP,eAAA,EAAiB,eAAA;EAAA,SACjB,SAAA,KAAc,KAAA,IAAS,eAAA;EAAA,SACvB,WAAA,EAAa,iBAAA;EAAA,SACb,OAAA;EAAA,SACA,OAAA,WAAkB,YAAA;EAAA,SAClB,OAAA;EAAA,SACA,cAAA;AAAA;AAAA,UAGM,oCAAA;;;;;WAKN,cAAA,cAEH,aAAA,EAAe,mBAAA;;;;;;WAMZ,OAAA;AAAA;AAAA,iBAGK,YAAA,0CAEA,wBAAA,GAA2B,wBAAA,CAAA,CACzC,OAAA,EAAS,mBAAA,CAAoB,IAAA,EAAM,KAAA,IAAS,YAAA,CAAa,IAAA,EAAM,KAAA;AAAA,iBAQjD,mBAAA,kEAAA,CAId,OAAA,EAAS,0BAAA,CAA2B,KAAA,EAAO,eAAA,IAC1C,mBAAA,CAAoB,KAAA,EAAO,eAAA;AAAA,iBA4Bd,cAAA,CAAe,KAAA,YAAiB,KAAA,IAAS,YAAA;AAAA,iBAIzC,qBAAA,CACd,KAAA,YACC,KAAA,IAAS,mBAAA;AAAA,iBAII,+BAAA,CACd,aAAA,EAAe,mBAAA,EACf,OAAA,GAAS,oCAAA,GACR,uBAAA;AAAA,iBAiBa,iCAAA,CACd,cAAA,WAAyB,mBAAA,IACzB,OAAA,GAAS,oCAAA,GACR,uBAAA;AAAA,iBAWa,8BAAA,CACd,aAAA,EAAe,mBAAA,GACd,cAAA;AAAA,iBAMa,+BAAA,CACd,cAAA,WAAyB,mBAAA,KACxB,cAAA"}
|
package/dist/index.cjs
CHANGED
|
@@ -60,7 +60,7 @@ const require_ScreenHeaderContext = require("./ScreenHeaderContext-DI1qj4qi.cjs"
|
|
|
60
60
|
const require_use_store = require("./use-store-XM6vWBS1.cjs");
|
|
61
61
|
const require_CustomersScreen = require("./CustomersScreen-j5lDYjqN.cjs");
|
|
62
62
|
const require_AppNavigationContext = require("./AppNavigationContext-CGWEoN6J.cjs");
|
|
63
|
-
const require_widget_package_utils = require("./widget-package-utils-
|
|
63
|
+
const require_widget_package_utils = require("./widget-package-utils-CJp6o3RD.cjs");
|
|
64
64
|
const require_authoring = require("./authoring-BBlBGYC5.cjs");
|
|
65
65
|
const require_MessagingScreen = require("./MessagingScreen-BTcBx8v4.cjs");
|
|
66
66
|
require("./use-portal-card-add-3ds-flow-C2uzzhr8.cjs");
|
|
@@ -2655,6 +2655,12 @@ function AppShell({ appData: appDataProp, navigation: navigationProp, customPage
|
|
|
2655
2655
|
}
|
|
2656
2656
|
//#endregion
|
|
2657
2657
|
//#region src/entry/create-portal.tsx
|
|
2658
|
+
const warnedPortalRuntimeMergeWarningMessages = /* @__PURE__ */ new Set();
|
|
2659
|
+
const warnPortalRuntimeMergeWarningOnce = (message) => {
|
|
2660
|
+
if (warnedPortalRuntimeMergeWarningMessages.has(message)) return;
|
|
2661
|
+
warnedPortalRuntimeMergeWarningMessages.add(message);
|
|
2662
|
+
console.warn(message);
|
|
2663
|
+
};
|
|
2658
2664
|
/**
|
|
2659
2665
|
* Last-resort error boundary for crashes above the AppShell (provider
|
|
2660
2666
|
* setup, theme/auth bootstrap). Renders above FluidThemeProvider, so the
|
|
@@ -2735,37 +2741,67 @@ var RootBoundary = class extends react.Component {
|
|
|
2735
2741
|
});
|
|
2736
2742
|
}
|
|
2737
2743
|
};
|
|
2738
|
-
function RuntimeWidgetBootstrap({ children, fluidConfig,
|
|
2739
|
-
const [
|
|
2744
|
+
function RuntimeWidgetBootstrap({ children, fluidConfig, baseWidgetRegistry, initialGlobalRegisteredWidgets, shouldSubscribeToGlobalWidgetRegistry, widgetPackageLoadPromise }) {
|
|
2745
|
+
const [globalRegisteredWidgets, setGlobalRegisteredWidgets] = (0, react.useState)(initialGlobalRegisteredWidgets);
|
|
2746
|
+
const [loadedRegisteredWidgets, setLoadedRegisteredWidgets] = (0, react.useState)([]);
|
|
2740
2747
|
const [isLoading, setIsLoading] = (0, react.useState)(() => Boolean(widgetPackageLoadPromise));
|
|
2741
2748
|
const [loadFailed, setLoadFailed] = (0, react.useState)(false);
|
|
2742
2749
|
(0, react.useEffect)(() => {
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2750
|
+
setGlobalRegisteredWidgets(initialGlobalRegisteredWidgets);
|
|
2751
|
+
}, [initialGlobalRegisteredWidgets]);
|
|
2752
|
+
(0, react.useEffect)(() => {
|
|
2753
|
+
if (!shouldSubscribeToGlobalWidgetRegistry) return;
|
|
2754
|
+
const subscription = require_widget_package_utils.subscribeToFluidWidgetsRegistry((registeredWidgets) => {
|
|
2755
|
+
setGlobalRegisteredWidgets(registeredWidgets);
|
|
2747
2756
|
});
|
|
2748
|
-
|
|
2757
|
+
setGlobalRegisteredWidgets(subscription.registeredWidgets);
|
|
2758
|
+
return subscription.unsubscribe;
|
|
2759
|
+
}, [shouldSubscribeToGlobalWidgetRegistry]);
|
|
2749
2760
|
(0, react.useEffect)(() => {
|
|
2761
|
+
setLoadedRegisteredWidgets([]);
|
|
2750
2762
|
setIsLoading(Boolean(widgetPackageLoadPromise));
|
|
2751
2763
|
setLoadFailed(false);
|
|
2752
2764
|
if (!widgetPackageLoadPromise) return;
|
|
2753
2765
|
let cancelled = false;
|
|
2754
2766
|
widgetPackageLoadPromise.then((summary) => {
|
|
2755
2767
|
if (cancelled) return;
|
|
2756
|
-
|
|
2768
|
+
setLoadedRegisteredWidgets(summary.registeredWidgets);
|
|
2769
|
+
if (shouldSubscribeToGlobalWidgetRegistry) setGlobalRegisteredWidgets(require_widget_package_utils.installAndReadFluidWidgetsRegistry());
|
|
2757
2770
|
setIsLoading(false);
|
|
2758
2771
|
setLoadFailed(summary.hasFailures);
|
|
2759
2772
|
}).catch((error) => {
|
|
2760
2773
|
if (cancelled) return;
|
|
2761
2774
|
console.error("[portal] Failed to load widget packages:", error);
|
|
2775
|
+
if (shouldSubscribeToGlobalWidgetRegistry) setGlobalRegisteredWidgets(require_widget_package_utils.installAndReadFluidWidgetsRegistry());
|
|
2762
2776
|
setIsLoading(false);
|
|
2763
2777
|
setLoadFailed(true);
|
|
2764
2778
|
});
|
|
2765
2779
|
return () => {
|
|
2766
2780
|
cancelled = true;
|
|
2767
2781
|
};
|
|
2768
|
-
}, [widgetPackageLoadPromise]);
|
|
2782
|
+
}, [shouldSubscribeToGlobalWidgetRegistry, widgetPackageLoadPromise]);
|
|
2783
|
+
const warnedDuplicateGlobalWidgetTypesRef = (0, react.useRef)(/* @__PURE__ */ new Set());
|
|
2784
|
+
const { duplicateGlobalWidgetTypes, widgetRegistry } = (0, react.useMemo)(() => {
|
|
2785
|
+
const activeLoadedRegisteredWidgets = shouldSubscribeToGlobalWidgetRegistry ? syncLoadedWidgetsWithGlobalRegistry(loadedRegisteredWidgets, globalRegisteredWidgets) : loadedRegisteredWidgets;
|
|
2786
|
+
const dedupedGlobalWidgets = dedupeGlobalRegisteredWidgetsByType(shouldSubscribeToGlobalWidgetRegistry ? filterGlobalWidgetsAlreadyRepresentedByLoadedWidgets(globalRegisteredWidgets, activeLoadedRegisteredWidgets) : globalRegisteredWidgets);
|
|
2787
|
+
const globalWidgetRegistry = require_widget_package_utils.mergeRegisteredWidgetsIntoRegistry(baseWidgetRegistry, dedupedGlobalWidgets.widgets, warnPortalRuntimeMergeWarningOnce);
|
|
2788
|
+
return {
|
|
2789
|
+
duplicateGlobalWidgetTypes: dedupedGlobalWidgets.duplicateTypes,
|
|
2790
|
+
widgetRegistry: require_widget_package_utils.mergeRegisteredWidgetsIntoRegistry(globalWidgetRegistry, activeLoadedRegisteredWidgets, warnPortalRuntimeMergeWarningOnce)
|
|
2791
|
+
};
|
|
2792
|
+
}, [
|
|
2793
|
+
baseWidgetRegistry,
|
|
2794
|
+
globalRegisteredWidgets,
|
|
2795
|
+
loadedRegisteredWidgets,
|
|
2796
|
+
shouldSubscribeToGlobalWidgetRegistry
|
|
2797
|
+
]);
|
|
2798
|
+
(0, react.useEffect)(() => {
|
|
2799
|
+
for (const widgetType of duplicateGlobalWidgetTypes) {
|
|
2800
|
+
if (warnedDuplicateGlobalWidgetTypesRef.current.has(widgetType)) continue;
|
|
2801
|
+
warnedDuplicateGlobalWidgetTypesRef.current.add(widgetType);
|
|
2802
|
+
warnDuplicateGlobalRuntimeWidgetType(widgetType);
|
|
2803
|
+
}
|
|
2804
|
+
}, [duplicateGlobalWidgetTypes]);
|
|
2769
2805
|
const statusMessage = loadFailed ? "Some widgets failed to load. The portal will continue with available widgets." : isLoading ? "Loading widget packages…" : null;
|
|
2770
2806
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_FluidProvider.FluidProvider, {
|
|
2771
2807
|
config: fluidConfig,
|
|
@@ -2791,6 +2827,68 @@ function RuntimeWidgetBootstrap({ children, fluidConfig, initialWidgetRegistry,
|
|
|
2791
2827
|
}) : null, children]
|
|
2792
2828
|
});
|
|
2793
2829
|
}
|
|
2830
|
+
function dedupeGlobalRegisteredWidgetsByType(globalWidgets) {
|
|
2831
|
+
if (globalWidgets.length < 2) return {
|
|
2832
|
+
duplicateTypes: [],
|
|
2833
|
+
widgets: globalWidgets
|
|
2834
|
+
};
|
|
2835
|
+
const duplicateTypes = /* @__PURE__ */ new Set();
|
|
2836
|
+
const widgetsByType = /* @__PURE__ */ new Map();
|
|
2837
|
+
for (const widget of globalWidgets) {
|
|
2838
|
+
if (widgetsByType.has(widget.type)) {
|
|
2839
|
+
duplicateTypes.add(widget.type);
|
|
2840
|
+
continue;
|
|
2841
|
+
}
|
|
2842
|
+
widgetsByType.set(widget.type, widget);
|
|
2843
|
+
}
|
|
2844
|
+
return duplicateTypes.size > 0 ? {
|
|
2845
|
+
duplicateTypes: Array.from(duplicateTypes),
|
|
2846
|
+
widgets: Array.from(widgetsByType.values())
|
|
2847
|
+
} : {
|
|
2848
|
+
duplicateTypes: [],
|
|
2849
|
+
widgets: globalWidgets
|
|
2850
|
+
};
|
|
2851
|
+
}
|
|
2852
|
+
function warnDuplicateGlobalRuntimeWidgetType(widgetType) {
|
|
2853
|
+
console.warn(`[portal-sdk] Ignoring duplicate global runtime widget type "${widgetType}" because an earlier global registration already provides that SDK-facing type.`);
|
|
2854
|
+
}
|
|
2855
|
+
function syncLoadedWidgetsWithGlobalRegistry(loadedWidgets, globalWidgets) {
|
|
2856
|
+
if (loadedWidgets.length === 0) return [];
|
|
2857
|
+
if (globalWidgets.length === 0) return loadedWidgets;
|
|
2858
|
+
const globalWidgetsByKey = new Map(globalWidgets.map((widget) => [createRuntimeRegisteredWidgetKey(widget.packageId, widget.version, widget.type), widget]));
|
|
2859
|
+
return loadedWidgets.flatMap((loadedWidget) => {
|
|
2860
|
+
const globalWidget = globalWidgetsByKey.get(createRuntimeRegisteredWidgetKey(loadedWidget.packageId, loadedWidget.version, loadedWidget.type));
|
|
2861
|
+
if (!globalWidget) return [];
|
|
2862
|
+
return [mergeLoadedWidgetWithGlobalWidget(loadedWidget, globalWidget)];
|
|
2863
|
+
});
|
|
2864
|
+
}
|
|
2865
|
+
function mergeLoadedWidgetWithGlobalWidget(loadedWidget, globalWidget) {
|
|
2866
|
+
return {
|
|
2867
|
+
...loadedWidget,
|
|
2868
|
+
...globalWidget,
|
|
2869
|
+
name: globalWidget.name ?? loadedWidget.name,
|
|
2870
|
+
displayName: globalWidget.displayName ?? loadedWidget.displayName,
|
|
2871
|
+
description: globalWidget.description ?? loadedWidget.description,
|
|
2872
|
+
icon: globalWidget.icon ?? loadedWidget.icon,
|
|
2873
|
+
category: globalWidget.category ?? loadedWidget.category,
|
|
2874
|
+
container: globalWidget.container ?? loadedWidget.container,
|
|
2875
|
+
minSdkVersion: globalWidget.minSdkVersion ?? loadedWidget.minSdkVersion,
|
|
2876
|
+
resizable: globalWidget.resizable ?? loadedWidget.resizable,
|
|
2877
|
+
packageType: loadedWidget.packageType
|
|
2878
|
+
};
|
|
2879
|
+
}
|
|
2880
|
+
function filterGlobalWidgetsAlreadyRepresentedByLoadedWidgets(globalWidgets, loadedWidgets) {
|
|
2881
|
+
if (globalWidgets.length === 0 || loadedWidgets.length === 0) return globalWidgets;
|
|
2882
|
+
const loadedWidgetKeys = new Set(loadedWidgets.map((widget) => createRuntimeRegisteredWidgetKey(widget.packageId, widget.version, widget.type)));
|
|
2883
|
+
return globalWidgets.filter((widget) => !loadedWidgetKeys.has(createRuntimeRegisteredWidgetKey(widget.packageId, widget.version, widget.type)));
|
|
2884
|
+
}
|
|
2885
|
+
function createRuntimeRegisteredWidgetKey(packageId, version, type) {
|
|
2886
|
+
return JSON.stringify([
|
|
2887
|
+
packageId,
|
|
2888
|
+
version,
|
|
2889
|
+
type
|
|
2890
|
+
]);
|
|
2891
|
+
}
|
|
2794
2892
|
/**
|
|
2795
2893
|
* Bootstrap a Fluid portal with a single function call.
|
|
2796
2894
|
*
|
|
@@ -2825,8 +2923,9 @@ function createPortal(config = {}) {
|
|
|
2825
2923
|
const rootElement = document.getElementById(config.rootId ?? "root");
|
|
2826
2924
|
if (!rootElement) throw new Error(`Portal root element "#${config.rootId ?? "root"}" not found`);
|
|
2827
2925
|
const fluidConfig = require_widget_package_utils.createDefaultFluidConfig(config.fluid);
|
|
2828
|
-
const
|
|
2829
|
-
const
|
|
2926
|
+
const shouldSubscribeToGlobalWidgetRegistry = config.ingestPreRegisteredWidgets !== false;
|
|
2927
|
+
const initialGlobalRegisteredWidgets = shouldSubscribeToGlobalWidgetRegistry ? require_widget_package_utils.installAndReadFluidWidgetsRegistry() : [];
|
|
2928
|
+
const baseWidgetRegistry = require_widget_package_utils.buildWidgetRegistry(config.customWidgets ?? []);
|
|
2830
2929
|
const widgetPackageLoadPromise = createWidgetPackageLoadPromise(config, fluidConfig);
|
|
2831
2930
|
let app = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AppShell, {
|
|
2832
2931
|
customPages: config.customPages,
|
|
@@ -2841,8 +2940,9 @@ function createPortal(config = {}) {
|
|
|
2841
2940
|
errorReporter: config.errorReporter,
|
|
2842
2941
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RuntimeWidgetBootstrap, {
|
|
2843
2942
|
fluidConfig,
|
|
2844
|
-
|
|
2845
|
-
|
|
2943
|
+
baseWidgetRegistry,
|
|
2944
|
+
initialGlobalRegisteredWidgets,
|
|
2945
|
+
shouldSubscribeToGlobalWidgetRegistry,
|
|
2846
2946
|
widgetPackageLoadPromise,
|
|
2847
2947
|
children: app
|
|
2848
2948
|
})
|
|
@@ -2853,11 +2953,12 @@ function createWidgetPackageLoadPromise(config, fluidConfig) {
|
|
|
2853
2953
|
const explicitWidgetPackages = require_widget_package_utils.dedupeWidgetPackagesByPackageIdAndVersion(config.widgetPackages ?? []);
|
|
2854
2954
|
const hasExplicitDescriptorEndpoint = config.widgetPackageManifestUrl !== void 0;
|
|
2855
2955
|
const descriptorEndpointUrl = hasExplicitDescriptorEndpoint ? config.widgetPackageManifestUrl ?? false : require_widget_package_utils.getDefaultWidgetPackageManifestUrl();
|
|
2856
|
-
|
|
2956
|
+
const loadOptions = { ignoreExistingGlobalRegistrations: config.ingestPreRegisteredWidgets === false };
|
|
2957
|
+
if (descriptorEndpointUrl === false) return explicitWidgetPackages.length ? require_widget_package_utils.loadWidgetPackages(explicitWidgetPackages, loadOptions) : void 0;
|
|
2857
2958
|
const isOmittedHostedCatalog = !hasExplicitDescriptorEndpoint && descriptorEndpointUrl === "/api/app/widget-packages";
|
|
2858
|
-
return loadFetchedAndExplicitWidgetPackages(explicitWidgetPackages, isOmittedHostedCatalog ? require_widget_package_utils.resolveHostedWidgetPackageManifestUrl(descriptorEndpointUrl, fluidConfig.baseUrl) : descriptorEndpointUrl, config.widgetPackageAllowedOrigins, isOmittedHostedCatalog, isOmittedHostedCatalog ? "include" : void 0);
|
|
2959
|
+
return loadFetchedAndExplicitWidgetPackages(explicitWidgetPackages, isOmittedHostedCatalog ? require_widget_package_utils.resolveHostedWidgetPackageManifestUrl(descriptorEndpointUrl, fluidConfig.baseUrl) : descriptorEndpointUrl, config.widgetPackageAllowedOrigins, isOmittedHostedCatalog, isOmittedHostedCatalog ? "include" : void 0, loadOptions);
|
|
2859
2960
|
}
|
|
2860
|
-
async function loadFetchedAndExplicitWidgetPackages(explicitWidgetPackages, descriptorEndpointUrl, widgetPackageAllowedOrigins, trustCatalogAssetOrigins, credentials) {
|
|
2961
|
+
async function loadFetchedAndExplicitWidgetPackages(explicitWidgetPackages, descriptorEndpointUrl, widgetPackageAllowedOrigins, trustCatalogAssetOrigins, credentials, loadOptions) {
|
|
2861
2962
|
let fetchedWidgetPackages = [];
|
|
2862
2963
|
try {
|
|
2863
2964
|
fetchedWidgetPackages = await require_widget_package_utils.fetchWidgetPackageDescriptors(descriptorEndpointUrl, {
|
|
@@ -2868,7 +2969,7 @@ async function loadFetchedAndExplicitWidgetPackages(explicitWidgetPackages, desc
|
|
|
2868
2969
|
} catch (error) {
|
|
2869
2970
|
console.warn("[portal] Failed to fetch widget package descriptors; continuing with explicit packages only:", error);
|
|
2870
2971
|
}
|
|
2871
|
-
return require_widget_package_utils.loadWidgetPackages(require_widget_package_utils.dedupeWidgetPackagesByPackageIdAndVersion([...explicitWidgetPackages, ...fetchedWidgetPackages]));
|
|
2972
|
+
return require_widget_package_utils.loadWidgetPackages(require_widget_package_utils.dedupeWidgetPackagesByPackageIdAndVersion([...explicitWidgetPackages, ...fetchedWidgetPackages]), loadOptions);
|
|
2872
2973
|
}
|
|
2873
2974
|
//#endregion
|
|
2874
2975
|
//#region src/hooks/use-fluid-profile.ts
|