/**
* RESTRICTED CLASSES - Zend Framework to Laminas/Magento Replacements
* These classes are deprecated and should be replaced with modern equivalents.
*/
export interface RestrictedClass {
replacement: string;
category: string;
reason: string;
}
export const RESTRICTED_CLASSES: Record<string, RestrictedClass> = {
// === DATABASE ===
'Zend_Db_Select': {
replacement: '\\Magento\\Framework\\DB\\Select',
category: 'database',
reason: 'Use Magento DB abstraction layer'
},
'Zend_Db_Adapter_Pdo_Mysql': {
replacement: '\\Magento\\Framework\\DB\\Adapter\\Pdo\\Mysql',
category: 'database',
reason: 'Use Magento DB adapter'
},
// === JSON ===
'Zend_Json': {
replacement: 'Magento\\Framework\\Serialize\\Serializer\\Json',
category: 'serialization',
reason: 'Use Magento JSON serializer'
},
'Zend_Json_Exception': {
replacement: '\\InvalidArgumentException',
category: 'serialization',
reason: 'Use standard PHP exception'
},
// === ACL ===
'Zend_Acl': {
replacement: 'Laminas\\Permissions\\Acl\\Acl',
category: 'acl',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Acl_Role': {
replacement: 'Laminas\\Permissions\\Acl\\Role\\GenericRole',
category: 'acl',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Acl_Resource': {
replacement: 'Laminas\\Permissions\\Acl\\Resource\\GenericResource',
category: 'acl',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Acl_Role_Registry': {
replacement: 'Laminas\\Permissions\\Acl\\Role\\Registry',
category: 'acl',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Acl_Role_Interface': {
replacement: 'Laminas\\Permissions\\Acl\\Role\\RoleInterface',
category: 'acl',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Acl_Role_Registry_Exception': {
replacement: 'Laminas\\Permissions\\Acl\\Exception\\InvalidArgumentException',
category: 'acl',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Acl_Exception': {
replacement: 'Laminas\\Permissions\\Acl\\Exception\\InvalidArgumentException',
category: 'acl',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
// === CURRENCY ===
'Zend_Currency': {
replacement: 'Magento\\Framework\\Currency\\Data\\Currency',
category: 'currency',
reason: 'Use Magento currency handling'
},
'Zend_Currency_Exception': {
replacement: 'Magento\\Framework\\Currency\\Exception\\CurrencyException',
category: 'currency',
reason: 'Use Magento currency exception'
},
// === MEASURE ===
'Zend_Measure_Weight': {
replacement: 'Magento\\Framework\\Measure\\Weight',
category: 'measure',
reason: 'Use Magento measure classes'
},
'Zend_Measure_Length': {
replacement: 'Magento\\Framework\\Measure\\Length',
category: 'measure',
reason: 'Use Magento measure classes'
},
// === VALIDATION ===
'Zend_Validate': {
replacement: 'Magento\\Framework\\Validator\\ValidatorChain',
category: 'validation',
reason: 'Use Magento validator chain'
},
'Zend_Validate_Interface': {
replacement: 'Laminas\\Validator\\ValidatorInterface',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Regex': {
replacement: 'Laminas\\Validator\\Regex',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_EmailAddress': {
replacement: 'Magento\\Framework\\Validator\\EmailAddress',
category: 'validation',
reason: 'Use Magento email validator'
},
'Zend_Validate_StringLength': {
replacement: 'Magento\\Framework\\Validator\\StringLength',
category: 'validation',
reason: 'Use Magento string length validator'
},
'Zend_Validate_Exception': {
replacement: 'Magento\\Framework\\Validator\\ValidateException',
category: 'validation',
reason: 'Use Magento validation exception'
},
'Zend_Validate_File_Extension': {
replacement: 'Laminas\\Validator\\File\\Extension',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_File_ExcludeExtension': {
replacement: 'Laminas\\Validator\\File\\ExcludeExtension',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_File_ImageSize': {
replacement: 'Laminas\\Validator\\File\\ImageSize',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_File_FilesSize': {
replacement: 'Laminas\\Validator\\File\\FilesSize',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_File_Size': {
replacement: 'Laminas\\Validator\\File\\FilesSize',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_File_IsImage': {
replacement: 'Laminas\\Validator\\File\\IsImage',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Alnum': {
replacement: 'Magento\\Framework\\Validator\\Alnum',
category: 'validation',
reason: 'Use Magento alphanumeric validator'
},
'Zend_Validate_Hostname': {
replacement: 'Magento\\Framework\\Validator\\Hostname',
category: 'validation',
reason: 'Use Magento hostname validator'
},
'Zend_Validate_NotEmpty': {
replacement: 'Magento\\Framework\\Validator\\NotEmpty',
category: 'validation',
reason: 'Use Magento not empty validator'
},
'Zend_Validate_Date': {
replacement: 'Laminas\\Validator\\Date',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Digits': {
replacement: 'Laminas\\Validator\\Digits',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Alpha': {
replacement: 'Laminas\\I18n\\Validator\\Alpha',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_InArray': {
replacement: 'Laminas\\Validator\\InArray',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Abstract': {
replacement: 'Laminas\\Validator\\AbstractValidator',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Callback': {
replacement: 'Laminas\\Validator\\Callback',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Ip': {
replacement: 'Laminas\\Validator\\Ip',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Identical': {
replacement: 'Laminas\\Validator\\Identical',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Float': {
replacement: 'Laminas\\I18n\\Validator\\IsFloat',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Validate_Int': {
replacement: 'Laminas\\I18n\\Validator\\IsInt',
category: 'validation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
// === HTTP ===
'Zend_Http_Client': {
replacement: 'Laminas\\Http\\Request or Magento\\Framework\\HTTP\\ClientInterface',
category: 'http',
reason: 'Zend Framework 1 is deprecated, use Laminas or Magento HTTP client'
},
'Zend_Http_Response': {
replacement: 'Laminas\\Http\\Response',
category: 'http',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Http_Exception': {
replacement: 'Laminas\\Http\\Exception\\RuntimeException',
category: 'http',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Http_Client_Exception': {
replacement: 'Laminas\\Http\\Exception\\RuntimeException',
category: 'http',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Http_Client_Adapter_Interface': {
replacement: 'Laminas\\Http\\Client\\Adapter\\AdapterInterface',
category: 'http',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Magento\\Framework\\HTTP\\ZendClient': {
replacement: 'Magento\\Framework\\HTTP\\LaminasClient',
category: 'http',
reason: 'ZendClient is deprecated, use LaminasClient'
},
'Magento\\Framework\\HTTP\\ZendClientFactory': {
replacement: 'Magento\\Framework\\HTTP\\LaminasClientFactory',
category: 'http',
reason: 'ZendClientFactory is deprecated, use LaminasClientFactory'
},
// === FILTER ===
'Zend_Filter': {
replacement: 'Magento\\Framework\\Filter\\FilterInput',
category: 'filter',
reason: 'Use Magento filter classes'
},
'Zend_Filter_Input': {
replacement: 'Magento\\Framework\\Filter\\FilterInput',
category: 'filter',
reason: 'Use Magento filter input'
},
'Zend_Filter_Interface': {
replacement: 'Laminas\\Filter\\FilterInterface',
category: 'filter',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Filter_File_Rename': {
replacement: 'Laminas\\Filter\\File\\Rename',
category: 'filter',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Filter_LocalizedToNormalized': {
replacement: 'Magento\\Framework\\Filter\\LocalizedToNormalized',
category: 'filter',
reason: 'Use Magento localization filter'
},
'Zend_Filter_Decrypt': {
replacement: 'Laminas\\Filter\\Decrypt',
category: 'filter',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Filter_Encrypt': {
replacement: 'Laminas\\Filter\\Encrypt',
category: 'filter',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Filter_Encrypt_Interface': {
replacement: 'Laminas\\Filter\\Encrypt\\EncryptionAlgorithmInterface',
category: 'filter',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_Filter_Alnum': {
replacement: 'Laminas\\I18n\\Filter\\Alnum',
category: 'filter',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
// === FILE TRANSFER ===
'Zend_File_Transfer': {
replacement: 'Laminas\\File\\Transfer\\Transfer',
category: 'file',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_File_Transfer_Exception': {
replacement: 'Laminas\\File\\Transfer\\Exception\\PhpEnvironmentException',
category: 'file',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
'Zend_File_Transfer_Adapter_Http': {
replacement: 'Magento\\Framework\\File\\Http',
category: 'file',
reason: 'Use Magento file HTTP adapter'
},
// === DATE/LOCALE ===
'Zend_Date': {
replacement: '\\IntlDateFormatter or \\DateTime',
category: 'date',
reason: 'Zend_Date is deprecated, use PHP Intl extension'
},
'Zend_Locale_Format': {
replacement: 'Laminas\\I18n\\Filter\\NumberParse, \\NumberFormatter, or \\IntlDateFormatter',
category: 'locale',
reason: 'Use PHP Intl extension or Laminas I18n'
},
// === OAUTH ===
'Zend_Oauth_Http_Utility': {
replacement: 'Laminas\\OAuth\\Http\\Utility',
category: 'oauth',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
// === TRANSLATE ===
'Zend_Translate_Adapter': {
replacement: 'Laminas\\I18n\\View\\Helper\\AbstractTranslatorHelper',
category: 'translation',
reason: 'Zend Framework 1 is deprecated, use Laminas'
},
// === SERIALIZATION ===
'Magento\\Framework\\Serialize\\Serializer\\Serialize': {
replacement: 'Magento\\Framework\\Serialize\\SerializerInterface (use Json implementation)',
category: 'serialization',
reason: 'PHP serialize is insecure, use JSON serialization'
},
'ArrayObject': {
replacement: 'Custom class extended from ArrayObject with overwritten serialize/unserialize methods',
category: 'serialization',
reason: 'Default ArrayObject uses PHP serialize which is insecure'
},
'Magento\\Framework\\View\\Element\\UiComponent\\ArrayObjectFactory': {
replacement: 'Factory that creates custom class extended from ArrayObject',
category: 'serialization',
reason: 'Ensure custom ArrayObject with safe serialization is used'
},
// === GRAPHQL ===
'GraphQL\\Language\\Parser': {
replacement: 'Magento\\Framework\\GraphQl\\Query\\QueryParser',
category: 'graphql',
reason: 'Use Magento GraphQL parser for proper integration'
},
};
/**
* Get replacement for a restricted class
*/
export function getRestrictedClassReplacement(className: string): RestrictedClass | null {
return RESTRICTED_CLASSES[className] || null;
}
/**
* Check if a class is restricted
*/
export function isRestrictedClass(className: string): boolean {
return className in RESTRICTED_CLASSES;
}
/**
* Get all restricted classes by category
*/
export function getRestrictedClassesByCategory(category: string): Record<string, RestrictedClass> {
const result: Record<string, RestrictedClass> = {};
for (const [cls, info] of Object.entries(RESTRICTED_CLASSES)) {
if (info.category === category) {
result[cls] = info;
}
}
return result;
}