chayns-api 1.1.0-9 → 1.2.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 (42) hide show
  1. package/dist/cjs/calls/index.js +11 -3
  2. package/dist/cjs/components/ChaynsProvider.js +2 -5
  3. package/dist/cjs/components/withHydrationBoundary.js +5 -9
  4. package/dist/cjs/constants/languages.js +19 -0
  5. package/dist/cjs/handler/DialogHandler.js +1 -2
  6. package/dist/cjs/host/ChaynsHost.js +20 -39
  7. package/dist/cjs/host/module/ModuleHost.js +2 -20
  8. package/dist/cjs/host/module/utils/loadComponent.js +84 -42
  9. package/dist/cjs/index.js +8 -1
  10. package/dist/cjs/util/transferNestedFunctions.js +5 -2
  11. package/dist/cjs/util/url.js +1 -1
  12. package/dist/cjs/wrapper/AppWrapper.js +81 -43
  13. package/dist/cjs/wrapper/FrameWrapper.js +5 -1
  14. package/dist/cjs/wrapper/StaticChaynsApi.js +7 -0
  15. package/dist/esm/calls/index.js +8 -3
  16. package/dist/esm/components/ChaynsProvider.js +2 -5
  17. package/dist/esm/components/withHydrationBoundary.js +5 -9
  18. package/dist/esm/constants/languages.js +13 -0
  19. package/dist/esm/handler/DialogHandler.js +1 -2
  20. package/dist/esm/host/ChaynsHost.js +18 -39
  21. package/dist/esm/host/module/ModuleHost.js +2 -20
  22. package/dist/esm/host/module/utils/loadComponent.js +87 -44
  23. package/dist/esm/index.js +1 -1
  24. package/dist/esm/util/transferNestedFunctions.js +5 -2
  25. package/dist/esm/util/url.js +2 -2
  26. package/dist/esm/wrapper/AppWrapper.js +85 -45
  27. package/dist/esm/wrapper/FrameWrapper.js +5 -1
  28. package/dist/esm/wrapper/StaticChaynsApi.js +7 -0
  29. package/dist/types/calls/index.d.ts +5 -1
  30. package/dist/types/components/withHydrationBoundary.d.ts +1 -1
  31. package/dist/types/constants/languages.d.ts +12 -0
  32. package/dist/types/handler/DialogHandler.d.ts +9 -3
  33. package/dist/types/hooks/useCurrentPage.d.ts +4 -1
  34. package/dist/types/hooks/useCustomData.d.ts +1 -1
  35. package/dist/types/host/ChaynsHost.d.ts +0 -1
  36. package/dist/types/host/module/ModuleHost.d.ts +1 -0
  37. package/dist/types/host/module/utils/loadComponent.d.ts +3 -1
  38. package/dist/types/index.d.ts +1 -1
  39. package/dist/types/types/IChaynsReact.d.ts +42 -8
  40. package/dist/types/wrapper/AppWrapper.d.ts +0 -3
  41. package/dist/types/wrapper/StaticChaynsApi.d.ts +7 -0
  42. package/package.json +2 -2
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.vibrate = exports.user = exports.storageSetItem = exports.storageRemoveItem = exports.storageGetItem = exports.site = exports.setWaitCursor = exports.setTempDesignSettings = exports.setScanQrCode = exports.setRefreshScrollEnabled = exports.setOverlay = exports.setHeight = exports.setFloatingButton = exports.setDisplayTimeout = exports.setAdminMode = exports.sendMessageToUser = exports.sendMessageToPage = exports.sendMessageToGroup = exports.selectPage = exports.scrollToY = exports.scrollByY = exports.removeWindowMetricsListener = exports.removeVisibilityChangeListener = exports.removeToolbarChangeListener = exports.removeScrollListener = exports.removeGeoLocationListener = exports.refreshData = exports.refreshAccessToken = exports.parameters = exports.pages = exports.openVideo = exports.openUrl = exports.openMedia = exports.openImage = exports.navigateBack = exports.logout = exports.login = exports.language = exports.invokeDialogCall = exports.invokeCall = exports.getWindowMetrics = exports.getUserInfo = exports.getUser = exports.getSite = exports.getScrollPosition = exports.getParameters = exports.getPages = exports.getLanguage = exports.getGeoLocation = exports.getEnvironment = exports.getDevice = exports.getCurrentPage = exports.getAvailableSharingServices = exports.getAccessToken = exports.environment = exports.device = exports.customCallbackFunction = exports.createDialog = exports.addWindowMetricsListener = exports.addVisibilityChangeListener = exports.addToolbarChangeListener = exports.addScrollListener = exports.addGeoLocationListener = void 0;
6
+ exports.vibrate = exports.user = exports.storageSetItem = exports.storageRemoveItem = exports.storageGetItem = exports.site = exports.setWaitCursor = exports.setTempDesignSettings = exports.setScanQrCode = exports.setRefreshScrollEnabled = exports.setOverlay = exports.setHeight = exports.setFloatingButton = exports.setDisplayTimeout = exports.setAdminMode = exports.sendMessageToUser = exports.sendMessageToPage = exports.sendMessageToGroup = exports.selectPage = exports.scrollToY = exports.scrollByY = exports.removeWindowMetricsListener = exports.removeVisibilityChangeListener = exports.removeToolbarChangeListener = exports.removeScrollListener = exports.removeGeoLocationListener = exports.refreshData = exports.refreshAccessToken = exports.parameters = exports.pages = exports.openVideo = exports.openUrl = exports.openMedia = exports.openImage = exports.navigateBack = exports.logout = exports.login = exports.language = exports.invokeDialogCall = exports.invokeCall = exports.getWindowMetrics = exports.getUserInfo = exports.getUser = exports.getSite = exports.getScrollPosition = exports.getParameters = exports.getPages = exports.getLanguage = exports.getGeoLocation = exports.getEnvironment = exports.getDevice = exports.getCurrentPage = exports.getAvailableSharingServices = exports.getAccessToken = exports.environment = exports.device = exports.customCallbackFunction = exports.createDialog = exports.addWindowMetricsListener = exports.addVisibilityChangeListener = exports.addToolbarChangeListener = exports.addScrollListener = exports.addGeoLocationListener = exports.addAnonymousAccount = void 0;
7
7
  var _moduleWrapper = require("../components/moduleWrapper");
8
8
  /**
9
9
  * This adds a listener to determine your location.
@@ -241,21 +241,29 @@ const storageSetItem = (...args) => _moduleWrapper.moduleWrapper.current.functio
241
241
  */
242
242
  exports.storageSetItem = storageSetItem;
243
243
  const vibrate = (...args) => _moduleWrapper.moduleWrapper.current.functions.vibrate(...args);
244
+
244
245
  /**
245
246
  * This method creates a dialog
246
247
  */
248
+ // @ts-ignore
247
249
  exports.vibrate = vibrate;
248
- const createDialog = (...args) => _moduleWrapper.moduleWrapper.current.functions.createDialog(...args);
250
+ const createDialog = config => _moduleWrapper.moduleWrapper.current.functions.createDialog(config);
249
251
  /**
250
252
  * Displays an overlay
251
253
  */
252
254
  exports.createDialog = createDialog;
253
255
  const setOverlay = (...args) => _moduleWrapper.moduleWrapper.current.functions.setOverlay(...args);
256
+
257
+ /**
258
+ * Generates a temp accesstoken, only valid for short period of time (~3 days), works only when no user is logged in
259
+ */
260
+ exports.setOverlay = setOverlay;
261
+ const addAnonymousAccount = () => _moduleWrapper.moduleWrapper.current.functions.addAnonymousAccount();
254
262
  /**
255
263
  * Returns user information, only when user is logged in
256
264
  * @category User functions
257
265
  */
258
- exports.setOverlay = setOverlay;
266
+ exports.addAnonymousAccount = addAnonymousAccount;
259
267
  const getUser = () => _moduleWrapper.moduleWrapper.current.values.user;
260
268
  exports.getUser = getUser;
261
269
  const getSite = () => _moduleWrapper.moduleWrapper.current.values.site;
@@ -13,7 +13,6 @@ var _FrameWrapper = require("../wrapper/FrameWrapper");
13
13
  var _ModuleFederationWrapper = require("../wrapper/ModuleFederationWrapper");
14
14
  var _SsrWrapper = require("../wrapper/SsrWrapper");
15
15
  var _ChaynsContext = require("./ChaynsContext");
16
- var _AppDialogWrapper = _interopRequireDefault(require("./AppDialogWrapper"));
17
16
  var _moduleWrapper = require("./moduleWrapper");
18
17
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
18
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -43,7 +42,7 @@ const ChaynsProvider = ({
43
42
  renderedByServer,
44
43
  isModule
45
44
  }) => {
46
- var _customWrapper$curren, _customWrapper$curren2, _customWrapper$curren3, _customWrapper$curren4;
45
+ var _customWrapper$curren, _customWrapper$curren2, _customWrapper$curren3;
47
46
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
48
47
  const customWrapper = (0, _react.useRef)(null);
49
48
  if (!customWrapper.current) {
@@ -106,9 +105,7 @@ const ChaynsProvider = ({
106
105
  value: state
107
106
  }, /*#__PURE__*/_react.default.createElement(_ChaynsContext.ChaynsFunctionsContext.Provider, {
108
107
  value: (_customWrapper$curren3 = customWrapper.current) === null || _customWrapper$curren3 === void 0 ? void 0 : _customWrapper$curren3.functions
109
- }, children, customWrapper.current instanceof _AppWrapper.AppWrapper ? /*#__PURE__*/_react.default.createElement(_AppDialogWrapper.default, {
110
- dialogEventTarget: (_customWrapper$curren4 = customWrapper.current) === null || _customWrapper$curren4 === void 0 ? void 0 : _customWrapper$curren4.getDialogEventTarget()
111
- }) : false)), /*#__PURE__*/_react.default.createElement(InitialDataProvider, {
108
+ }, children)), /*#__PURE__*/_react.default.createElement(InitialDataProvider, {
112
109
  data: state,
113
110
  renderedByServer: renderedByServer
114
111
  }));
@@ -22,6 +22,9 @@ const withHydrationBoundary = (Component, initializer, useHydrationId) => {
22
22
  throw new Error('hydration boundary was not given a id which is required');
23
23
  }
24
24
  const [store] = (0, _react.useState)(() => {
25
+ if (!globalThis.window && id in value) {
26
+ return value[id];
27
+ }
25
28
  let initialValue = undefined;
26
29
  if (globalThis.window) {
27
30
  const htmlId = `__INITIAL_DATA_${id}__`;
@@ -30,16 +33,9 @@ const withHydrationBoundary = (Component, initializer, useHydrationId) => {
30
33
  initialValue = JSON.parse($elem.innerHTML);
31
34
  }
32
35
  }
33
- const s = initializer(initialValue);
36
+ const s = initializer(initialValue, id);
34
37
  if (!globalThis.window) {
35
- if (id in value) {
36
- console.warn(`Dehydration function for id "${id}" has been defined multiple times. This can have two reasons. The children cause suspension and therefor the hydration boundary has to mount from scratch again. You can avoid this by adding a Suspense around the children. The id is not unique. This has to be fixed or might cause hydration issues.`);
37
- }
38
- value[id] = {
39
- getState: s.getState,
40
- abort: s.abort,
41
- type: s.type
42
- };
38
+ value[id] = s;
43
39
  }
44
40
  return s;
45
41
  });
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DeviceLanguage = void 0;
7
+ let DeviceLanguage = exports.DeviceLanguage = /*#__PURE__*/function (DeviceLanguage) {
8
+ DeviceLanguage[DeviceLanguage["de"] = 1] = "de";
9
+ DeviceLanguage[DeviceLanguage["en"] = 2] = "en";
10
+ DeviceLanguage[DeviceLanguage["fr"] = 3] = "fr";
11
+ DeviceLanguage[DeviceLanguage["it"] = 4] = "it";
12
+ DeviceLanguage[DeviceLanguage["nl"] = 5] = "nl";
13
+ DeviceLanguage[DeviceLanguage["es"] = 6] = "es";
14
+ DeviceLanguage[DeviceLanguage["pt"] = 7] = "pt";
15
+ DeviceLanguage[DeviceLanguage["tr"] = 8] = "tr";
16
+ DeviceLanguage[DeviceLanguage["pl"] = 9] = "pl";
17
+ DeviceLanguage[DeviceLanguage["uk"] = 10] = "uk";
18
+ return DeviceLanguage;
19
+ }({});
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  class DialogHandler {
8
8
  isOpen = false;
9
- result = undefined;
10
9
  listeners = [];
11
10
  constructor(config, open, close, dispatchEvent, addDataListener) {
12
11
  this._open = open;
@@ -41,7 +40,7 @@ class DialogHandler {
41
40
  return;
42
41
  }
43
42
  this.isOpen = false;
44
- this._close(this.dialogId, data);
43
+ this._close(this.dialogId, data, buttonType);
45
44
  }
46
45
  dispatchEvent(data) {
47
46
  if (!this.isOpen) {
@@ -4,10 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = _interopRequireDefault(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _HostIframe = _interopRequireDefault(require("./iframe/HostIframe"));
9
9
  var _ModuleHost = _interopRequireDefault(require("./module/ModuleHost"));
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
13
  const ChaynsHost = ({
12
14
  type,
13
15
  iFrameProps,
@@ -15,7 +17,6 @@ const ChaynsHost = ({
15
17
  src,
16
18
  iFrameRef = undefined,
17
19
  loadingComponent = undefined,
18
- children = undefined,
19
20
  system,
20
21
  // shallow data
21
22
  pages,
@@ -31,8 +32,23 @@ const ChaynsHost = ({
31
32
  preventStagingReplacement,
32
33
  dialog
33
34
  }) => {
35
+ const [isVisible, setIsVisible] = (0, _react.useState)(type !== 'client-module' && (type !== 'server-module' || !!(system !== null && system !== void 0 && system.serverUrl)));
36
+ (0, _react.useEffect)(() => {
37
+ if (isVisible) return;
38
+ if (typeof _react.startTransition === 'function') {
39
+ (0, _react.startTransition)(() => {
40
+ setIsVisible(true);
41
+ });
42
+ } else {
43
+ setIsVisible(true);
44
+ }
45
+ }, []);
46
+ if (!isVisible) {
47
+ return null;
48
+ }
34
49
  switch (type) {
35
50
  case 'client-iframe':
51
+ case 'server-iframe':
36
52
  return /*#__PURE__*/_react.default.createElement(_HostIframe.default, {
37
53
  iFrameRef: iFrameRef,
38
54
  iFrameProps: iFrameProps,
@@ -44,6 +60,7 @@ const ChaynsHost = ({
44
60
  currentPage: currentPage,
45
61
  functions: functions,
46
62
  src: src,
63
+ postForm: type === 'server-iframe',
47
64
  language: language,
48
65
  parameters: parameters,
49
66
  environment: environment,
@@ -52,6 +69,7 @@ const ChaynsHost = ({
52
69
  dialog: dialog
53
70
  });
54
71
  case 'client-module':
72
+ case 'server-module':
55
73
  return /*#__PURE__*/_react.default.createElement(_ModuleHost.default, {
56
74
  system: system,
57
75
  pages: pages,
@@ -69,43 +87,6 @@ const ChaynsHost = ({
69
87
  preventStagingReplacement: preventStagingReplacement,
70
88
  dialog: dialog
71
89
  });
72
- case 'server-iframe':
73
- return /*#__PURE__*/_react.default.createElement(_HostIframe.default, {
74
- iFrameRef: iFrameRef,
75
- iFrameProps: iFrameProps,
76
- pages: pages,
77
- isAdminModeActive: isAdminModeActive,
78
- site: site,
79
- user: user,
80
- device: device,
81
- currentPage: currentPage,
82
- functions: functions,
83
- src: src,
84
- postForm: true,
85
- language: language,
86
- parameters: parameters,
87
- environment: environment,
88
- customData: customData,
89
- preventStagingReplacement: preventStagingReplacement,
90
- dialog: dialog
91
- });
92
- case 'server-module':
93
- return /*#__PURE__*/_react.default.createElement(_ModuleHost.default, {
94
- system: system,
95
- pages: pages,
96
- isAdminModeActive: isAdminModeActive,
97
- site: site,
98
- user: user,
99
- device: device,
100
- currentPage: currentPage,
101
- functions: functions,
102
- language: language,
103
- parameters: parameters,
104
- customData: customData,
105
- environment: environment,
106
- preventStagingReplacement: preventStagingReplacement,
107
- dialog: dialog
108
- }, children);
109
90
  default:
110
91
  return null;
111
92
  }
@@ -4,37 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _runtime = require("@module-federation/runtime");
8
7
  var _react = _interopRequireWildcard(require("react"));
9
- var _reactDom = _interopRequireDefault(require("react-dom"));
10
8
  var _loadComponent = _interopRequireDefault(require("./utils/loadComponent"));
11
9
  var _url = require("../../util/url");
12
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
11
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
12
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
- (0, _runtime.init)({
16
- // @ts-expect-error will be set by chayns-toolkit via DefinePlugin
17
- name: process.env.__PACKAGE_NAME__,
18
- remotes: [],
19
- shared: {
20
- react: {
21
- version: _react.default.version,
22
- scope: 'default',
23
- lib: () => _react.default
24
- },
25
- 'react-dom': {
26
- version: _reactDom.default.version,
27
- scope: 'default',
28
- lib: () => _reactDom.default
29
- }
30
- }
31
- });
32
13
  const System = ({
33
14
  system,
34
15
  fallback,
35
16
  ...props
36
17
  }) => {
37
- const Component = (0, _react.useMemo)(() => (0, _loadComponent.default)(system.scope, system.module, system.url, undefined, system.preventSingleton), [system.scope, system.module, system.url, system.preventSingleton]);
18
+ const Component = (0, _react.useMemo)(() => (0, _loadComponent.default)(system.scope, system.module, globalThis.window ? system.url : system.serverUrl, undefined, system.preventSingleton), [system.scope, system.module, system.url, system.serverUrl, system.preventSingleton]);
38
19
  return /*#__PURE__*/_react.default.createElement(_react.default.Suspense, {
39
20
  fallback: fallback || ''
40
21
  }, /*#__PURE__*/_react.default.createElement(Component, props));
@@ -83,6 +64,7 @@ const ModuleHost = ({
83
64
  system: {
84
65
  scope: system.scope,
85
66
  url: (0, _url.replaceStagingUrl)(preventStagingReplacement, system.url, environment.buildEnvironment),
67
+ serverUrl: (0, _url.replaceStagingUrl)(preventStagingReplacement, system.serverUrl, environment.buildEnvironment),
86
68
  module: system.module,
87
69
  preventSingleton: system.preventSingleton
88
70
  },
@@ -3,66 +3,108 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = loadComponent;
6
+ exports.loadModule = exports.default = void 0;
7
+ var _reactDom = _interopRequireDefault(require("react-dom"));
7
8
  var _semver = _interopRequireDefault(require("semver"));
8
9
  var _react = _interopRequireDefault(require("react"));
9
10
  var _runtime = require("@module-federation/runtime");
11
+ var _process$env$__PACKAG;
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
13
  const registeredScopes = {};
12
- const dynamicMap = {};
13
- function loadComponent(scope, module, url, skipCompatMode = false, preventSingleton = false) {
14
- if (skipCompatMode) {
15
- console.warn('[chayns-api] skipCompatMode-option is deprecated and is set automatically now');
14
+ const moduleMap = {};
15
+ const componentMap = {};
16
+ (0, _runtime.init)({
17
+ // will be set by chayns-toolkit via DefinePlugin
18
+ name: (_process$env$__PACKAG = process.env.__PACKAGE_NAME__) !== null && _process$env$__PACKAG !== void 0 ? _process$env$__PACKAG : '',
19
+ remotes: [],
20
+ shared: {
21
+ react: {
22
+ version: _react.default.version,
23
+ scope: 'default',
24
+ lib: () => _react.default
25
+ },
26
+ 'react-dom': {
27
+ version: _reactDom.default.version,
28
+ scope: 'default',
29
+ lib: () => _reactDom.default
30
+ }
16
31
  }
32
+ });
33
+ const loadModule = (scope, module, url, preventSingleton = false) => {
17
34
  if (registeredScopes[scope] !== url || preventSingleton) {
35
+ if (scope in registeredScopes) {
36
+ console.error(`[chayns-api] call registerRemote with force for scope ${scope}. url: ${url}`);
37
+ }
18
38
  (0, _runtime.registerRemotes)([{
19
39
  name: scope,
20
40
  entry: url,
21
41
  alias: scope
22
42
  }], {
23
- force: scope in registeredScopes
43
+ force: scope in registeredScopes || preventSingleton
24
44
  });
25
45
  registeredScopes[scope] = url;
26
- dynamicMap[scope] = {};
46
+ moduleMap[scope] = {};
47
+ componentMap[scope] = {};
27
48
  }
28
- if (!(module in dynamicMap[scope])) {
49
+ if (!(module in moduleMap[scope])) {
29
50
  const path = `${scope}/${module.replace(/^\.\//, '')}`;
30
- dynamicMap[scope][module] = /*#__PURE__*/_react.default.lazy(() => {
31
- return (0, _runtime.loadRemote)(path).then(async Module => {
32
- // semantically equals skipCompatMode
33
- if (typeof Module.default === 'function') {
34
- return Module;
35
- }
36
- const hostVersion = _semver.default.minVersion(_react.default.version);
37
- const {
38
- requiredVersion,
39
- environment
40
- } = Module.default;
41
- const shareScopes = await new Promise(resolve => {
42
- (0, _runtime.loadShareSync)('react', {
43
- resolver: shareOptions => {
44
- resolve(shareOptions);
45
- return shareOptions[0];
46
- }
47
- });
48
- });
49
- const matchReactVersion = requiredVersion && _semver.default.satisfies(hostVersion, requiredVersion) && !shareScopes.some(t => {
50
- const {
51
- version,
52
- from
53
- } = t;
54
- return _semver.default.gt(version, hostVersion) && _semver.default.satisfies(version, requiredVersion) || scope === from.split('-').join('_');
51
+ const promise = (0, _runtime.loadRemote)(path);
52
+ promise.catch(e => {
53
+ console.error("[chayns-api] Failed to load module", scope, url, e);
54
+ // causes registerRemote with force = true on next attempt to load the component which tries to load the component again
55
+ registeredScopes[scope] = '';
56
+ });
57
+ return promise;
58
+ }
59
+ return moduleMap[scope][module];
60
+ };
61
+ exports.loadModule = loadModule;
62
+ const loadComponent = (scope, module, url, skipCompatMode = false, preventSingleton = false) => {
63
+ if (skipCompatMode) {
64
+ console.warn('[chayns-api] skipCompatMode-option is deprecated and is set automatically now');
65
+ }
66
+ if (!componentMap[scope]) {
67
+ componentMap[scope] = {};
68
+ }
69
+ if (!(module in componentMap[scope])) {
70
+ const promise = loadModule(scope, module, url, preventSingleton).then(async Module => {
71
+ if (typeof Module.default === 'function') {
72
+ return Module;
73
+ }
74
+ const hostVersion = _semver.default.minVersion(_react.default.version);
75
+ const {
76
+ requiredVersion,
77
+ environment
78
+ } = Module.default;
79
+ const shareScopes = await new Promise(resolve => {
80
+ (0, _runtime.loadShareSync)('react', {
81
+ resolver: shareOptions => {
82
+ resolve(shareOptions);
83
+ return shareOptions[0];
84
+ }
55
85
  });
56
- if (!matchReactVersion || environment !== 'production' || process.env.NODE_ENV === 'development') {
57
- return {
58
- default: Module.default.CompatComponent
59
- };
60
- }
86
+ });
87
+ const matchReactVersion = requiredVersion && _semver.default.satisfies(hostVersion, requiredVersion) && !shareScopes.some(({
88
+ version,
89
+ from
90
+ }) => {
91
+ return _semver.default.gt(version, hostVersion) && _semver.default.satisfies(version, requiredVersion) || scope === from.split('-').join('_');
92
+ });
93
+ if (!matchReactVersion || environment !== 'production' || process.env.NODE_ENV === 'development') {
61
94
  return {
62
- default: Module.default.Component
95
+ default: Module.default.CompatComponent
63
96
  };
64
- });
97
+ }
98
+ return {
99
+ default: Module.default.Component
100
+ };
101
+ });
102
+ promise.catch(e => {
103
+ console.error("[chayns-api] Failed to load component", scope, url, e);
104
+ delete componentMap[scope][module];
65
105
  });
106
+ componentMap[scope][module] = /*#__PURE__*/_react.default.lazy(() => promise);
66
107
  }
67
- return dynamicMap[scope][module];
68
- }
108
+ return componentMap[scope][module];
109
+ };
110
+ var _default = exports.default = loadComponent;
package/dist/cjs/index.js CHANGED
@@ -13,6 +13,7 @@ var _exportNames = {
13
13
  withHydrationBoundary: true,
14
14
  StaticChaynsApi: true,
15
15
  loadComponent: true,
16
+ loadModule: true,
16
17
  DialogHandler: true,
17
18
  dialog: true
18
19
  };
@@ -65,6 +66,12 @@ Object.defineProperty(exports, "loadComponent", {
65
66
  return _loadComponent.default;
66
67
  }
67
68
  });
69
+ Object.defineProperty(exports, "loadModule", {
70
+ enumerable: true,
71
+ get: function () {
72
+ return _loadComponent.loadModule;
73
+ }
74
+ });
68
75
  Object.defineProperty(exports, "withCompatMode", {
69
76
  enumerable: true,
70
77
  get: function () {
@@ -155,7 +162,7 @@ Object.keys(_constants).forEach(function (key) {
155
162
  });
156
163
  var _withHydrationBoundary = _interopRequireDefault(require("./components/withHydrationBoundary"));
157
164
  var _StaticChaynsApi = _interopRequireDefault(require("./wrapper/StaticChaynsApi"));
158
- var _loadComponent = _interopRequireDefault(require("./host/module/utils/loadComponent"));
165
+ var _loadComponent = _interopRequireWildcard(require("./host/module/utils/loadComponent"));
159
166
  var _DialogHandler = _interopRequireDefault(require("./handler/DialogHandler"));
160
167
  var _dialog = _interopRequireWildcard(require("./calls/dialogs/index"));
161
168
  exports.dialog = _dialog;
@@ -28,8 +28,11 @@ Comlink.transferHandlers.set("FUNCTION", {
28
28
  },
29
29
  deserialize(obj) {
30
30
  obj._functionKeys.forEach(x => {
31
- obj[x].start();
32
- obj[x] = Comlink.wrap(obj[x]);
31
+ // under certain conditions deserialize can be called more than once on same object
32
+ if (obj[x] instanceof MessagePort) {
33
+ obj[x].start();
34
+ obj[x] = Comlink.wrap(obj[x]);
35
+ }
33
36
  });
34
37
  return obj;
35
38
  }
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.replaceStagingUrl = void 0;
7
7
  var _IChaynsReact = require("../types/IChaynsReact");
8
8
  const replaceStagingUrl = (prevent, url, environment) => {
9
- if (prevent) return url;
9
+ if (prevent || !url) return url;
10
10
  let replacedUrl = url;
11
11
  if (environment === _IChaynsReact.Environment.Qa || environment === _IChaynsReact.Environment.Development) {
12
12
  replacedUrl = replacedUrl.replace('tapp.chayns-static.space', 'tapp-dev.chayns-static.space');