@commercetools-frontend/application-config 21.16.0 → 21.18.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.
@@ -37,7 +37,7 @@ var _Object$values = require('@babel/runtime-corejs3/core-js-stable/object/value
37
37
  var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
38
38
  var uniq = require('lodash/uniq');
39
39
  var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
40
- var formatters = require('./formatters-7e163a9c.cjs.dev.js');
40
+ var formatters = require('./formatters-3cfe4466.cjs.dev.js');
41
41
  var createDOMPurify = require('dompurify');
42
42
  var jsdom$1 = require('jsdom');
43
43
  require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
@@ -722,19 +722,6 @@ var getOrThrow = function getOrThrow(fn, errorMessage) {
722
722
  }
723
723
  };
724
724
 
725
- var jsdom = new jsdom$1.JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
726
-
727
- var DOMPurify = createDOMPurify__default["default"](jsdom.window);
728
- function sanitizeSvg(data) {
729
- return DOMPurify.sanitize(data, {
730
- USE_PROFILES: {
731
- svg: true
732
- },
733
- FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
734
- 'style']
735
- });
736
- }
737
-
738
725
  function ownKeys$1(object, enumerableOnly) { var keys = _Object$keys__default["default"](object); if (_Object$getOwnPropertySymbols__default["default"]) { var symbols = _Object$getOwnPropertySymbols__default["default"](object); enumerableOnly && (symbols = _filterInstanceProperty__default["default"](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default["default"](object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
739
726
 
740
727
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var _context3, _context4; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty__default["default"](_context3 = ownKeys$1(Object(source), !0)).call(_context3, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](target, _Object$getOwnPropertyDescriptors__default["default"](source)) : _forEachInstanceProperty__default["default"](_context4 = ownKeys$1(Object(source))).call(_context4, function (key) { _Object$defineProperty__default["default"](target, key, _Object$getOwnPropertyDescriptor__default["default"](source, key)); }); } return target; }
@@ -774,7 +761,7 @@ function transformCustomApplicationConfigToData(appConfig) {
774
761
  name: permissionKeys.manage,
775
762
  oAuthScopes: appConfig.oAuthScopes.manage
776
763
  }],
777
- icon: sanitizeSvg(appConfig.icon),
764
+ icon: appConfig.icon,
778
765
  mainMenuLink: appConfig.mainMenuLink,
779
766
  submenuLinks: _mapInstanceProperty__default["default"](_context2 = appConfig.submenuLinks).call(_context2, function (submenuLink) {
780
767
  return _objectSpread$1(_objectSpread$1({}, submenuLink), {}, {
@@ -791,6 +778,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
791
778
  var developmentPort = 3001;
792
779
  var developmentAppUrl = "http://localhost:".concat(developmentPort);
793
780
 
781
+ var trimTrailingSlash = function trimTrailingSlash(value) {
782
+ return value.replace(/\/$/, '');
783
+ };
784
+
794
785
  var omitDevConfigIfEmpty = function omitDevConfigIfEmpty(devConfig) {
795
786
  if ( // @ts-expect-error: the `accountLinks` is not explicitly typed as it's only used by the account app.
796
787
  devConfig !== null && devConfig !== void 0 && devConfig.accountLinks || devConfig !== null && devConfig !== void 0 && devConfig.menuLinks || devConfig !== null && devConfig !== void 0 && devConfig.oidc) return devConfig;
@@ -880,18 +871,39 @@ var processConfig = function processConfig() {
880
871
  }),
881
872
  headers: _objectSpread(_objectSpread({}, appConfig.headers), {}, {
882
873
  csp: _objectSpread(_objectSpread({}, (_appConfig$headers = appConfig.headers) === null || _appConfig$headers === void 0 ? void 0 : _appConfig$headers.csp), {}, {
883
- 'connect-src': getUniqueValues((_appConfig$headers2 = appConfig.headers) === null || _appConfig$headers2 === void 0 ? void 0 : (_appConfig$headers2$c = _appConfig$headers2.csp) === null || _appConfig$headers2$c === void 0 ? void 0 : _appConfig$headers2$c['connect-src'], _concatInstanceProperty__default["default"](_context2 = [mcApiUrl.origin]).call(_context2, isProd ? [appUrl.href] : [])),
884
- 'script-src': getUniqueValues((_appConfig$headers3 = appConfig.headers) === null || _appConfig$headers3 === void 0 ? void 0 : (_appConfig$headers3$c = _appConfig$headers3.csp) === null || _appConfig$headers3$c === void 0 ? void 0 : _appConfig$headers3$c['script-src'], isProd ? [appUrl.href, cdnUrl.href] : []),
885
- 'style-src': getUniqueValues((_appConfig$headers4 = appConfig.headers) === null || _appConfig$headers4 === void 0 ? void 0 : (_appConfig$headers4$c = _appConfig$headers4.csp) === null || _appConfig$headers4$c === void 0 ? void 0 : _appConfig$headers4$c['style-src'], isProd ? [appUrl.href, cdnUrl.href] : [])
874
+ // We need to make sure the URL we use in these CSP headers have a slash in the end,
875
+ // otherwise it might create an invalid value when application/CDN URL points to a
876
+ // non-root directory (ex: https://www.my-domain.com/app). This is a valid URL but from
877
+ // the CSP point of view, it will say only the file `app` can be used as a source, so
878
+ // any other file from that domain will be forbidden. Using the slash (ex: https://www.my-domain.com/app/)
879
+ // at the end it's like using a wildcard so anything 'below' `app` will be allowed.
880
+ 'connect-src': getUniqueValues((_appConfig$headers2 = appConfig.headers) === null || _appConfig$headers2 === void 0 ? void 0 : (_appConfig$headers2$c = _appConfig$headers2.csp) === null || _appConfig$headers2$c === void 0 ? void 0 : _appConfig$headers2$c['connect-src'], _concatInstanceProperty__default["default"](_context2 = [mcApiUrl.origin]).call(_context2, isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/")] : [])),
881
+ 'script-src': getUniqueValues((_appConfig$headers3 = appConfig.headers) === null || _appConfig$headers3 === void 0 ? void 0 : (_appConfig$headers3$c = _appConfig$headers3.csp) === null || _appConfig$headers3$c === void 0 ? void 0 : _appConfig$headers3$c['script-src'], isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/"), "".concat(trimTrailingSlash(cdnUrl.href), "/")] : []),
882
+ 'style-src': getUniqueValues((_appConfig$headers4 = appConfig.headers) === null || _appConfig$headers4 === void 0 ? void 0 : (_appConfig$headers4$c = _appConfig$headers4.csp) === null || _appConfig$headers4$c === void 0 ? void 0 : _appConfig$headers4$c['style-src'], isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/"), "".concat(trimTrailingSlash(cdnUrl.href), "/")] : [])
886
883
  })
887
884
  })
888
885
  };
889
886
  return cachedConfig;
890
887
  };
891
888
 
889
+ var jsdom = new jsdom$1.JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
890
+
891
+ var DOMPurify = createDOMPurify__default["default"](jsdom.window);
892
+ function sanitizeSvg(data) {
893
+ return DOMPurify.sanitize(data, {
894
+ USE_PROFILES: {
895
+ svg: true
896
+ },
897
+ RETURN_DOM: true,
898
+ FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
899
+ 'style']
900
+ }).innerHTML;
901
+ }
902
+
892
903
  exports.CLOUD_IDENTIFIERS = CLOUD_IDENTIFIERS;
893
904
  exports.ENTRY_POINT_URI_PATH_REGEX = ENTRY_POINT_URI_PATH_REGEX;
894
905
  exports.MC_API_URLS = MC_API_URLS;
895
906
  exports.MissingOrInvalidConfigError = MissingOrInvalidConfigError;
896
907
  exports.getConfigPath = getConfigPath;
897
908
  exports.processConfig = processConfig;
909
+ exports.sanitizeSvg = sanitizeSvg;
@@ -37,7 +37,7 @@ var _Object$values = require('@babel/runtime-corejs3/core-js-stable/object/value
37
37
  var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
38
38
  var uniq = require('lodash/uniq');
39
39
  var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
40
- var formatters = require('./formatters-5f8a358d.cjs.prod.js');
40
+ var formatters = require('./formatters-80d55e3e.cjs.prod.js');
41
41
  var createDOMPurify = require('dompurify');
42
42
  var jsdom$1 = require('jsdom');
43
43
  require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
@@ -722,19 +722,6 @@ var getOrThrow = function getOrThrow(fn, errorMessage) {
722
722
  }
723
723
  };
724
724
 
725
- var jsdom = new jsdom$1.JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
726
-
727
- var DOMPurify = createDOMPurify__default["default"](jsdom.window);
728
- function sanitizeSvg(data) {
729
- return DOMPurify.sanitize(data, {
730
- USE_PROFILES: {
731
- svg: true
732
- },
733
- FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
734
- 'style']
735
- });
736
- }
737
-
738
725
  function ownKeys$1(object, enumerableOnly) { var keys = _Object$keys__default["default"](object); if (_Object$getOwnPropertySymbols__default["default"]) { var symbols = _Object$getOwnPropertySymbols__default["default"](object); enumerableOnly && (symbols = _filterInstanceProperty__default["default"](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default["default"](object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
739
726
 
740
727
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var _context3, _context4; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty__default["default"](_context3 = ownKeys$1(Object(source), !0)).call(_context3, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](target, _Object$getOwnPropertyDescriptors__default["default"](source)) : _forEachInstanceProperty__default["default"](_context4 = ownKeys$1(Object(source))).call(_context4, function (key) { _Object$defineProperty__default["default"](target, key, _Object$getOwnPropertyDescriptor__default["default"](source, key)); }); } return target; }
@@ -774,7 +761,7 @@ function transformCustomApplicationConfigToData(appConfig) {
774
761
  name: permissionKeys.manage,
775
762
  oAuthScopes: appConfig.oAuthScopes.manage
776
763
  }],
777
- icon: sanitizeSvg(appConfig.icon),
764
+ icon: appConfig.icon,
778
765
  mainMenuLink: appConfig.mainMenuLink,
779
766
  submenuLinks: _mapInstanceProperty__default["default"](_context2 = appConfig.submenuLinks).call(_context2, function (submenuLink) {
780
767
  return _objectSpread$1(_objectSpread$1({}, submenuLink), {}, {
@@ -791,6 +778,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
791
778
  var developmentPort = 3001;
792
779
  var developmentAppUrl = "http://localhost:".concat(developmentPort);
793
780
 
781
+ var trimTrailingSlash = function trimTrailingSlash(value) {
782
+ return value.replace(/\/$/, '');
783
+ };
784
+
794
785
  var omitDevConfigIfEmpty = function omitDevConfigIfEmpty(devConfig) {
795
786
  if ( // @ts-expect-error: the `accountLinks` is not explicitly typed as it's only used by the account app.
796
787
  devConfig !== null && devConfig !== void 0 && devConfig.accountLinks || devConfig !== null && devConfig !== void 0 && devConfig.menuLinks || devConfig !== null && devConfig !== void 0 && devConfig.oidc) return devConfig;
@@ -880,18 +871,39 @@ var processConfig = function processConfig() {
880
871
  }),
881
872
  headers: _objectSpread(_objectSpread({}, appConfig.headers), {}, {
882
873
  csp: _objectSpread(_objectSpread({}, (_appConfig$headers = appConfig.headers) === null || _appConfig$headers === void 0 ? void 0 : _appConfig$headers.csp), {}, {
883
- 'connect-src': getUniqueValues((_appConfig$headers2 = appConfig.headers) === null || _appConfig$headers2 === void 0 ? void 0 : (_appConfig$headers2$c = _appConfig$headers2.csp) === null || _appConfig$headers2$c === void 0 ? void 0 : _appConfig$headers2$c['connect-src'], _concatInstanceProperty__default["default"](_context2 = [mcApiUrl.origin]).call(_context2, isProd ? [appUrl.href] : [])),
884
- 'script-src': getUniqueValues((_appConfig$headers3 = appConfig.headers) === null || _appConfig$headers3 === void 0 ? void 0 : (_appConfig$headers3$c = _appConfig$headers3.csp) === null || _appConfig$headers3$c === void 0 ? void 0 : _appConfig$headers3$c['script-src'], isProd ? [appUrl.href, cdnUrl.href] : []),
885
- 'style-src': getUniqueValues((_appConfig$headers4 = appConfig.headers) === null || _appConfig$headers4 === void 0 ? void 0 : (_appConfig$headers4$c = _appConfig$headers4.csp) === null || _appConfig$headers4$c === void 0 ? void 0 : _appConfig$headers4$c['style-src'], isProd ? [appUrl.href, cdnUrl.href] : [])
874
+ // We need to make sure the URL we use in these CSP headers have a slash in the end,
875
+ // otherwise it might create an invalid value when application/CDN URL points to a
876
+ // non-root directory (ex: https://www.my-domain.com/app). This is a valid URL but from
877
+ // the CSP point of view, it will say only the file `app` can be used as a source, so
878
+ // any other file from that domain will be forbidden. Using the slash (ex: https://www.my-domain.com/app/)
879
+ // at the end it's like using a wildcard so anything 'below' `app` will be allowed.
880
+ 'connect-src': getUniqueValues((_appConfig$headers2 = appConfig.headers) === null || _appConfig$headers2 === void 0 ? void 0 : (_appConfig$headers2$c = _appConfig$headers2.csp) === null || _appConfig$headers2$c === void 0 ? void 0 : _appConfig$headers2$c['connect-src'], _concatInstanceProperty__default["default"](_context2 = [mcApiUrl.origin]).call(_context2, isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/")] : [])),
881
+ 'script-src': getUniqueValues((_appConfig$headers3 = appConfig.headers) === null || _appConfig$headers3 === void 0 ? void 0 : (_appConfig$headers3$c = _appConfig$headers3.csp) === null || _appConfig$headers3$c === void 0 ? void 0 : _appConfig$headers3$c['script-src'], isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/"), "".concat(trimTrailingSlash(cdnUrl.href), "/")] : []),
882
+ 'style-src': getUniqueValues((_appConfig$headers4 = appConfig.headers) === null || _appConfig$headers4 === void 0 ? void 0 : (_appConfig$headers4$c = _appConfig$headers4.csp) === null || _appConfig$headers4$c === void 0 ? void 0 : _appConfig$headers4$c['style-src'], isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/"), "".concat(trimTrailingSlash(cdnUrl.href), "/")] : [])
886
883
  })
887
884
  })
888
885
  };
889
886
  return cachedConfig;
890
887
  };
891
888
 
889
+ var jsdom = new jsdom$1.JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
890
+
891
+ var DOMPurify = createDOMPurify__default["default"](jsdom.window);
892
+ function sanitizeSvg(data) {
893
+ return DOMPurify.sanitize(data, {
894
+ USE_PROFILES: {
895
+ svg: true
896
+ },
897
+ RETURN_DOM: true,
898
+ FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
899
+ 'style']
900
+ }).innerHTML;
901
+ }
902
+
892
903
  exports.CLOUD_IDENTIFIERS = CLOUD_IDENTIFIERS;
893
904
  exports.ENTRY_POINT_URI_PATH_REGEX = ENTRY_POINT_URI_PATH_REGEX;
894
905
  exports.MC_API_URLS = MC_API_URLS;
895
906
  exports.MissingOrInvalidConfigError = MissingOrInvalidConfigError;
896
907
  exports.getConfigPath = getConfigPath;
897
908
  exports.processConfig = processConfig;
909
+ exports.sanitizeSvg = sanitizeSvg;
@@ -33,7 +33,7 @@ import _Object$values from '@babel/runtime-corejs3/core-js-stable/object/values'
33
33
  import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/includes';
34
34
  import uniq from 'lodash/uniq';
35
35
  import _startsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
36
- import { e as entryPointUriPathToResourceAccesses } from './formatters-9d35d68e.esm.js';
36
+ import { e as entryPointUriPathToResourceAccesses } from './formatters-0d13ed2a.esm.js';
37
37
  import createDOMPurify from 'dompurify';
38
38
  import { JSDOM } from 'jsdom';
39
39
  import '@babel/runtime-corejs3/core-js-stable/instance/reduce';
@@ -691,19 +691,6 @@ var getOrThrow = function getOrThrow(fn, errorMessage) {
691
691
  }
692
692
  };
693
693
 
694
- var jsdom = new JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
695
-
696
- var DOMPurify = createDOMPurify(jsdom.window);
697
- function sanitizeSvg(data) {
698
- return DOMPurify.sanitize(data, {
699
- USE_PROFILES: {
700
- svg: true
701
- },
702
- FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
703
- 'style']
704
- });
705
- }
706
-
707
694
  function ownKeys$1(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
708
695
 
709
696
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var _context3, _context4; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context3 = ownKeys$1(Object(source), !0)).call(_context3, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context4 = ownKeys$1(Object(source))).call(_context4, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -743,7 +730,7 @@ function transformCustomApplicationConfigToData(appConfig) {
743
730
  name: permissionKeys.manage,
744
731
  oAuthScopes: appConfig.oAuthScopes.manage
745
732
  }],
746
- icon: sanitizeSvg(appConfig.icon),
733
+ icon: appConfig.icon,
747
734
  mainMenuLink: appConfig.mainMenuLink,
748
735
  submenuLinks: _mapInstanceProperty(_context2 = appConfig.submenuLinks).call(_context2, function (submenuLink) {
749
736
  return _objectSpread$1(_objectSpread$1({}, submenuLink), {}, {
@@ -760,6 +747,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
760
747
  var developmentPort = 3001;
761
748
  var developmentAppUrl = "http://localhost:".concat(developmentPort);
762
749
 
750
+ var trimTrailingSlash = function trimTrailingSlash(value) {
751
+ return value.replace(/\/$/, '');
752
+ };
753
+
763
754
  var omitDevConfigIfEmpty = function omitDevConfigIfEmpty(devConfig) {
764
755
  if ( // @ts-expect-error: the `accountLinks` is not explicitly typed as it's only used by the account app.
765
756
  devConfig !== null && devConfig !== void 0 && devConfig.accountLinks || devConfig !== null && devConfig !== void 0 && devConfig.menuLinks || devConfig !== null && devConfig !== void 0 && devConfig.oidc) return devConfig;
@@ -849,13 +840,33 @@ var processConfig = function processConfig() {
849
840
  }),
850
841
  headers: _objectSpread(_objectSpread({}, appConfig.headers), {}, {
851
842
  csp: _objectSpread(_objectSpread({}, (_appConfig$headers = appConfig.headers) === null || _appConfig$headers === void 0 ? void 0 : _appConfig$headers.csp), {}, {
852
- 'connect-src': getUniqueValues((_appConfig$headers2 = appConfig.headers) === null || _appConfig$headers2 === void 0 ? void 0 : (_appConfig$headers2$c = _appConfig$headers2.csp) === null || _appConfig$headers2$c === void 0 ? void 0 : _appConfig$headers2$c['connect-src'], _concatInstanceProperty(_context2 = [mcApiUrl.origin]).call(_context2, isProd ? [appUrl.href] : [])),
853
- 'script-src': getUniqueValues((_appConfig$headers3 = appConfig.headers) === null || _appConfig$headers3 === void 0 ? void 0 : (_appConfig$headers3$c = _appConfig$headers3.csp) === null || _appConfig$headers3$c === void 0 ? void 0 : _appConfig$headers3$c['script-src'], isProd ? [appUrl.href, cdnUrl.href] : []),
854
- 'style-src': getUniqueValues((_appConfig$headers4 = appConfig.headers) === null || _appConfig$headers4 === void 0 ? void 0 : (_appConfig$headers4$c = _appConfig$headers4.csp) === null || _appConfig$headers4$c === void 0 ? void 0 : _appConfig$headers4$c['style-src'], isProd ? [appUrl.href, cdnUrl.href] : [])
843
+ // We need to make sure the URL we use in these CSP headers have a slash in the end,
844
+ // otherwise it might create an invalid value when application/CDN URL points to a
845
+ // non-root directory (ex: https://www.my-domain.com/app). This is a valid URL but from
846
+ // the CSP point of view, it will say only the file `app` can be used as a source, so
847
+ // any other file from that domain will be forbidden. Using the slash (ex: https://www.my-domain.com/app/)
848
+ // at the end it's like using a wildcard so anything 'below' `app` will be allowed.
849
+ 'connect-src': getUniqueValues((_appConfig$headers2 = appConfig.headers) === null || _appConfig$headers2 === void 0 ? void 0 : (_appConfig$headers2$c = _appConfig$headers2.csp) === null || _appConfig$headers2$c === void 0 ? void 0 : _appConfig$headers2$c['connect-src'], _concatInstanceProperty(_context2 = [mcApiUrl.origin]).call(_context2, isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/")] : [])),
850
+ 'script-src': getUniqueValues((_appConfig$headers3 = appConfig.headers) === null || _appConfig$headers3 === void 0 ? void 0 : (_appConfig$headers3$c = _appConfig$headers3.csp) === null || _appConfig$headers3$c === void 0 ? void 0 : _appConfig$headers3$c['script-src'], isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/"), "".concat(trimTrailingSlash(cdnUrl.href), "/")] : []),
851
+ 'style-src': getUniqueValues((_appConfig$headers4 = appConfig.headers) === null || _appConfig$headers4 === void 0 ? void 0 : (_appConfig$headers4$c = _appConfig$headers4.csp) === null || _appConfig$headers4$c === void 0 ? void 0 : _appConfig$headers4$c['style-src'], isProd ? ["".concat(trimTrailingSlash(appUrl.href), "/"), "".concat(trimTrailingSlash(cdnUrl.href), "/")] : [])
855
852
  })
856
853
  })
857
854
  };
858
855
  return cachedConfig;
859
856
  };
860
857
 
861
- export { CLOUD_IDENTIFIERS, ENTRY_POINT_URI_PATH_REGEX, MC_API_URLS, MissingOrInvalidConfigError, getConfigPath, processConfig };
858
+ var jsdom = new JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
859
+
860
+ var DOMPurify = createDOMPurify(jsdom.window);
861
+ function sanitizeSvg(data) {
862
+ return DOMPurify.sanitize(data, {
863
+ USE_PROFILES: {
864
+ svg: true
865
+ },
866
+ RETURN_DOM: true,
867
+ FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
868
+ 'style']
869
+ }).innerHTML;
870
+ }
871
+
872
+ export { CLOUD_IDENTIFIERS, ENTRY_POINT_URI_PATH_REGEX, MC_API_URLS, MissingOrInvalidConfigError, getConfigPath, processConfig, sanitizeSvg };
@@ -1,7 +1,8 @@
1
- declare type TImplicitCustomApplicationResourceAccesses<PermissionName extends string = ''> = Record<`view` | `manage` | `view${Capitalize<PermissionName>}` | `manage${Capitalize<PermissionName>}`, string>;
2
- declare type TImplicitCustomApplicationPermissionKeys<PermissionName extends string = ''> = Record<`View` | `Manage` | `View${Capitalize<PermissionName>}` | `Manage${Capitalize<PermissionName>}`, string>;
1
+ import type { CamelCase } from './types';
2
+ declare type TImplicitCustomApplicationResourceAccesses<PermissionGroupName extends string = ''> = Record<`view` | `manage` | `view${Capitalize<CamelCase<PermissionGroupName>>}` | `manage${Capitalize<CamelCase<PermissionGroupName>>}`, string>;
3
+ declare type TImplicitCustomApplicationPermissionKeys<PermissionGroupName extends string = ''> = Record<`View` | `Manage` | `View${Capitalize<CamelCase<PermissionGroupName>>}` | `Manage${Capitalize<CamelCase<PermissionGroupName>>}`, string>;
3
4
  declare function entryPointUriPathToResourceAccesses(entryPointUriPath: string): TImplicitCustomApplicationResourceAccesses<''>;
4
- declare function entryPointUriPathToResourceAccesses<PermissionName extends string>(entryPointUriPath: string, additionalPermissionNames: PermissionName[]): TImplicitCustomApplicationResourceAccesses<PermissionName>;
5
+ declare function entryPointUriPathToResourceAccesses<PermissionGroupName extends string>(entryPointUriPath: string, permissionGroupNames: PermissionGroupName[]): TImplicitCustomApplicationResourceAccesses<PermissionGroupName>;
5
6
  declare function entryPointUriPathToPermissionKeys(entryPointUriPath: string): TImplicitCustomApplicationPermissionKeys<''>;
6
- declare function entryPointUriPathToPermissionKeys<PermissionName extends string>(entryPointUriPath: string, additionalPermissionNames: PermissionName[]): TImplicitCustomApplicationPermissionKeys<PermissionName>;
7
+ declare function entryPointUriPathToPermissionKeys<PermissionGroupName extends string>(entryPointUriPath: string, permissionGroupNames: PermissionGroupName[]): TImplicitCustomApplicationPermissionKeys<PermissionGroupName>;
7
8
  export { entryPointUriPathToResourceAccesses, entryPointUriPathToPermissionKeys, };
@@ -1,5 +1,6 @@
1
1
  export { default as processConfig } from './process-config';
2
2
  export { getConfigPath } from './load-config';
3
+ export { default as sanitizeSvg } from './sanitize-svg';
3
4
  export * from './constants';
4
5
  export * from './errors';
5
6
  export * from './types';
@@ -43,4 +43,12 @@ export declare type LoadingConfigOptions = {
43
43
  processEnv: NodeJS.ProcessEnv;
44
44
  applicationPath: string;
45
45
  };
46
+ export declare type WordSeparators = '-';
47
+ export declare type Split<S extends string, Delimiter extends string> = S extends `${infer Head}${Delimiter}${infer Tail}` ? [Head, ...Split<Tail, Delimiter>] : S extends Delimiter ? [] : [S];
48
+ declare type InnerCamelCaseStringArray<Parts extends readonly unknown[], PreviousPart> = Parts extends [`${infer FirstPart}`, ...infer RemainingParts] ? FirstPart extends undefined ? '' : FirstPart extends '' ? InnerCamelCaseStringArray<RemainingParts, PreviousPart> : `${PreviousPart extends '' ? FirstPart : Capitalize<FirstPart>}${InnerCamelCaseStringArray<RemainingParts, FirstPart>}` : '';
49
+ declare type CamelCaseStringArray<Parts extends readonly string[]> = Parts extends [
50
+ `${infer FirstPart}`,
51
+ ...infer RemainingParts
52
+ ] ? Uncapitalize<`${FirstPart}${InnerCamelCaseStringArray<RemainingParts, FirstPart>}`> : never;
53
+ export declare type CamelCase<K> = K extends string ? CamelCaseStringArray<Split<K extends Uppercase<K> ? Uppercase<K> : K, WordSeparators>> : K;
46
54
  export {};
@@ -16,7 +16,7 @@ import upperFirst from 'lodash/upperFirst';
16
16
 
17
17
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
18
 
19
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context7, _context8; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context7 = ownKeys(Object(source), !0)).call(_context7, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context8 = ownKeys(Object(source))).call(_context8, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context8, _context9; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context8 = ownKeys(Object(source), !0)).call(_context8, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context9 = ownKeys(Object(source))).call(_context9, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
20
20
 
21
21
  /**
22
22
  * The function formats the `entryPointUriPath` to a resource access key.
@@ -35,9 +35,7 @@ var formatEntryPointUriPathToResourceAccessKey = function formatEntryPointUriPat
35
35
 
36
36
  return _mapInstanceProperty(_context = _mapInstanceProperty(_context2 = entryPointUriPath // Splits the string by underscore.
37
37
  .split('_') // Uppercase the first character of each word split.
38
- ).call(_context2, function (word) {
39
- return upperFirst(word);
40
- }) // Join the words by an underscore.
38
+ ).call(_context2, upperFirst) // Join the words by an underscore.
41
39
  .join('_') // Each word is split by a hyphen.
42
40
  .split('-')).call(_context, function (word, i) {
43
41
  // Regex below checking if the character is numeric.
@@ -50,31 +48,47 @@ var formatEntryPointUriPathToResourceAccessKey = function formatEntryPointUriPat
50
48
  return upperFirst(word);
51
49
  }).join('');
52
50
  };
51
+ /**
52
+ * The function formats the permission group name to a resource access key.
53
+ * It makes the first character of the string and the next character after a special character (`-`) an uppercase.
54
+ *
55
+ * @example
56
+ * - books --> Books
57
+ * - the-books --> TheBooks
58
+ */
53
59
 
54
- function entryPointUriPathToResourceAccesses(entryPointUriPath, additionalPermissionNames) {
60
+
61
+ var formatPermissionGroupNameToResourceAccessKey = function formatPermissionGroupNameToResourceAccessKey(permissionGroupName) {
55
62
  var _context3;
56
63
 
64
+ return _mapInstanceProperty(_context3 = permissionGroupName // Each word is split by a hyphen.
65
+ .split('-')).call(_context3, upperFirst).join('');
66
+ };
67
+
68
+ function entryPointUriPathToResourceAccesses(entryPointUriPath, permissionGroupNames) {
69
+ var _context4;
70
+
57
71
  var resourceAccessKey = formatEntryPointUriPathToResourceAccessKey(entryPointUriPath);
58
72
  var defaultResourceAccesses = {
59
73
  view: "view".concat(resourceAccessKey),
60
74
  manage: "manage".concat(resourceAccessKey)
61
75
  };
62
76
 
63
- var additionalResourceAccesses = _reduceInstanceProperty(_context3 = additionalPermissionNames !== null && additionalPermissionNames !== void 0 ? additionalPermissionNames : []).call(_context3, function (resourceAccesses, permissionName) {
64
- var _context4, _context5, _objectSpread2;
77
+ var additionalResourceAccesses = _reduceInstanceProperty(_context4 = permissionGroupNames !== null && permissionGroupNames !== void 0 ? permissionGroupNames : []).call(_context4, function (resourceAccesses, permissionGroupName) {
78
+ var _context5, _context6, _objectSpread2;
65
79
 
66
- var additionalResourceAccessKey = formatEntryPointUriPathToResourceAccessKey(permissionName);
67
- return _objectSpread(_objectSpread({}, resourceAccesses), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, "view".concat(additionalResourceAccessKey), _concatInstanceProperty(_context4 = "".concat(defaultResourceAccesses.view)).call(_context4, additionalResourceAccessKey)), _defineProperty(_objectSpread2, "manage".concat(additionalResourceAccessKey), _concatInstanceProperty(_context5 = "".concat(defaultResourceAccesses.manage)).call(_context5, additionalResourceAccessKey)), _objectSpread2));
80
+ var additionalResourceAccessKey = formatPermissionGroupNameToResourceAccessKey(permissionGroupName);
81
+ return _objectSpread(_objectSpread({}, resourceAccesses), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, "view".concat(additionalResourceAccessKey), _concatInstanceProperty(_context5 = "".concat(defaultResourceAccesses.view)).call(_context5, additionalResourceAccessKey)), _defineProperty(_objectSpread2, "manage".concat(additionalResourceAccessKey), _concatInstanceProperty(_context6 = "".concat(defaultResourceAccesses.manage)).call(_context6, additionalResourceAccessKey)), _objectSpread2));
68
82
  }, {});
69
83
 
70
84
  return _objectSpread(_objectSpread({}, defaultResourceAccesses), additionalResourceAccesses);
71
85
  }
72
86
 
73
- function entryPointUriPathToPermissionKeys(entryPointUriPath, additionalPermissionNames) {
74
- var _context6;
87
+ function entryPointUriPathToPermissionKeys(entryPointUriPath, permissionGroupNames) {
88
+ var _context7;
75
89
 
76
- var resourceAccesses = entryPointUriPathToResourceAccesses(entryPointUriPath, additionalPermissionNames !== null && additionalPermissionNames !== void 0 ? additionalPermissionNames : []);
77
- return _reduceInstanceProperty(_context6 = _Object$entries(resourceAccesses)).call(_context6, function (permissionKeys, _ref) {
90
+ var resourceAccesses = entryPointUriPathToResourceAccesses(entryPointUriPath, permissionGroupNames !== null && permissionGroupNames !== void 0 ? permissionGroupNames : []);
91
+ return _reduceInstanceProperty(_context7 = _Object$entries(resourceAccesses)).call(_context7, function (permissionKeys, _ref) {
78
92
  var _ref2 = _slicedToArray(_ref, 2),
79
93
  resourceAccessKey = _ref2[0],
80
94
  resourceAccessValue = _ref2[1];
@@ -34,7 +34,7 @@ var upperFirst__default = /*#__PURE__*/_interopDefault(upperFirst);
34
34
 
35
35
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default["default"](object); if (_Object$getOwnPropertySymbols__default["default"]) { var symbols = _Object$getOwnPropertySymbols__default["default"](object); enumerableOnly && (symbols = _filterInstanceProperty__default["default"](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default["default"](object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
36
36
 
37
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context7, _context8; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty__default["default"](_context7 = ownKeys(Object(source), !0)).call(_context7, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](target, _Object$getOwnPropertyDescriptors__default["default"](source)) : _forEachInstanceProperty__default["default"](_context8 = ownKeys(Object(source))).call(_context8, function (key) { _Object$defineProperty__default["default"](target, key, _Object$getOwnPropertyDescriptor__default["default"](source, key)); }); } return target; }
37
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context8, _context9; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty__default["default"](_context8 = ownKeys(Object(source), !0)).call(_context8, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](target, _Object$getOwnPropertyDescriptors__default["default"](source)) : _forEachInstanceProperty__default["default"](_context9 = ownKeys(Object(source))).call(_context9, function (key) { _Object$defineProperty__default["default"](target, key, _Object$getOwnPropertyDescriptor__default["default"](source, key)); }); } return target; }
38
38
 
39
39
  /**
40
40
  * The function formats the `entryPointUriPath` to a resource access key.
@@ -53,9 +53,7 @@ var formatEntryPointUriPathToResourceAccessKey = function formatEntryPointUriPat
53
53
 
54
54
  return _mapInstanceProperty__default["default"](_context = _mapInstanceProperty__default["default"](_context2 = entryPointUriPath // Splits the string by underscore.
55
55
  .split('_') // Uppercase the first character of each word split.
56
- ).call(_context2, function (word) {
57
- return upperFirst__default["default"](word);
58
- }) // Join the words by an underscore.
56
+ ).call(_context2, upperFirst__default["default"]) // Join the words by an underscore.
59
57
  .join('_') // Each word is split by a hyphen.
60
58
  .split('-')).call(_context, function (word, i) {
61
59
  // Regex below checking if the character is numeric.
@@ -68,31 +66,47 @@ var formatEntryPointUriPathToResourceAccessKey = function formatEntryPointUriPat
68
66
  return upperFirst__default["default"](word);
69
67
  }).join('');
70
68
  };
69
+ /**
70
+ * The function formats the permission group name to a resource access key.
71
+ * It makes the first character of the string and the next character after a special character (`-`) an uppercase.
72
+ *
73
+ * @example
74
+ * - books --> Books
75
+ * - the-books --> TheBooks
76
+ */
71
77
 
72
- function entryPointUriPathToResourceAccesses(entryPointUriPath, additionalPermissionNames) {
78
+
79
+ var formatPermissionGroupNameToResourceAccessKey = function formatPermissionGroupNameToResourceAccessKey(permissionGroupName) {
73
80
  var _context3;
74
81
 
82
+ return _mapInstanceProperty__default["default"](_context3 = permissionGroupName // Each word is split by a hyphen.
83
+ .split('-')).call(_context3, upperFirst__default["default"]).join('');
84
+ };
85
+
86
+ function entryPointUriPathToResourceAccesses(entryPointUriPath, permissionGroupNames) {
87
+ var _context4;
88
+
75
89
  var resourceAccessKey = formatEntryPointUriPathToResourceAccessKey(entryPointUriPath);
76
90
  var defaultResourceAccesses = {
77
91
  view: "view".concat(resourceAccessKey),
78
92
  manage: "manage".concat(resourceAccessKey)
79
93
  };
80
94
 
81
- var additionalResourceAccesses = _reduceInstanceProperty__default["default"](_context3 = additionalPermissionNames !== null && additionalPermissionNames !== void 0 ? additionalPermissionNames : []).call(_context3, function (resourceAccesses, permissionName) {
82
- var _context4, _context5, _objectSpread2;
95
+ var additionalResourceAccesses = _reduceInstanceProperty__default["default"](_context4 = permissionGroupNames !== null && permissionGroupNames !== void 0 ? permissionGroupNames : []).call(_context4, function (resourceAccesses, permissionGroupName) {
96
+ var _context5, _context6, _objectSpread2;
83
97
 
84
- var additionalResourceAccessKey = formatEntryPointUriPathToResourceAccessKey(permissionName);
85
- return _objectSpread(_objectSpread({}, resourceAccesses), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, "view".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context4 = "".concat(defaultResourceAccesses.view)).call(_context4, additionalResourceAccessKey)), _defineProperty(_objectSpread2, "manage".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context5 = "".concat(defaultResourceAccesses.manage)).call(_context5, additionalResourceAccessKey)), _objectSpread2));
98
+ var additionalResourceAccessKey = formatPermissionGroupNameToResourceAccessKey(permissionGroupName);
99
+ return _objectSpread(_objectSpread({}, resourceAccesses), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, "view".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context5 = "".concat(defaultResourceAccesses.view)).call(_context5, additionalResourceAccessKey)), _defineProperty(_objectSpread2, "manage".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context6 = "".concat(defaultResourceAccesses.manage)).call(_context6, additionalResourceAccessKey)), _objectSpread2));
86
100
  }, {});
87
101
 
88
102
  return _objectSpread(_objectSpread({}, defaultResourceAccesses), additionalResourceAccesses);
89
103
  }
90
104
 
91
- function entryPointUriPathToPermissionKeys(entryPointUriPath, additionalPermissionNames) {
92
- var _context6;
105
+ function entryPointUriPathToPermissionKeys(entryPointUriPath, permissionGroupNames) {
106
+ var _context7;
93
107
 
94
- var resourceAccesses = entryPointUriPathToResourceAccesses(entryPointUriPath, additionalPermissionNames !== null && additionalPermissionNames !== void 0 ? additionalPermissionNames : []);
95
- return _reduceInstanceProperty__default["default"](_context6 = _Object$entries__default["default"](resourceAccesses)).call(_context6, function (permissionKeys, _ref) {
108
+ var resourceAccesses = entryPointUriPathToResourceAccesses(entryPointUriPath, permissionGroupNames !== null && permissionGroupNames !== void 0 ? permissionGroupNames : []);
109
+ return _reduceInstanceProperty__default["default"](_context7 = _Object$entries__default["default"](resourceAccesses)).call(_context7, function (permissionKeys, _ref) {
96
110
  var _ref2 = _slicedToArray(_ref, 2),
97
111
  resourceAccessKey = _ref2[0],
98
112
  resourceAccessValue = _ref2[1];
@@ -34,7 +34,7 @@ var upperFirst__default = /*#__PURE__*/_interopDefault(upperFirst);
34
34
 
35
35
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default["default"](object); if (_Object$getOwnPropertySymbols__default["default"]) { var symbols = _Object$getOwnPropertySymbols__default["default"](object); enumerableOnly && (symbols = _filterInstanceProperty__default["default"](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default["default"](object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
36
36
 
37
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context7, _context8; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty__default["default"](_context7 = ownKeys(Object(source), !0)).call(_context7, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](target, _Object$getOwnPropertyDescriptors__default["default"](source)) : _forEachInstanceProperty__default["default"](_context8 = ownKeys(Object(source))).call(_context8, function (key) { _Object$defineProperty__default["default"](target, key, _Object$getOwnPropertyDescriptor__default["default"](source, key)); }); } return target; }
37
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context8, _context9; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty__default["default"](_context8 = ownKeys(Object(source), !0)).call(_context8, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](target, _Object$getOwnPropertyDescriptors__default["default"](source)) : _forEachInstanceProperty__default["default"](_context9 = ownKeys(Object(source))).call(_context9, function (key) { _Object$defineProperty__default["default"](target, key, _Object$getOwnPropertyDescriptor__default["default"](source, key)); }); } return target; }
38
38
 
39
39
  /**
40
40
  * The function formats the `entryPointUriPath` to a resource access key.
@@ -53,9 +53,7 @@ var formatEntryPointUriPathToResourceAccessKey = function formatEntryPointUriPat
53
53
 
54
54
  return _mapInstanceProperty__default["default"](_context = _mapInstanceProperty__default["default"](_context2 = entryPointUriPath // Splits the string by underscore.
55
55
  .split('_') // Uppercase the first character of each word split.
56
- ).call(_context2, function (word) {
57
- return upperFirst__default["default"](word);
58
- }) // Join the words by an underscore.
56
+ ).call(_context2, upperFirst__default["default"]) // Join the words by an underscore.
59
57
  .join('_') // Each word is split by a hyphen.
60
58
  .split('-')).call(_context, function (word, i) {
61
59
  // Regex below checking if the character is numeric.
@@ -68,31 +66,47 @@ var formatEntryPointUriPathToResourceAccessKey = function formatEntryPointUriPat
68
66
  return upperFirst__default["default"](word);
69
67
  }).join('');
70
68
  };
69
+ /**
70
+ * The function formats the permission group name to a resource access key.
71
+ * It makes the first character of the string and the next character after a special character (`-`) an uppercase.
72
+ *
73
+ * @example
74
+ * - books --> Books
75
+ * - the-books --> TheBooks
76
+ */
71
77
 
72
- function entryPointUriPathToResourceAccesses(entryPointUriPath, additionalPermissionNames) {
78
+
79
+ var formatPermissionGroupNameToResourceAccessKey = function formatPermissionGroupNameToResourceAccessKey(permissionGroupName) {
73
80
  var _context3;
74
81
 
82
+ return _mapInstanceProperty__default["default"](_context3 = permissionGroupName // Each word is split by a hyphen.
83
+ .split('-')).call(_context3, upperFirst__default["default"]).join('');
84
+ };
85
+
86
+ function entryPointUriPathToResourceAccesses(entryPointUriPath, permissionGroupNames) {
87
+ var _context4;
88
+
75
89
  var resourceAccessKey = formatEntryPointUriPathToResourceAccessKey(entryPointUriPath);
76
90
  var defaultResourceAccesses = {
77
91
  view: "view".concat(resourceAccessKey),
78
92
  manage: "manage".concat(resourceAccessKey)
79
93
  };
80
94
 
81
- var additionalResourceAccesses = _reduceInstanceProperty__default["default"](_context3 = additionalPermissionNames !== null && additionalPermissionNames !== void 0 ? additionalPermissionNames : []).call(_context3, function (resourceAccesses, permissionName) {
82
- var _context4, _context5, _objectSpread2;
95
+ var additionalResourceAccesses = _reduceInstanceProperty__default["default"](_context4 = permissionGroupNames !== null && permissionGroupNames !== void 0 ? permissionGroupNames : []).call(_context4, function (resourceAccesses, permissionGroupName) {
96
+ var _context5, _context6, _objectSpread2;
83
97
 
84
- var additionalResourceAccessKey = formatEntryPointUriPathToResourceAccessKey(permissionName);
85
- return _objectSpread(_objectSpread({}, resourceAccesses), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, "view".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context4 = "".concat(defaultResourceAccesses.view)).call(_context4, additionalResourceAccessKey)), _defineProperty(_objectSpread2, "manage".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context5 = "".concat(defaultResourceAccesses.manage)).call(_context5, additionalResourceAccessKey)), _objectSpread2));
98
+ var additionalResourceAccessKey = formatPermissionGroupNameToResourceAccessKey(permissionGroupName);
99
+ return _objectSpread(_objectSpread({}, resourceAccesses), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, "view".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context5 = "".concat(defaultResourceAccesses.view)).call(_context5, additionalResourceAccessKey)), _defineProperty(_objectSpread2, "manage".concat(additionalResourceAccessKey), _concatInstanceProperty__default["default"](_context6 = "".concat(defaultResourceAccesses.manage)).call(_context6, additionalResourceAccessKey)), _objectSpread2));
86
100
  }, {});
87
101
 
88
102
  return _objectSpread(_objectSpread({}, defaultResourceAccesses), additionalResourceAccesses);
89
103
  }
90
104
 
91
- function entryPointUriPathToPermissionKeys(entryPointUriPath, additionalPermissionNames) {
92
- var _context6;
105
+ function entryPointUriPathToPermissionKeys(entryPointUriPath, permissionGroupNames) {
106
+ var _context7;
93
107
 
94
- var resourceAccesses = entryPointUriPathToResourceAccesses(entryPointUriPath, additionalPermissionNames !== null && additionalPermissionNames !== void 0 ? additionalPermissionNames : []);
95
- return _reduceInstanceProperty__default["default"](_context6 = _Object$entries__default["default"](resourceAccesses)).call(_context6, function (permissionKeys, _ref) {
108
+ var resourceAccesses = entryPointUriPathToResourceAccesses(entryPointUriPath, permissionGroupNames !== null && permissionGroupNames !== void 0 ? permissionGroupNames : []);
109
+ return _reduceInstanceProperty__default["default"](_context7 = _Object$entries__default["default"](resourceAccesses)).call(_context7, function (permissionKeys, _ref) {
96
110
  var _ref2 = _slicedToArray(_ref, 2),
97
111
  resourceAccessKey = _ref2[0],
98
112
  resourceAccessValue = _ref2[1];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commercetools-frontend/application-config",
3
- "version": "21.16.0",
3
+ "version": "21.18.0",
4
4
  "description": "Configuration utilities for building Custom Applications",
5
5
  "bugs": "https://github.com/commercetools/merchant-center-application-kit/issues",
6
6
  "repository": {
@@ -37,7 +37,7 @@
37
37
  "@babel/register": "^7.18.9",
38
38
  "@babel/runtime": "^7.19.0",
39
39
  "@babel/runtime-corejs3": "^7.19.0",
40
- "@commercetools-frontend/babel-preset-mc-app": "21.16.0",
40
+ "@commercetools-frontend/babel-preset-mc-app": "21.18.0",
41
41
  "ajv": "8.11.0",
42
42
  "core-js": "^3.25.1",
43
43
  "cosmiconfig": "7.0.1",
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var formatters = require('../../dist/formatters-7e163a9c.cjs.dev.js');
5
+ var formatters = require('../../dist/formatters-3cfe4466.cjs.dev.js');
6
6
  require('@babel/runtime-corejs3/core-js-stable/object/keys');
7
7
  require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
8
8
  require('@babel/runtime-corejs3/core-js-stable/instance/filter');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var formatters = require('../../dist/formatters-5f8a358d.cjs.prod.js');
5
+ var formatters = require('../../dist/formatters-80d55e3e.cjs.prod.js');
6
6
  require('@babel/runtime-corejs3/core-js-stable/object/keys');
7
7
  require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
8
8
  require('@babel/runtime-corejs3/core-js-stable/instance/filter');
@@ -1,4 +1,4 @@
1
- export { a as entryPointUriPathToPermissionKeys, e as entryPointUriPathToResourceAccesses } from '../../dist/formatters-9d35d68e.esm.js';
1
+ export { a as entryPointUriPathToPermissionKeys, e as entryPointUriPathToResourceAccesses } from '../../dist/formatters-0d13ed2a.esm.js';
2
2
  import '@babel/runtime-corejs3/core-js-stable/object/keys';
3
3
  import '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
4
4
  import '@babel/runtime-corejs3/core-js-stable/instance/filter';