@qrvey/widget-configurability 0.0.0-beta.4539 → 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.
Files changed (42) hide show
  1. package/README.md +53 -0
  2. package/dist/cjs/index.js +12 -3
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/metadata/customization-metadata.js +241 -0
  5. package/dist/cjs/metadata/customization-metadata.js.map +1 -0
  6. package/dist/cjs/metadata/index.js +11 -0
  7. package/dist/cjs/metadata/index.js.map +1 -0
  8. package/dist/cjs/metadata/labels/chart-panel.labels.js +56 -0
  9. package/dist/cjs/metadata/labels/chart-panel.labels.js.map +1 -0
  10. package/dist/cjs/metadata/labels/dashboard.labels.js +207 -0
  11. package/dist/cjs/metadata/labels/dashboard.labels.js.map +1 -0
  12. package/dist/cjs/metadata/metadata.models.js +3 -0
  13. package/dist/cjs/metadata/metadata.models.js.map +1 -0
  14. package/dist/cjs/models/remote.models.js +3 -0
  15. package/dist/cjs/models/remote.models.js.map +1 -0
  16. package/dist/cjs/models/validation.models.js +3 -0
  17. package/dist/cjs/models/validation.models.js.map +1 -0
  18. package/dist/cjs/remote/remote-customization.loader.js +213 -0
  19. package/dist/cjs/remote/remote-customization.loader.js.map +1 -0
  20. package/dist/cjs/structural-manager.js +35 -2
  21. package/dist/cjs/structural-manager.js.map +1 -1
  22. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  23. package/dist/cjs/utils/defaults.helpers.js +3 -0
  24. package/dist/cjs/utils/defaults.helpers.js.map +1 -1
  25. package/dist/cjs/utils/layers.helpers.js +178 -0
  26. package/dist/cjs/utils/layers.helpers.js.map +1 -0
  27. package/dist/cjs/utils/logger.helpers.js +10 -0
  28. package/dist/cjs/utils/logger.helpers.js.map +1 -0
  29. package/dist/cjs/utils/scope.helpers.js +4 -1
  30. package/dist/cjs/utils/scope.helpers.js.map +1 -1
  31. package/dist/cjs/validation/customization.validator.js +366 -0
  32. package/dist/cjs/validation/customization.validator.js.map +1 -0
  33. package/dist/esm/index.mjs +842 -48
  34. package/dist/esm/index.mjs.map +1 -1
  35. package/dist/esm/metadata.mjs +2750 -0
  36. package/dist/esm/metadata.mjs.map +1 -0
  37. package/dist/types/customization.models-CCSWjfb2.d.ts +47 -0
  38. package/dist/types/index.d.ts +98 -68
  39. package/dist/types/metadata.d.ts +59 -0
  40. package/package.json +7 -1
  41. package/dist/cjs/utils/download-modal.helpers.js +0 -29
  42. package/dist/cjs/utils/download-modal.helpers.js.map +0 -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
- return (0, structural_manager_1.buildStructure)(widget, parent.getSubmodule(module, view), undefined, options);
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":"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"}
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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"}