@commercetools-frontend/application-config 21.3.4 → 21.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commercetools-frontend-application-config.cjs.dev.js +36 -2
- package/dist/commercetools-frontend-application-config.cjs.prod.js +36 -2
- package/dist/commercetools-frontend-application-config.esm.js +34 -2
- package/dist/declarations/src/sanitize-svg.d.ts +1 -0
- package/dist/declarations/src/types.d.ts +2 -2
- package/dist/declarations/src/validations.d.ts +3 -0
- package/package.json +5 -1
- package/schema.json +1 -1
- package/tsconfig-mc-app.json +31 -0
- package/dist/declarations/src/validate-config.d.ts +0 -3
|
@@ -27,6 +27,7 @@ var _possibleConstructorReturn = require('@babel/runtime-corejs3/helpers/possibl
|
|
|
27
27
|
var _getPrototypeOf = require('@babel/runtime-corejs3/helpers/getPrototypeOf');
|
|
28
28
|
var _wrapNativeSuper = require('@babel/runtime-corejs3/helpers/wrapNativeSuper');
|
|
29
29
|
var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
|
|
30
|
+
var _Set = require('@babel/runtime-corejs3/core-js-stable/set');
|
|
30
31
|
var Ajv = require('ajv');
|
|
31
32
|
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
32
33
|
var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
|
|
@@ -37,6 +38,8 @@ var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/i
|
|
|
37
38
|
var uniq = require('lodash/uniq');
|
|
38
39
|
var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
|
|
39
40
|
var formatters = require('./formatters-41584280.cjs.dev.js');
|
|
41
|
+
var createDOMPurify = require('dompurify');
|
|
42
|
+
var jsdom$1 = require('jsdom');
|
|
40
43
|
require('lodash/upperFirst');
|
|
41
44
|
|
|
42
45
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
@@ -56,6 +59,7 @@ var omitEmpty__default = /*#__PURE__*/_interopDefault(omitEmpty);
|
|
|
56
59
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
57
60
|
var _Reflect$construct__default = /*#__PURE__*/_interopDefault(_Reflect$construct);
|
|
58
61
|
var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
|
|
62
|
+
var _Set__default = /*#__PURE__*/_interopDefault(_Set);
|
|
59
63
|
var Ajv__default = /*#__PURE__*/_interopDefault(Ajv);
|
|
60
64
|
var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
|
|
61
65
|
var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
|
|
@@ -63,6 +67,7 @@ var _Object$values__default = /*#__PURE__*/_interopDefault(_Object$values);
|
|
|
63
67
|
var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
|
|
64
68
|
var uniq__default = /*#__PURE__*/_interopDefault(uniq);
|
|
65
69
|
var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
|
|
70
|
+
var createDOMPurify__default = /*#__PURE__*/_interopDefault(createDOMPurify);
|
|
66
71
|
|
|
67
72
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = _Reflect$construct__default["default"](Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
68
73
|
|
|
@@ -182,7 +187,7 @@ var schemaJson = {
|
|
|
182
187
|
oneOf: [
|
|
183
188
|
{
|
|
184
189
|
type: "string",
|
|
185
|
-
pattern: "^[^\\-_]([0-9a-z]|[\\-_](?![\\-_])){
|
|
190
|
+
pattern: "^[^\\-_#]([0-9a-z]|[\\-_](?![\\-_])){0,62}[^\\-_#]$"
|
|
186
191
|
},
|
|
187
192
|
{
|
|
188
193
|
$ref: "#/definitions/envVariablePlaceholder"
|
|
@@ -524,6 +529,21 @@ var validateConfig = function validateConfig(config) {
|
|
|
524
529
|
throw new Error(printErrors(validate.errors));
|
|
525
530
|
}
|
|
526
531
|
};
|
|
532
|
+
var validateSubmenuLinks = function validateSubmenuLinks(config) {
|
|
533
|
+
var _context4;
|
|
534
|
+
|
|
535
|
+
var uriPathSet = new _Set__default["default"]();
|
|
536
|
+
|
|
537
|
+
_forEachInstanceProperty__default["default"](_context4 = config.submenuLinks).call(_context4, function (_ref) {
|
|
538
|
+
var uriPath = _ref.uriPath;
|
|
539
|
+
|
|
540
|
+
if (uriPathSet.has(uriPath)) {
|
|
541
|
+
throw new Error('Duplicate URI path. Every submenu link must have a unique URI path value');
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
uriPathSet.add(uriPath);
|
|
545
|
+
});
|
|
546
|
+
};
|
|
527
547
|
|
|
528
548
|
/**
|
|
529
549
|
* NOTE:
|
|
@@ -715,6 +735,19 @@ var getOrThrow = function getOrThrow(fn, errorMessage) {
|
|
|
715
735
|
}
|
|
716
736
|
};
|
|
717
737
|
|
|
738
|
+
var jsdom = new jsdom$1.JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
|
|
739
|
+
|
|
740
|
+
var DOMPurify = createDOMPurify__default["default"](jsdom.window);
|
|
741
|
+
function sanitizeSvg(data) {
|
|
742
|
+
return DOMPurify.sanitize(data, {
|
|
743
|
+
USE_PROFILES: {
|
|
744
|
+
svg: true
|
|
745
|
+
},
|
|
746
|
+
FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
|
|
747
|
+
'style']
|
|
748
|
+
});
|
|
749
|
+
}
|
|
750
|
+
|
|
718
751
|
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; }
|
|
719
752
|
|
|
720
753
|
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; }
|
|
@@ -739,6 +772,7 @@ function transformCustomApplicationConfigToData(appConfig) {
|
|
|
739
772
|
var _context2;
|
|
740
773
|
|
|
741
774
|
var permissionKeys = formatters.entryPointUriPathToResourceAccesses(appConfig.entryPointUriPath);
|
|
775
|
+
validateSubmenuLinks(appConfig);
|
|
742
776
|
return {
|
|
743
777
|
id: appConfig.env.production.applicationId,
|
|
744
778
|
name: appConfig.name,
|
|
@@ -752,7 +786,7 @@ function transformCustomApplicationConfigToData(appConfig) {
|
|
|
752
786
|
name: permissionKeys.manage,
|
|
753
787
|
oAuthScopes: appConfig.oAuthScopes.manage
|
|
754
788
|
}],
|
|
755
|
-
icon: appConfig.icon,
|
|
789
|
+
icon: sanitizeSvg(appConfig.icon),
|
|
756
790
|
mainMenuLink: appConfig.mainMenuLink,
|
|
757
791
|
submenuLinks: _mapInstanceProperty__default["default"](_context2 = appConfig.submenuLinks).call(_context2, function (submenuLink) {
|
|
758
792
|
return _objectSpread$1(_objectSpread$1({}, submenuLink), {}, {
|
|
@@ -27,6 +27,7 @@ var _possibleConstructorReturn = require('@babel/runtime-corejs3/helpers/possibl
|
|
|
27
27
|
var _getPrototypeOf = require('@babel/runtime-corejs3/helpers/getPrototypeOf');
|
|
28
28
|
var _wrapNativeSuper = require('@babel/runtime-corejs3/helpers/wrapNativeSuper');
|
|
29
29
|
var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
|
|
30
|
+
var _Set = require('@babel/runtime-corejs3/core-js-stable/set');
|
|
30
31
|
var Ajv = require('ajv');
|
|
31
32
|
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
32
33
|
var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
|
|
@@ -37,6 +38,8 @@ var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/i
|
|
|
37
38
|
var uniq = require('lodash/uniq');
|
|
38
39
|
var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
|
|
39
40
|
var formatters = require('./formatters-40251cfd.cjs.prod.js');
|
|
41
|
+
var createDOMPurify = require('dompurify');
|
|
42
|
+
var jsdom$1 = require('jsdom');
|
|
40
43
|
require('lodash/upperFirst');
|
|
41
44
|
|
|
42
45
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
@@ -56,6 +59,7 @@ var omitEmpty__default = /*#__PURE__*/_interopDefault(omitEmpty);
|
|
|
56
59
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
57
60
|
var _Reflect$construct__default = /*#__PURE__*/_interopDefault(_Reflect$construct);
|
|
58
61
|
var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
|
|
62
|
+
var _Set__default = /*#__PURE__*/_interopDefault(_Set);
|
|
59
63
|
var Ajv__default = /*#__PURE__*/_interopDefault(Ajv);
|
|
60
64
|
var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
|
|
61
65
|
var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
|
|
@@ -63,6 +67,7 @@ var _Object$values__default = /*#__PURE__*/_interopDefault(_Object$values);
|
|
|
63
67
|
var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
|
|
64
68
|
var uniq__default = /*#__PURE__*/_interopDefault(uniq);
|
|
65
69
|
var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
|
|
70
|
+
var createDOMPurify__default = /*#__PURE__*/_interopDefault(createDOMPurify);
|
|
66
71
|
|
|
67
72
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = _Reflect$construct__default["default"](Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
68
73
|
|
|
@@ -182,7 +187,7 @@ var schemaJson = {
|
|
|
182
187
|
oneOf: [
|
|
183
188
|
{
|
|
184
189
|
type: "string",
|
|
185
|
-
pattern: "^[^\\-_]([0-9a-z]|[\\-_](?![\\-_])){
|
|
190
|
+
pattern: "^[^\\-_#]([0-9a-z]|[\\-_](?![\\-_])){0,62}[^\\-_#]$"
|
|
186
191
|
},
|
|
187
192
|
{
|
|
188
193
|
$ref: "#/definitions/envVariablePlaceholder"
|
|
@@ -524,6 +529,21 @@ var validateConfig = function validateConfig(config) {
|
|
|
524
529
|
throw new Error(printErrors(validate.errors));
|
|
525
530
|
}
|
|
526
531
|
};
|
|
532
|
+
var validateSubmenuLinks = function validateSubmenuLinks(config) {
|
|
533
|
+
var _context4;
|
|
534
|
+
|
|
535
|
+
var uriPathSet = new _Set__default["default"]();
|
|
536
|
+
|
|
537
|
+
_forEachInstanceProperty__default["default"](_context4 = config.submenuLinks).call(_context4, function (_ref) {
|
|
538
|
+
var uriPath = _ref.uriPath;
|
|
539
|
+
|
|
540
|
+
if (uriPathSet.has(uriPath)) {
|
|
541
|
+
throw new Error('Duplicate URI path. Every submenu link must have a unique URI path value');
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
uriPathSet.add(uriPath);
|
|
545
|
+
});
|
|
546
|
+
};
|
|
527
547
|
|
|
528
548
|
/**
|
|
529
549
|
* NOTE:
|
|
@@ -715,6 +735,19 @@ var getOrThrow = function getOrThrow(fn, errorMessage) {
|
|
|
715
735
|
}
|
|
716
736
|
};
|
|
717
737
|
|
|
738
|
+
var jsdom = new jsdom$1.JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
|
|
739
|
+
|
|
740
|
+
var DOMPurify = createDOMPurify__default["default"](jsdom.window);
|
|
741
|
+
function sanitizeSvg(data) {
|
|
742
|
+
return DOMPurify.sanitize(data, {
|
|
743
|
+
USE_PROFILES: {
|
|
744
|
+
svg: true
|
|
745
|
+
},
|
|
746
|
+
FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
|
|
747
|
+
'style']
|
|
748
|
+
});
|
|
749
|
+
}
|
|
750
|
+
|
|
718
751
|
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; }
|
|
719
752
|
|
|
720
753
|
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; }
|
|
@@ -739,6 +772,7 @@ function transformCustomApplicationConfigToData(appConfig) {
|
|
|
739
772
|
var _context2;
|
|
740
773
|
|
|
741
774
|
var permissionKeys = formatters.entryPointUriPathToResourceAccesses(appConfig.entryPointUriPath);
|
|
775
|
+
validateSubmenuLinks(appConfig);
|
|
742
776
|
return {
|
|
743
777
|
id: appConfig.env.production.applicationId,
|
|
744
778
|
name: appConfig.name,
|
|
@@ -752,7 +786,7 @@ function transformCustomApplicationConfigToData(appConfig) {
|
|
|
752
786
|
name: permissionKeys.manage,
|
|
753
787
|
oAuthScopes: appConfig.oAuthScopes.manage
|
|
754
788
|
}],
|
|
755
|
-
icon: appConfig.icon,
|
|
789
|
+
icon: sanitizeSvg(appConfig.icon),
|
|
756
790
|
mainMenuLink: appConfig.mainMenuLink,
|
|
757
791
|
submenuLinks: _mapInstanceProperty__default["default"](_context2 = appConfig.submenuLinks).call(_context2, function (submenuLink) {
|
|
758
792
|
return _objectSpread$1(_objectSpread$1({}, submenuLink), {}, {
|
|
@@ -23,6 +23,7 @@ import _possibleConstructorReturn from '@babel/runtime-corejs3/helpers/esm/possi
|
|
|
23
23
|
import _getPrototypeOf from '@babel/runtime-corejs3/helpers/esm/getPrototypeOf';
|
|
24
24
|
import _wrapNativeSuper from '@babel/runtime-corejs3/helpers/esm/wrapNativeSuper';
|
|
25
25
|
import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
|
|
26
|
+
import _Set from '@babel/runtime-corejs3/core-js-stable/set';
|
|
26
27
|
import Ajv from 'ajv';
|
|
27
28
|
import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
|
|
28
29
|
import _trimInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/trim';
|
|
@@ -33,6 +34,8 @@ import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/ins
|
|
|
33
34
|
import uniq from 'lodash/uniq';
|
|
34
35
|
import _startsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
|
|
35
36
|
import { e as entryPointUriPathToResourceAccesses } from './formatters-62af6993.esm.js';
|
|
37
|
+
import createDOMPurify from 'dompurify';
|
|
38
|
+
import { JSDOM } from 'jsdom';
|
|
36
39
|
import 'lodash/upperFirst';
|
|
37
40
|
|
|
38
41
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
@@ -153,7 +156,7 @@ var schemaJson = {
|
|
|
153
156
|
oneOf: [
|
|
154
157
|
{
|
|
155
158
|
type: "string",
|
|
156
|
-
pattern: "^[^\\-_]([0-9a-z]|[\\-_](?![\\-_])){
|
|
159
|
+
pattern: "^[^\\-_#]([0-9a-z]|[\\-_](?![\\-_])){0,62}[^\\-_#]$"
|
|
157
160
|
},
|
|
158
161
|
{
|
|
159
162
|
$ref: "#/definitions/envVariablePlaceholder"
|
|
@@ -495,6 +498,21 @@ var validateConfig = function validateConfig(config) {
|
|
|
495
498
|
throw new Error(printErrors(validate.errors));
|
|
496
499
|
}
|
|
497
500
|
};
|
|
501
|
+
var validateSubmenuLinks = function validateSubmenuLinks(config) {
|
|
502
|
+
var _context4;
|
|
503
|
+
|
|
504
|
+
var uriPathSet = new _Set();
|
|
505
|
+
|
|
506
|
+
_forEachInstanceProperty(_context4 = config.submenuLinks).call(_context4, function (_ref) {
|
|
507
|
+
var uriPath = _ref.uriPath;
|
|
508
|
+
|
|
509
|
+
if (uriPathSet.has(uriPath)) {
|
|
510
|
+
throw new Error('Duplicate URI path. Every submenu link must have a unique URI path value');
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
uriPathSet.add(uriPath);
|
|
514
|
+
});
|
|
515
|
+
};
|
|
498
516
|
|
|
499
517
|
/**
|
|
500
518
|
* NOTE:
|
|
@@ -686,6 +704,19 @@ var getOrThrow = function getOrThrow(fn, errorMessage) {
|
|
|
686
704
|
}
|
|
687
705
|
};
|
|
688
706
|
|
|
707
|
+
var jsdom = new JSDOM(''); // @ts-expect-error: jsdom returns DOMWindow, which doesn't match Window dompurify expects
|
|
708
|
+
|
|
709
|
+
var DOMPurify = createDOMPurify(jsdom.window);
|
|
710
|
+
function sanitizeSvg(data) {
|
|
711
|
+
return DOMPurify.sanitize(data, {
|
|
712
|
+
USE_PROFILES: {
|
|
713
|
+
svg: true
|
|
714
|
+
},
|
|
715
|
+
FORBID_ATTR: [// To avoid injection by using `style="filter:url(\"data:image/svg+xml,<svg`
|
|
716
|
+
'style']
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
|
|
689
720
|
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; }
|
|
690
721
|
|
|
691
722
|
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; }
|
|
@@ -710,6 +741,7 @@ function transformCustomApplicationConfigToData(appConfig) {
|
|
|
710
741
|
var _context2;
|
|
711
742
|
|
|
712
743
|
var permissionKeys = entryPointUriPathToResourceAccesses(appConfig.entryPointUriPath);
|
|
744
|
+
validateSubmenuLinks(appConfig);
|
|
713
745
|
return {
|
|
714
746
|
id: appConfig.env.production.applicationId,
|
|
715
747
|
name: appConfig.name,
|
|
@@ -723,7 +755,7 @@ function transformCustomApplicationConfigToData(appConfig) {
|
|
|
723
755
|
name: permissionKeys.manage,
|
|
724
756
|
oAuthScopes: appConfig.oAuthScopes.manage
|
|
725
757
|
}],
|
|
726
|
-
icon: appConfig.icon,
|
|
758
|
+
icon: sanitizeSvg(appConfig.icon),
|
|
727
759
|
mainMenuLink: appConfig.mainMenuLink,
|
|
728
760
|
submenuLinks: _mapInstanceProperty(_context2 = appConfig.submenuLinks).call(_context2, function (submenuLink) {
|
|
729
761
|
return _objectSpread$1(_objectSpread$1({}, submenuLink), {}, {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function sanitizeSvg(data: string): string;
|
|
@@ -34,9 +34,9 @@ export declare type CustomApplicationData = {
|
|
|
34
34
|
mainMenuLink: CustomApplicationMenuLinkData;
|
|
35
35
|
submenuLinks: CustomApplicationSubmenuLinkData[];
|
|
36
36
|
};
|
|
37
|
-
export declare type ApplicationRuntimeConfig = {
|
|
37
|
+
export declare type ApplicationRuntimeConfig<AdditionalEnvironmentProperties extends {} = {}> = {
|
|
38
38
|
data: CustomApplicationData;
|
|
39
|
-
env: ApplicationWindow['app'];
|
|
39
|
+
env: AdditionalEnvironmentProperties & ApplicationWindow['app'];
|
|
40
40
|
headers: JSONSchemaForCustomApplicationConfigurationFiles['headers'];
|
|
41
41
|
};
|
|
42
42
|
export declare type LoadingConfigOptions = {
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { JSONSchemaForCustomApplicationConfigurationFiles } from './schema';
|
|
2
|
+
export declare const validateConfig: (config: JSONSchemaForCustomApplicationConfigurationFiles) => void;
|
|
3
|
+
export declare const validateSubmenuLinks: (config: JSONSchemaForCustomApplicationConfigurationFiles) => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commercetools-frontend/application-config",
|
|
3
|
-
"version": "21.
|
|
3
|
+
"version": "21.7.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": {
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"ssr",
|
|
25
25
|
"scripts",
|
|
26
26
|
"schema.json",
|
|
27
|
+
"tsconfig-mc-app.json",
|
|
27
28
|
"package.json",
|
|
28
29
|
"LICENSE",
|
|
29
30
|
"README.md"
|
|
@@ -39,10 +40,13 @@
|
|
|
39
40
|
"ajv": "8.11.0",
|
|
40
41
|
"core-js": "^3.21.1",
|
|
41
42
|
"cosmiconfig": "7.0.1",
|
|
43
|
+
"dompurify": "^2.3.6",
|
|
44
|
+
"jsdom": "^19.0.0",
|
|
42
45
|
"lodash": "4.17.21",
|
|
43
46
|
"omit-empty-es": "1.1.3"
|
|
44
47
|
},
|
|
45
48
|
"devDependencies": {
|
|
49
|
+
"@types/jsdom": "^16.2.14",
|
|
46
50
|
"json-schema-to-typescript": "10.1.5",
|
|
47
51
|
"shelljs": "0.8.5"
|
|
48
52
|
},
|
package/schema.json
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/tsconfig",
|
|
3
|
+
"display": "Custom Application",
|
|
4
|
+
|
|
5
|
+
"compilerOptions": {
|
|
6
|
+
"allowJs": false,
|
|
7
|
+
"allowSyntheticDefaultImports": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"importHelpers": true,
|
|
10
|
+
"isolatedModules": true,
|
|
11
|
+
"jsx": "react-jsx",
|
|
12
|
+
"jsxImportSource": "@emotion/react",
|
|
13
|
+
"lib": ["ESNext", "DOM"],
|
|
14
|
+
"module": "ESNext",
|
|
15
|
+
"moduleResolution": "Node",
|
|
16
|
+
"noFallthroughCasesInSwitch": true,
|
|
17
|
+
"noImplicitAny": true,
|
|
18
|
+
"noImplicitReturns": true,
|
|
19
|
+
"noImplicitThis": true,
|
|
20
|
+
"noUnusedLocals": true,
|
|
21
|
+
"noUnusedParameters": true,
|
|
22
|
+
"preserveSymlinks": true,
|
|
23
|
+
"removeComments": true,
|
|
24
|
+
"resolveJsonModule": true,
|
|
25
|
+
"sourceMap": true,
|
|
26
|
+
"strict": true,
|
|
27
|
+
"strictNullChecks": true,
|
|
28
|
+
"stripInternal": true,
|
|
29
|
+
"target": "ES2022"
|
|
30
|
+
}
|
|
31
|
+
}
|