@qrvey/widget-configurability 0.0.0-beta.4589 → 0.0.0-beta.4657
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/README.md +53 -0
- package/dist/cjs/index.js +12 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/metadata/customization-metadata.js +241 -0
- package/dist/cjs/metadata/customization-metadata.js.map +1 -0
- package/dist/cjs/metadata/index.js +11 -0
- package/dist/cjs/metadata/index.js.map +1 -0
- package/dist/cjs/metadata/labels/chart-panel.labels.js +56 -0
- package/dist/cjs/metadata/labels/chart-panel.labels.js.map +1 -0
- package/dist/cjs/metadata/labels/dashboard.labels.js +207 -0
- package/dist/cjs/metadata/labels/dashboard.labels.js.map +1 -0
- package/dist/cjs/metadata/metadata.models.js +3 -0
- package/dist/cjs/metadata/metadata.models.js.map +1 -0
- package/dist/cjs/models/remote.models.js +3 -0
- package/dist/cjs/models/remote.models.js.map +1 -0
- package/dist/cjs/models/validation.models.js +3 -0
- package/dist/cjs/models/validation.models.js.map +1 -0
- package/dist/cjs/remote/remote-customization.loader.js +213 -0
- package/dist/cjs/remote/remote-customization.loader.js.map +1 -0
- package/dist/cjs/structural-manager.js +35 -2
- package/dist/cjs/structural-manager.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/utils/defaults.helpers.js +3 -0
- package/dist/cjs/utils/defaults.helpers.js.map +1 -1
- package/dist/cjs/utils/layers.helpers.js +178 -0
- package/dist/cjs/utils/layers.helpers.js.map +1 -0
- package/dist/cjs/utils/logger.helpers.js +10 -0
- package/dist/cjs/utils/logger.helpers.js.map +1 -0
- package/dist/cjs/utils/scope.helpers.js +4 -1
- package/dist/cjs/utils/scope.helpers.js.map +1 -1
- package/dist/cjs/validation/customization.validator.js +366 -0
- package/dist/cjs/validation/customization.validator.js.map +1 -0
- package/dist/esm/index.mjs +846 -28
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/metadata.mjs +2750 -0
- package/dist/esm/metadata.mjs.map +1 -0
- package/dist/types/customization.models-CCSWjfb2.d.ts +47 -0
- package/dist/types/index.d.ts +98 -47
- package/dist/types/metadata.d.ts +59 -0
- package/package.json +7 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSubmodulesKey = exports.isPlainObject = void 0;
|
|
4
|
+
exports.normalizeLayer = normalizeLayer;
|
|
5
|
+
exports.mergeLayerDefaults = mergeLayerDefaults;
|
|
6
|
+
exports.intersectViewMaps = intersectViewMaps;
|
|
7
|
+
exports.collectSubmoduleLayers = collectSubmoduleLayers;
|
|
8
|
+
const merge_helpers_1 = require("./merge.helpers");
|
|
9
|
+
const conditions_models_1 = require("../models/conditions.models");
|
|
10
|
+
const SUBMODULES_KEY = 'subModules';
|
|
11
|
+
const isPlainObject = (value) => typeof value === 'object' &&
|
|
12
|
+
value !== null &&
|
|
13
|
+
!Array.isArray(value) &&
|
|
14
|
+
Object.prototype.toString.call(value) === '[object Object]';
|
|
15
|
+
exports.isPlainObject = isPlainObject;
|
|
16
|
+
const stringList = (value) => Array.isArray(value)
|
|
17
|
+
? value.filter((item) => typeof item === 'string')
|
|
18
|
+
: undefined;
|
|
19
|
+
function normalizeCondition(value) {
|
|
20
|
+
if (!(0, exports.isPlainObject)(value))
|
|
21
|
+
return undefined;
|
|
22
|
+
const { field, operator, value: conditionValue } = value;
|
|
23
|
+
if (typeof field !== 'string')
|
|
24
|
+
return undefined;
|
|
25
|
+
if (!conditions_models_1.allowedOperators.includes(operator))
|
|
26
|
+
return undefined;
|
|
27
|
+
if (typeof conditionValue !== 'string' &&
|
|
28
|
+
typeof conditionValue !== 'number')
|
|
29
|
+
return undefined;
|
|
30
|
+
return { field, operator: operator, value: conditionValue };
|
|
31
|
+
}
|
|
32
|
+
function normalizeSubmodules(value) {
|
|
33
|
+
if (!(0, exports.isPlainObject)(value))
|
|
34
|
+
return undefined;
|
|
35
|
+
const result = {};
|
|
36
|
+
Object.keys(value).forEach((name) => {
|
|
37
|
+
const submodule = normalizeLayer(value[name]);
|
|
38
|
+
if (submodule)
|
|
39
|
+
result[name] = submodule;
|
|
40
|
+
});
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Keeps only what the engine reads from a stored layer, so a malformed definition is ignored instead of throwing (D25).
|
|
45
|
+
*/
|
|
46
|
+
function normalizeLayer(value, allowViews = true) {
|
|
47
|
+
if (!(0, exports.isPlainObject)(value))
|
|
48
|
+
return undefined;
|
|
49
|
+
const layer = {};
|
|
50
|
+
const remove = stringList(value.remove);
|
|
51
|
+
const keep = stringList(value.keep);
|
|
52
|
+
if (remove)
|
|
53
|
+
layer.remove = remove;
|
|
54
|
+
if (keep)
|
|
55
|
+
layer.keep = keep;
|
|
56
|
+
if ((0, exports.isPlainObject)(value.defaults))
|
|
57
|
+
layer.defaults = value.defaults;
|
|
58
|
+
const subModules = normalizeSubmodules(value.subModules);
|
|
59
|
+
if (subModules)
|
|
60
|
+
layer.subModules = subModules;
|
|
61
|
+
if (Array.isArray(value.conditional)) {
|
|
62
|
+
layer.conditional = value.conditional.flatMap((item) => {
|
|
63
|
+
const condition = (0, exports.isPlainObject)(item)
|
|
64
|
+
? normalizeCondition(item.condition)
|
|
65
|
+
: undefined;
|
|
66
|
+
const rest = condition ? normalizeLayer(item, false) : undefined;
|
|
67
|
+
return condition && rest ? [Object.assign(Object.assign({}, rest), { condition })] : [];
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (allowViews && (0, exports.isPlainObject)(value.views)) {
|
|
71
|
+
const views = value.views;
|
|
72
|
+
layer.views = {};
|
|
73
|
+
Object.keys(views).forEach((view) => {
|
|
74
|
+
const viewLayer = normalizeLayer(views[view], false);
|
|
75
|
+
if (viewLayer)
|
|
76
|
+
layer.views[view] = viewLayer;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return layer;
|
|
80
|
+
}
|
|
81
|
+
function mergeDefaults(previous, next) {
|
|
82
|
+
if (!(0, exports.isPlainObject)(next))
|
|
83
|
+
return previous;
|
|
84
|
+
return previous ? (0, merge_helpers_1.mergeDeep)(previous, next) : next;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Returns the last layer with the defaults of every layer merged by leaf key, the last one winning (rule 4 of 3.3.2).
|
|
88
|
+
*/
|
|
89
|
+
function mergeLayerDefaults(layers) {
|
|
90
|
+
var _a;
|
|
91
|
+
const last = (_a = layers[layers.length - 1]) !== null && _a !== void 0 ? _a : {};
|
|
92
|
+
const viewNames = new Set(layers.flatMap((layer) => { var _a; return Object.keys((_a = layer.views) !== null && _a !== void 0 ? _a : {}); }));
|
|
93
|
+
const rootDefaults = layers.reduce((merged, layer) => mergeDefaults(merged, layer.defaults), undefined);
|
|
94
|
+
const views = Object.assign({}, last.views);
|
|
95
|
+
viewNames.forEach((view) => {
|
|
96
|
+
var _a;
|
|
97
|
+
// Root and view defaults of each layer, in layer order, so a later root default beats an earlier view default.
|
|
98
|
+
const viewDefaults = layers.reduce((merged, layer) => {
|
|
99
|
+
var _a, _b;
|
|
100
|
+
return mergeDefaults(mergeDefaults(merged, layer.defaults), (_b = (_a = layer.views) === null || _a === void 0 ? void 0 : _a[view]) === null || _b === void 0 ? void 0 : _b.defaults);
|
|
101
|
+
}, undefined);
|
|
102
|
+
if (viewDefaults) {
|
|
103
|
+
views[view] = Object.assign(Object.assign({}, (_a = last.views) === null || _a === void 0 ? void 0 : _a[view]), { defaults: viewDefaults });
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
const effective = Object.assign({}, last);
|
|
107
|
+
if (rootDefaults)
|
|
108
|
+
effective.defaults = rootDefaults;
|
|
109
|
+
if (viewNames.size)
|
|
110
|
+
effective.views = views;
|
|
111
|
+
return effective;
|
|
112
|
+
}
|
|
113
|
+
const isSubmodulesKey = (key) => key === SUBMODULES_KEY || key.endsWith(`::${SUBMODULES_KEY}`);
|
|
114
|
+
exports.isSubmodulesKey = isSubmodulesKey;
|
|
115
|
+
const asItemObject = (value) => (0, exports.isPlainObject)(value) ? value : {};
|
|
116
|
+
function intersectItem(current, other) {
|
|
117
|
+
var _a, _b, _c;
|
|
118
|
+
const item = asItemObject(current);
|
|
119
|
+
const otherItem = asItemObject(other);
|
|
120
|
+
const childMap = item.childMap
|
|
121
|
+
? intersectViewMaps(item.childMap, (_a = otherItem.childMap) !== null && _a !== void 0 ? _a : {})
|
|
122
|
+
: undefined;
|
|
123
|
+
const conditions = [
|
|
124
|
+
...((_b = otherItem.conditions) !== null && _b !== void 0 ? _b : []),
|
|
125
|
+
...((_c = item.conditions) !== null && _c !== void 0 ? _c : []),
|
|
126
|
+
];
|
|
127
|
+
const hasDefaults = !!item.defaults && Object.keys(item.defaults).length > 0;
|
|
128
|
+
const hasChildMap = !!childMap && Object.keys(childMap).length > 0;
|
|
129
|
+
if (!hasDefaults && !hasChildMap && !conditions.length) {
|
|
130
|
+
return (0, exports.isPlainObject)(current) ? true : current;
|
|
131
|
+
}
|
|
132
|
+
return Object.assign(Object.assign(Object.assign({}, (hasDefaults && { defaults: item.defaults })), (hasChildMap && { childMap })), (conditions.length && { conditions }));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Keeps the keys visible in both maps: a later layer can only remove what an earlier one left (rule 2 of 3.3.2).
|
|
136
|
+
*/
|
|
137
|
+
function intersectViewMaps(current, other) {
|
|
138
|
+
const result = {};
|
|
139
|
+
Object.keys(current).forEach((key) => {
|
|
140
|
+
if ((0, exports.isSubmodulesKey)(key)) {
|
|
141
|
+
result[key] = current[key];
|
|
142
|
+
}
|
|
143
|
+
else if (key in other) {
|
|
144
|
+
result[key] = intersectItem(current[key], other[key]);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Collects the non-empty submodule customizations of earlier layers, so an embedded widget can apply them as its own layers.
|
|
151
|
+
*/
|
|
152
|
+
function collectSubmoduleLayers(maps) {
|
|
153
|
+
const result = {};
|
|
154
|
+
maps.forEach((map) => {
|
|
155
|
+
Object.keys(map)
|
|
156
|
+
.filter(exports.isSubmodulesKey)
|
|
157
|
+
.forEach((key) => {
|
|
158
|
+
const collection = map[key];
|
|
159
|
+
if (!(0, exports.isPlainObject)(collection))
|
|
160
|
+
return;
|
|
161
|
+
Object.keys(collection).forEach((name) => {
|
|
162
|
+
var _a, _b;
|
|
163
|
+
const submodule = collection[name];
|
|
164
|
+
if (!(0, exports.isPlainObject)(submodule))
|
|
165
|
+
return;
|
|
166
|
+
if (!Object.keys(submodule).length)
|
|
167
|
+
return;
|
|
168
|
+
result[key] = (_a = result[key]) !== null && _a !== void 0 ? _a : {};
|
|
169
|
+
result[key][name] = [
|
|
170
|
+
...((_b = result[key][name]) !== null && _b !== void 0 ? _b : []),
|
|
171
|
+
submodule,
|
|
172
|
+
];
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
return Object.keys(result).length ? result : undefined;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=layers.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layers.helpers.js","sourceRoot":"","sources":["../../../src/utils/layers.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logWarning = logWarning;
|
|
4
|
+
const LOG_PREFIX = '[widget-configurability]';
|
|
5
|
+
// The package's single console sink; never pass credentials or tokens in a message.
|
|
6
|
+
function logWarning(message) {
|
|
7
|
+
// eslint-disable-next-line no-console
|
|
8
|
+
console.warn(`${LOG_PREFIX} ${message}`);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=logger.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.helpers.js","sourceRoot":"","sources":["../../../src/utils/logger.helpers.ts"],"names":[],"mappings":";;AAGA,gCAGC;AAND,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,oFAAoF;AACpF,SAAgB,UAAU,CAAC,OAAe;IACtC,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -79,10 +79,13 @@ function structureFrom(widget, input, view, version) {
|
|
|
79
79
|
* Builds the structure of a widget a host embeds as a submodule (chartPanel, chartGallery, chartBuilder, downloadModal).
|
|
80
80
|
*/
|
|
81
81
|
function structureFromSubmodule(parent, module, view, options) {
|
|
82
|
+
var _a;
|
|
82
83
|
const widget = Object.keys(structure_constants_1.WIDGET_SUBMODULE_NAMES).find((key) => structure_constants_1.WIDGET_SUBMODULE_NAMES[key] === module);
|
|
83
84
|
if (!widget) {
|
|
84
85
|
throw new Error(`No widget registered for the submodule ${module}`);
|
|
85
86
|
}
|
|
86
|
-
|
|
87
|
+
const layers = parent.getSubmoduleLayers(module, view);
|
|
88
|
+
return (0, structural_manager_1.buildStructure)(widget, parent.getSubmodule(module, view), undefined, layers
|
|
89
|
+
? Object.assign(Object.assign({}, options), { layers: [...((_a = options === null || options === void 0 ? void 0 : options.layers) !== null && _a !== void 0 ? _a : []), ...layers] }) : options);
|
|
87
90
|
}
|
|
88
91
|
//# sourceMappingURL=scope.helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.helpers.js","sourceRoot":"","sources":["../../../src/utils/scope.helpers.ts"],"names":[],"mappings":";;AAsBA,wDAIC;AAKD,oDAUC;AAKD,oDAgBC;AAoBD,sCAmCC;AAKD,
|
|
1
|
+
{"version":3,"file":"scope.helpers.js","sourceRoot":"","sources":["../../../src/utils/scope.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.suggestKey = suggestKey;
|
|
4
|
+
exports.formatCustomizationPath = formatCustomizationPath;
|
|
5
|
+
exports.isEmptyCustomization = isEmptyCustomization;
|
|
6
|
+
exports.validateCustomization = validateCustomization;
|
|
7
|
+
const configs_1 = require("../constants/configs");
|
|
8
|
+
const structure_constants_1 = require("../constants/structure.constants");
|
|
9
|
+
const conditions_models_1 = require("../models/conditions.models");
|
|
10
|
+
const defaults_helpers_1 = require("../utils/defaults.helpers");
|
|
11
|
+
const layers_helpers_1 = require("../utils/layers.helpers");
|
|
12
|
+
const structural_helpers_1 = require("../utils/structural.helpers");
|
|
13
|
+
const ROOT_PROPERTIES = [
|
|
14
|
+
'remove',
|
|
15
|
+
'keep',
|
|
16
|
+
'defaults',
|
|
17
|
+
'subModules',
|
|
18
|
+
'conditional',
|
|
19
|
+
'views',
|
|
20
|
+
];
|
|
21
|
+
const VIEW_PROPERTIES = [
|
|
22
|
+
'remove',
|
|
23
|
+
'keep',
|
|
24
|
+
'defaults',
|
|
25
|
+
'subModules',
|
|
26
|
+
'conditional',
|
|
27
|
+
];
|
|
28
|
+
const CONDITIONAL_PROPERTIES = [
|
|
29
|
+
'condition',
|
|
30
|
+
'remove',
|
|
31
|
+
'keep',
|
|
32
|
+
'defaults',
|
|
33
|
+
'subModules',
|
|
34
|
+
];
|
|
35
|
+
const CONDITION_PROPERTIES = ['field', 'operator', 'value'];
|
|
36
|
+
const KEY_CHARS = /^[A-Za-z0-9_.-]+$/;
|
|
37
|
+
const ROOT_SCOPE = '';
|
|
38
|
+
const oneOf = (values) => (value) => typeof value === 'string' && values.includes(value) ? value : undefined;
|
|
39
|
+
// Write-time checks for defaults the runtime map leaves unvalidated, so the API rejects `changeLayout: "no"` (3.9.3).
|
|
40
|
+
const DX_WRITE_VALIDATOR_MAP = {
|
|
41
|
+
changeLayout: defaults_helpers_1.validateBoolean,
|
|
42
|
+
removeElement: defaults_helpers_1.validateBoolean,
|
|
43
|
+
dragElement: defaults_helpers_1.validateBoolean,
|
|
44
|
+
resizeElement: defaults_helpers_1.validateBoolean,
|
|
45
|
+
assetListViewMode: oneOf(['card', 'table']),
|
|
46
|
+
'downloadModal.exportVersion': oneOf(['saved', 'unsaved']),
|
|
47
|
+
};
|
|
48
|
+
const writeValidators = {
|
|
49
|
+
[structure_constants_1.Widget.DASHBOARD]: Object.assign(Object.assign({}, configs_1.widgetValidators[structure_constants_1.Widget.DASHBOARD]), DX_WRITE_VALIDATOR_MAP),
|
|
50
|
+
};
|
|
51
|
+
const keyCache = new Map();
|
|
52
|
+
// Keys of the structure by view (ROOT_SCOPE holds every key of every view, for root-level verbs).
|
|
53
|
+
function structureKeys(config) {
|
|
54
|
+
const cached = keyCache.get(config);
|
|
55
|
+
if (cached)
|
|
56
|
+
return cached;
|
|
57
|
+
const byView = new Map([[ROOT_SCOPE, new Set()]]);
|
|
58
|
+
Object.keys((0, structural_helpers_1.calculateViewMap)(config.baseStructure)).forEach((entry) => {
|
|
59
|
+
const separator = entry.indexOf(structure_constants_1.STRUCTURE_VIEW_NAME_SEPARATOR);
|
|
60
|
+
const view = separator >= 0 ? entry.slice(0, separator) : ROOT_SCOPE;
|
|
61
|
+
const key = separator >= 0
|
|
62
|
+
? entry.slice(separator + structure_constants_1.STRUCTURE_VIEW_NAME_SEPARATOR.length)
|
|
63
|
+
: entry;
|
|
64
|
+
if (key === 'subModules')
|
|
65
|
+
return;
|
|
66
|
+
if (!byView.has(view))
|
|
67
|
+
byView.set(view, new Set());
|
|
68
|
+
byView.get(view).add(key);
|
|
69
|
+
byView.get(ROOT_SCOPE).add(key);
|
|
70
|
+
});
|
|
71
|
+
keyCache.set(config, byView);
|
|
72
|
+
return byView;
|
|
73
|
+
}
|
|
74
|
+
function resolveConfig(widget, version) {
|
|
75
|
+
const versions = configs_1.widgetConfigs[widget];
|
|
76
|
+
if (!versions)
|
|
77
|
+
return undefined;
|
|
78
|
+
if (!version)
|
|
79
|
+
return versions[structure_constants_1.WidgetVersion.latest];
|
|
80
|
+
const match = Object.keys(versions).find((key) => { var _a; return key === version || ((_a = versions[key]) === null || _a === void 0 ? void 0 : _a.version) === version; });
|
|
81
|
+
return match ? versions[match] : undefined;
|
|
82
|
+
}
|
|
83
|
+
function createScope(widget, config) {
|
|
84
|
+
var _a, _b;
|
|
85
|
+
return {
|
|
86
|
+
widget,
|
|
87
|
+
config,
|
|
88
|
+
keys: structureKeys(config),
|
|
89
|
+
views: Object.keys((_a = config.baseStructure.views) !== null && _a !== void 0 ? _a : {}),
|
|
90
|
+
subModules: Object.keys((_b = config.baseStructure.subModules) !== null && _b !== void 0 ? _b : {}),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function levenshtein(a, b) {
|
|
94
|
+
const previous = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
95
|
+
for (let i = 1; i <= a.length; i++) {
|
|
96
|
+
let diagonal = previous[0];
|
|
97
|
+
previous[0] = i;
|
|
98
|
+
for (let j = 1; j <= b.length; j++) {
|
|
99
|
+
const above = previous[j];
|
|
100
|
+
previous[j] = Math.min(previous[j] + 1, previous[j - 1] + 1, diagonal + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
101
|
+
diagonal = above;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return previous[b.length];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Closest existing key: same leaf id first (a missing parent path), then the smallest edit distance within a limit.
|
|
108
|
+
*/
|
|
109
|
+
function suggestKey(key, candidates) {
|
|
110
|
+
const leaf = key.split('.').pop();
|
|
111
|
+
let best;
|
|
112
|
+
let bestDistance = Math.max(2, Math.floor(key.length * 0.3)) + 1;
|
|
113
|
+
for (const candidate of candidates) {
|
|
114
|
+
if (candidate.split('.').pop() === leaf && candidate !== key)
|
|
115
|
+
return candidate;
|
|
116
|
+
const distance = levenshtein(key.toLowerCase(), candidate.toLowerCase());
|
|
117
|
+
if (distance < bestDistance) {
|
|
118
|
+
best = candidate;
|
|
119
|
+
bestDistance = distance;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return best;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Formats a validation path as the API error messages show it, e.g. views.design.remove[2]
|
|
126
|
+
* (admin_api_manager prefixes it with `customization.`).
|
|
127
|
+
*/
|
|
128
|
+
function formatCustomizationPath(path) {
|
|
129
|
+
return path.reduce((result, part) => typeof part === 'number'
|
|
130
|
+
? `${result}[${part}]`
|
|
131
|
+
: result
|
|
132
|
+
? `${result}.${part}`
|
|
133
|
+
: part, '');
|
|
134
|
+
}
|
|
135
|
+
class Collector {
|
|
136
|
+
constructor() {
|
|
137
|
+
this.errors = [];
|
|
138
|
+
}
|
|
139
|
+
add(path, code, message, suggestion) {
|
|
140
|
+
this.errors.push(Object.assign({ path,
|
|
141
|
+
code, severity: 'error', message }, (suggestion && { suggestion })));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const describeScope = (scope, view) => {
|
|
145
|
+
const owner = scope.widget === structure_constants_1.Widget.DASHBOARD ? '' : ` of the ${scope.widget}`;
|
|
146
|
+
if (view !== ROOT_SCOPE)
|
|
147
|
+
return `in the ${view} view${owner}`;
|
|
148
|
+
return scope.views.length
|
|
149
|
+
? `in any view${owner}`
|
|
150
|
+
: `in the ${scope.widget} structure`;
|
|
151
|
+
};
|
|
152
|
+
function patternError(pattern) {
|
|
153
|
+
if (!pattern.trim())
|
|
154
|
+
return 'Empty key';
|
|
155
|
+
if (!pattern.includes('*')) {
|
|
156
|
+
return KEY_CHARS.test(pattern) && !pattern.includes('..')
|
|
157
|
+
? undefined
|
|
158
|
+
: `Key '${pattern}' contains characters that are not allowed`;
|
|
159
|
+
}
|
|
160
|
+
if (pattern === '*')
|
|
161
|
+
return undefined;
|
|
162
|
+
const inner = pattern.replace(/^\*/, '').replace(/\*$/, '');
|
|
163
|
+
if (!inner ||
|
|
164
|
+
inner.includes('*') ||
|
|
165
|
+
!KEY_CHARS.test(inner) ||
|
|
166
|
+
inner.includes('..')) {
|
|
167
|
+
return `Pattern '${pattern}' is not a valid wildcard; use *text, text* or *text*`;
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
function validateKeyList(collector, value, path, scope, view) {
|
|
172
|
+
var _a;
|
|
173
|
+
if (!Array.isArray(value)) {
|
|
174
|
+
collector.add(path, 'INVALID_TYPE', `'${path[path.length - 1]}' must be an array of keys`);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const keys = (_a = scope.keys.get(view)) !== null && _a !== void 0 ? _a : new Set();
|
|
178
|
+
value.forEach((item, index) => {
|
|
179
|
+
const itemPath = [...path, index];
|
|
180
|
+
if (typeof item !== 'string') {
|
|
181
|
+
collector.add(itemPath, 'INVALID_TYPE', 'Each key must be a string');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const invalid = patternError(item);
|
|
185
|
+
if (invalid) {
|
|
186
|
+
collector.add(itemPath, 'INVALID_PATTERN', invalid);
|
|
187
|
+
}
|
|
188
|
+
else if (!item.includes('*') && !keys.has(item)) {
|
|
189
|
+
collector.add(itemPath, 'UNKNOWN_KEY', `Key '${item}' does not exist ${describeScope(scope, view)}`, suggestKey(item, keys));
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
// A validator that throws on an unexpected type rejects the value instead of failing the whole validation.
|
|
194
|
+
function safeValidate(validator, value) {
|
|
195
|
+
try {
|
|
196
|
+
return validator(value);
|
|
197
|
+
}
|
|
198
|
+
catch (_a) {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function validateDefaultsObject(collector, value, path, validators) {
|
|
203
|
+
if (!(0, layers_helpers_1.isPlainObject)(value)) {
|
|
204
|
+
collector.add(path, 'INVALID_TYPE', "'defaults' must be an object");
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const walk = (node, parents) => {
|
|
208
|
+
Object.keys(node).forEach((key) => {
|
|
209
|
+
const keyPath = [...parents, key];
|
|
210
|
+
const current = node[key];
|
|
211
|
+
const validator = validators === null || validators === void 0 ? void 0 : validators[keyPath.join('.')];
|
|
212
|
+
if ((0, layers_helpers_1.isPlainObject)(current)) {
|
|
213
|
+
walk(current, keyPath);
|
|
214
|
+
}
|
|
215
|
+
else if (validator &&
|
|
216
|
+
current !== undefined &&
|
|
217
|
+
safeValidate(validator, current) === undefined) {
|
|
218
|
+
collector.add([...path, ...keyPath], 'INVALID_DEFAULT', `Default '${keyPath.join('.')}' does not accept the value ${JSON.stringify(current)}`);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
walk(value, []);
|
|
223
|
+
}
|
|
224
|
+
function validateProperties(collector, value, path, allowed) {
|
|
225
|
+
Object.keys(value)
|
|
226
|
+
.filter((key) => !allowed.includes(key))
|
|
227
|
+
.forEach((key) => collector.add([...path, key], 'UNKNOWN_PROPERTY', `Property '${key}' is not part of the customization grammar; valid properties: ${allowed.join(', ')}`));
|
|
228
|
+
}
|
|
229
|
+
function validateCondition(collector, value, path) {
|
|
230
|
+
if (!(0, layers_helpers_1.isPlainObject)(value)) {
|
|
231
|
+
collector.add(path, 'INVALID_CONDITION', "A conditional needs a 'condition' object with field, operator and value");
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
validateProperties(collector, value, path, CONDITION_PROPERTIES);
|
|
235
|
+
if (typeof value.field !== 'string' || !value.field) {
|
|
236
|
+
collector.add([...path, 'field'], 'INVALID_CONDITION', "The condition 'field' must be a non-empty string");
|
|
237
|
+
}
|
|
238
|
+
if (!conditions_models_1.allowedOperators.includes(value.operator)) {
|
|
239
|
+
collector.add([...path, 'operator'], 'INVALID_CONDITION', `Unknown operator ${JSON.stringify(value.operator)}; valid operators: ${conditions_models_1.allowedOperators.join(', ')}`);
|
|
240
|
+
}
|
|
241
|
+
if (typeof value.value !== 'string' && typeof value.value !== 'number') {
|
|
242
|
+
collector.add([...path, 'value'], 'INVALID_CONDITION', "The condition 'value' must be a string or a number");
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function validateBlock(collector, value, path, scope, view, allowed) {
|
|
246
|
+
if (!(0, layers_helpers_1.isPlainObject)(value)) {
|
|
247
|
+
collector.add(path, 'INVALID_TYPE', 'A customization must be an object');
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
validateProperties(collector, value, path, allowed);
|
|
251
|
+
const has = (property) => property in value && allowed.includes(property);
|
|
252
|
+
if ('remove' in value)
|
|
253
|
+
validateKeyList(collector, value.remove, [...path, 'remove'], scope, view);
|
|
254
|
+
if ('keep' in value)
|
|
255
|
+
validateKeyList(collector, value.keep, [...path, 'keep'], scope, view);
|
|
256
|
+
if ('defaults' in value) {
|
|
257
|
+
validateDefaultsObject(collector, value.defaults, [...path, 'defaults'], writeValidators[scope.widget]);
|
|
258
|
+
}
|
|
259
|
+
if ('subModules' in value)
|
|
260
|
+
validateSubmodules(collector, value.subModules, [...path, 'subModules'], scope);
|
|
261
|
+
if (has('conditional')) {
|
|
262
|
+
if (!Array.isArray(value.conditional)) {
|
|
263
|
+
collector.add([...path, 'conditional'], 'INVALID_TYPE', "'conditional' must be an array");
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
value.conditional.forEach((item, index) => {
|
|
267
|
+
const itemPath = [...path, 'conditional', index];
|
|
268
|
+
if (!(0, layers_helpers_1.isPlainObject)(item)) {
|
|
269
|
+
collector.add(itemPath, 'INVALID_CONDITION', 'Each conditional must be an object');
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
validateCondition(collector, item.condition, [
|
|
273
|
+
...itemPath,
|
|
274
|
+
'condition',
|
|
275
|
+
]);
|
|
276
|
+
validateBlock(collector, item, itemPath, scope, view, CONDITIONAL_PROPERTIES);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (has('views'))
|
|
281
|
+
validateViews(collector, value.views, [...path, 'views'], scope);
|
|
282
|
+
}
|
|
283
|
+
function validateViews(collector, value, path, scope) {
|
|
284
|
+
if (!(0, layers_helpers_1.isPlainObject)(value)) {
|
|
285
|
+
collector.add(path, 'INVALID_TYPE', "'views' must be an object");
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
Object.keys(value).forEach((view) => {
|
|
289
|
+
if (!scope.views.includes(view)) {
|
|
290
|
+
const valid = scope.views.length
|
|
291
|
+
? `valid views: ${scope.views.join(', ')}`
|
|
292
|
+
: `the ${scope.widget} widget has no views`;
|
|
293
|
+
collector.add([...path, view], 'UNKNOWN_VIEW', `View '${view}' does not exist; ${valid}`);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
validateBlock(collector, value[view], [...path, view], scope, view, VIEW_PROPERTIES);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
function validateSubmodules(collector, value, path, scope) {
|
|
300
|
+
if (!(0, layers_helpers_1.isPlainObject)(value)) {
|
|
301
|
+
collector.add(path, 'INVALID_TYPE', "'subModules' must be an object");
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
Object.keys(value).forEach((name) => {
|
|
305
|
+
const subPath = [...path, name];
|
|
306
|
+
if (!scope.subModules.includes(name)) {
|
|
307
|
+
const valid = scope.subModules.length
|
|
308
|
+
? `valid submodules: ${scope.subModules.join(', ')}`
|
|
309
|
+
: `the ${scope.widget} widget has no submodules`;
|
|
310
|
+
collector.add(subPath, 'UNKNOWN_SUBMODULE', `Submodule '${name}' does not exist; ${valid}`);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
const widget = Object.keys(structure_constants_1.WIDGET_SUBMODULE_NAMES).find((key) => structure_constants_1.WIDGET_SUBMODULE_NAMES[key] === name);
|
|
314
|
+
const config = widget ? resolveConfig(widget) : undefined;
|
|
315
|
+
if (!widget || !config) {
|
|
316
|
+
if (!(0, layers_helpers_1.isPlainObject)(value[name])) {
|
|
317
|
+
collector.add(subPath, 'INVALID_TYPE', 'A customization must be an object');
|
|
318
|
+
}
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
validateBlock(collector, value[name], subPath, createScope(widget, config), ROOT_SCOPE, ROOT_PROPERTIES);
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* True when the customization has no effective rule: no verb with items and no defaults anywhere.
|
|
326
|
+
*/
|
|
327
|
+
function isEmptyCustomization(value) {
|
|
328
|
+
if (!(0, layers_helpers_1.isPlainObject)(value))
|
|
329
|
+
return true;
|
|
330
|
+
const hasItems = (list) => Array.isArray(list) && list.length > 0;
|
|
331
|
+
if (hasItems(value.remove) || hasItems(value.keep))
|
|
332
|
+
return false;
|
|
333
|
+
if ((0, layers_helpers_1.isPlainObject)(value.defaults) && Object.keys(value.defaults).length)
|
|
334
|
+
return false;
|
|
335
|
+
const nested = [
|
|
336
|
+
...(Array.isArray(value.conditional) ? value.conditional : []),
|
|
337
|
+
...((0, layers_helpers_1.isPlainObject)(value.views) ? Object.values(value.views) : []),
|
|
338
|
+
...((0, layers_helpers_1.isPlainObject)(value.subModules)
|
|
339
|
+
? Object.values(value.subModules)
|
|
340
|
+
: []),
|
|
341
|
+
];
|
|
342
|
+
return nested.every(isEmptyCustomization);
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Strict validation of a customization for writes (API and Admin Center): collects every error in one pass, each with its path.
|
|
346
|
+
*/
|
|
347
|
+
function validateCustomization(widget, customization, options = {}) {
|
|
348
|
+
const collector = new Collector();
|
|
349
|
+
if (!configs_1.widgetConfigs[widget]) {
|
|
350
|
+
collector.add([], 'UNKNOWN_WIDGET', `Widget '${widget}' has no customization structure`);
|
|
351
|
+
return { valid: false, errors: collector.errors };
|
|
352
|
+
}
|
|
353
|
+
const config = resolveConfig(widget, options.version);
|
|
354
|
+
if (!config) {
|
|
355
|
+
collector.add([], 'UNKNOWN_VERSION', `Structure version '${options.version}' does not exist for widget '${widget}'`);
|
|
356
|
+
return { valid: false, errors: collector.errors };
|
|
357
|
+
}
|
|
358
|
+
validateBlock(collector, customization, [], createScope(widget, config), ROOT_SCOPE, ROOT_PROPERTIES);
|
|
359
|
+
if (!collector.errors.length &&
|
|
360
|
+
!options.allowEmpty &&
|
|
361
|
+
isEmptyCustomization(customization)) {
|
|
362
|
+
collector.add([], 'EMPTY_CUSTOMIZATION', 'The customization has no rules: add a remove, keep or defaults entry');
|
|
363
|
+
}
|
|
364
|
+
return { valid: collector.errors.length === 0, errors: collector.errors };
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=customization.validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customization.validator.js","sourceRoot":"","sources":["../../../src/validation/customization.validator.ts"],"names":[],"mappings":"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"}
|