devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
69 lines • 8.56 kB
JavaScript
/*!
* devextreme-angular
* Version: 25.2.3
* Build date: Fri Dec 12 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
import { DEPRECATED_CONFIG_COMPONENTS } from './deprecated-config-map';
import WARNING_CODES from './warning-codes';
import { logWarning } from './warning-helper';
const warnedUsages = new Set();
const NESTED_CLASS_NAME_REGEXP = /^(Dx[io][A-Z]\w+)Component$/;
function getLegacySelector(nestedOption) {
const className = nestedOption?.constructor?.name;
if (!className) {
return undefined;
}
const match = NESTED_CLASS_NAME_REGEXP.exec(className);
if (!match) {
return undefined;
}
const [, legacyName] = match;
return toKebabCase(legacyName);
}
function getHostMapping(host) {
const visited = new Set();
let current = host;
while (current && !visited.has(current)) {
visited.add(current);
const ctorName = current.constructor?.name;
if (ctorName && Object.prototype.hasOwnProperty.call(DEPRECATED_CONFIG_COMPONENTS, ctorName)) {
return DEPRECATED_CONFIG_COMPONENTS[ctorName];
}
current = current._host;
}
return undefined;
}
export function warnIfLegacyNestedComponent(nestedOption, host) {
const legacySelector = getLegacySelector(nestedOption);
if (!legacySelector) {
return;
}
const mappingEntry = getHostMapping(host);
if (!mappingEntry) {
return;
}
const replacement = mappingEntry[legacySelector];
if (!replacement) {
return;
}
const cacheKey = `${legacySelector}|${replacement}`;
if (warnedUsages.has(cacheKey)) {
return;
}
warnedUsages.add(cacheKey);
logWarning(WARNING_CODES.LEGACY_CONFIG_COMPONENT_USED, { legacySelector, replacement });
}
function toKebabCase(value) {
return value
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
.replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
.toLowerCase();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwcmVjYXRlZC1jb25maWctd2FybmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Rpc3QvY29yZS9kZXByZWNhdGVkLWNvbmZpZy13YXJuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBR0gsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkUsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFFdkMsTUFBTSx3QkFBd0IsR0FBRyw2QkFBNkIsQ0FBQztBQUkvRCxTQUFTLGlCQUFpQixDQUFDLFlBQThCO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLFlBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDO0lBQ2xELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUU3QixPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBd0M7SUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFDbEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBRW5CLE9BQU8sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7UUFDM0MsSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0YsT0FBTyw0QkFBNEIsQ0FBQyxRQUFRLENBQTBCLENBQUM7UUFDekUsQ0FBQztRQUVELE9BQU8sR0FBSSxPQUE4QyxDQUFDLEtBQUssQ0FBQztJQUNsRSxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxZQUE4QixFQUFFLElBQXdDO0lBQ2xILE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxjQUFjLElBQUksV0FBVyxFQUFFLENBQUM7SUFDcEQsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTztJQUNULENBQUM7SUFFRCxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNCLFVBQVUsQ0FDUixhQUFhLENBQUMsNEJBQTRCLEVBQzFDLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsT0FBTyxLQUFLO1NBQ1QsT0FBTyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQztTQUN0QyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDO1NBQ3hDLFdBQVcsRUFBRSxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGRldmV4dHJlbWUtYW5ndWxhclxuICogVmVyc2lvbjogMjUuMi4zXG4gKiBCdWlsZCBkYXRlOiBGcmkgRGVjIDEyIDIwMjVcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDI1IERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxuICpcbiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXNcbiAqIG9mIHRoZSBNSVQgbGljZW5zZS4gU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZm9yIGRldGFpbHMuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL0RldkV4cHJlc3MvZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBCYXNlTmVzdGVkT3B0aW9uLCBJTmVzdGVkT3B0aW9uQ29udGFpbmVyIH0gZnJvbSAnLi9uZXN0ZWQtb3B0aW9uJztcclxuaW1wb3J0IHsgREVQUkVDQVRFRF9DT05GSUdfQ09NUE9ORU5UUyB9IGZyb20gJy4vZGVwcmVjYXRlZC1jb25maWctbWFwJztcclxuaW1wb3J0IFdBUk5JTkdfQ09ERVMgZnJvbSAnLi93YXJuaW5nLWNvZGVzJztcclxuaW1wb3J0IHsgbG9nV2FybmluZyB9IGZyb20gJy4vd2FybmluZy1oZWxwZXInO1xyXG5cclxuY29uc3Qgd2FybmVkVXNhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG5jb25zdCBORVNURURfQ0xBU1NfTkFNRV9SRUdFWFAgPSAvXihEeFtpb11bQS1aXVxcdyspQ29tcG9uZW50JC87XHJcblxyXG50eXBlIERlcHJlY2F0ZWRDb25maWdFbnRyeSA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG5mdW5jdGlvbiBnZXRMZWdhY3lTZWxlY3RvcihuZXN0ZWRPcHRpb246IEJhc2VOZXN0ZWRPcHRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IGNsYXNzTmFtZSA9IG5lc3RlZE9wdGlvbj8uY29uc3RydWN0b3I/Lm5hbWU7XHJcbiAgaWYgKCFjbGFzc05hbWUpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBtYXRjaCA9IE5FU1RFRF9DTEFTU19OQU1FX1JFR0VYUC5leGVjKGNsYXNzTmFtZSk7XHJcbiAgaWYgKCFtYXRjaCkge1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGNvbnN0IFssIGxlZ2FjeU5hbWVdID0gbWF0Y2g7XHJcblxyXG4gIHJldHVybiB0b0tlYmFiQ2FzZShsZWdhY3lOYW1lKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SG9zdE1hcHBpbmcoaG9zdDogSU5lc3RlZE9wdGlvbkNvbnRhaW5lciB8IHVuZGVmaW5lZCk6IERlcHJlY2F0ZWRDb25maWdFbnRyeSB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8SU5lc3RlZE9wdGlvbkNvbnRhaW5lcj4oKTtcclxuICBsZXQgY3VycmVudCA9IGhvc3Q7XHJcblxyXG4gIHdoaWxlIChjdXJyZW50ICYmICF2aXNpdGVkLmhhcyhjdXJyZW50KSkge1xyXG4gICAgdmlzaXRlZC5hZGQoY3VycmVudCk7XHJcblxyXG4gICAgY29uc3QgY3Rvck5hbWUgPSBjdXJyZW50LmNvbnN0cnVjdG9yPy5uYW1lO1xyXG4gICAgaWYgKGN0b3JOYW1lICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChERVBSRUNBVEVEX0NPTkZJR19DT01QT05FTlRTLCBjdG9yTmFtZSkpIHtcclxuICAgICAgcmV0dXJuIERFUFJFQ0FURURfQ09ORklHX0NPTVBPTkVOVFNbY3Rvck5hbWVdIGFzIERlcHJlY2F0ZWRDb25maWdFbnRyeTtcclxuICAgIH1cclxuXHJcbiAgICBjdXJyZW50ID0gKGN1cnJlbnQgYXMgeyBfaG9zdD86IElOZXN0ZWRPcHRpb25Db250YWluZXIgfSkuX2hvc3Q7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2FybklmTGVnYWN5TmVzdGVkQ29tcG9uZW50KG5lc3RlZE9wdGlvbjogQmFzZU5lc3RlZE9wdGlvbiwgaG9zdDogSU5lc3RlZE9wdGlvbkNvbnRhaW5lciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gIGNvbnN0IGxlZ2FjeVNlbGVjdG9yID0gZ2V0TGVnYWN5U2VsZWN0b3IobmVzdGVkT3B0aW9uKTtcclxuICBpZiAoIWxlZ2FjeVNlbGVjdG9yKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBjb25zdCBtYXBwaW5nRW50cnkgPSBnZXRIb3N0TWFwcGluZyhob3N0KTtcclxuICBpZiAoIW1hcHBpbmdFbnRyeSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBtYXBwaW5nRW50cnlbbGVnYWN5U2VsZWN0b3JdO1xyXG4gIGlmICghcmVwbGFjZW1lbnQpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7bGVnYWN5U2VsZWN0b3J9fCR7cmVwbGFjZW1lbnR9YDtcclxuICBpZiAod2FybmVkVXNhZ2VzLmhhcyhjYWNoZUtleSkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHdhcm5lZFVzYWdlcy5hZGQoY2FjaGVLZXkpO1xyXG5cclxuICBsb2dXYXJuaW5nKFxyXG4gICAgV0FSTklOR19DT0RFUy5MRUdBQ1lfQ09ORklHX0NPTVBPTkVOVF9VU0VELFxyXG4gICAgeyBsZWdhY3lTZWxlY3RvciwgcmVwbGFjZW1lbnQgfSxcclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0tlYmFiQ2FzZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gdmFsdWVcclxuICAgIC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEtJDInKVxyXG4gICAgLnJlcGxhY2UoLyhbQS1aXSkoW0EtWl1bYS16XSkvZywgJyQxLSQyJylcclxuICAgIC50b0xvd2VyQ2FzZSgpO1xyXG59XHJcbiJdfQ==