119 lines
4.7 KiB
JavaScript
119 lines
4.7 KiB
JavaScript
// Utility functions for CSSOM error handling
|
|
|
|
/**
|
|
* Gets the appropriate error constructor from the global object context.
|
|
* Tries to find the error constructor from parentStyleSheet.__globalObject,
|
|
* then from __globalObject, then falls back to the native constructor.
|
|
*
|
|
* @param {Object} context - The CSSOM object (rule, stylesheet, etc.)
|
|
* @param {string} errorType - The error type ('TypeError', 'RangeError', 'DOMException', etc.)
|
|
* @return {Function} The error constructor
|
|
*/
|
|
function getErrorConstructor(context, errorType) {
|
|
// Try parentStyleSheet.__globalObject first
|
|
if (context.parentStyleSheet && context.parentStyleSheet.__globalObject && context.parentStyleSheet.__globalObject[errorType]) {
|
|
return context.parentStyleSheet.__globalObject[errorType];
|
|
}
|
|
|
|
// Try __parentStyleSheet (alternative naming)
|
|
if (context.__parentStyleSheet && context.__parentStyleSheet.__globalObject && context.__parentStyleSheet.__globalObject[errorType]) {
|
|
return context.__parentStyleSheet.__globalObject[errorType];
|
|
}
|
|
|
|
// Try __globalObject on the context itself
|
|
if (context.__globalObject && context.__globalObject[errorType]) {
|
|
return context.__globalObject[errorType];
|
|
}
|
|
|
|
// Fall back to native constructor
|
|
return (typeof global !== 'undefined' && global[errorType]) ||
|
|
(typeof window !== 'undefined' && window[errorType]) ||
|
|
eval(errorType);
|
|
}
|
|
|
|
/**
|
|
* Creates an appropriate error with context-aware constructor.
|
|
*
|
|
* @param {Object} context - The CSSOM object (rule, stylesheet, etc.)
|
|
* @param {string} errorType - The error type ('TypeError', 'RangeError', 'DOMException', etc.)
|
|
* @param {string} message - The error message
|
|
* @param {string} [name] - Optional name for DOMException
|
|
*/
|
|
function createError(context, errorType, message, name) {
|
|
var ErrorConstructor = getErrorConstructor(context, errorType);
|
|
return new ErrorConstructor(message, name);
|
|
}
|
|
|
|
/**
|
|
* Creates and throws an appropriate error with context-aware constructor.
|
|
*
|
|
* @param {Object} context - The CSSOM object (rule, stylesheet, etc.)
|
|
* @param {string} errorType - The error type ('TypeError', 'RangeError', 'DOMException', etc.)
|
|
* @param {string} message - The error message
|
|
* @param {string} [name] - Optional name for DOMException
|
|
*/
|
|
function throwError(context, errorType, message, name) {
|
|
throw createError(context, errorType, message, name);
|
|
}
|
|
|
|
/**
|
|
* Throws a TypeError for missing required arguments.
|
|
*
|
|
* @param {Object} context - The CSSOM object
|
|
* @param {string} methodName - The method name (e.g., 'appendRule')
|
|
* @param {string} objectName - The object name (e.g., 'CSSKeyframesRule')
|
|
* @param {number} [required=1] - Number of required arguments
|
|
* @param {number} [provided=0] - Number of provided arguments
|
|
*/
|
|
function throwMissingArguments(context, methodName, objectName, required, provided) {
|
|
required = required || 1;
|
|
provided = provided || 0;
|
|
var message = "Failed to execute '" + methodName + "' on '" + objectName + "': " +
|
|
required + " argument" + (required > 1 ? "s" : "") + " required, but only " +
|
|
provided + " present.";
|
|
throwError(context, 'TypeError', message);
|
|
}
|
|
|
|
/**
|
|
* Throws a DOMException for parse errors.
|
|
*
|
|
* @param {Object} context - The CSSOM object
|
|
* @param {string} methodName - The method name
|
|
* @param {string} objectName - The object name
|
|
* @param {string} rule - The rule that failed to parse
|
|
* @param {string} [name='SyntaxError'] - The DOMException name
|
|
*/
|
|
function throwParseError(context, methodName, objectName, rule, name) {
|
|
var message = "Failed to execute '" + methodName + "' on '" + objectName + "': " +
|
|
"Failed to parse the rule '" + rule + "'.";
|
|
throwError(context, 'DOMException', message, name || 'SyntaxError');
|
|
}
|
|
|
|
/**
|
|
* Throws a DOMException for index errors.
|
|
*
|
|
* @param {Object} context - The CSSOM object
|
|
* @param {string} methodName - The method name
|
|
* @param {string} objectName - The object name
|
|
* @param {number} index - The invalid index
|
|
* @param {number} maxIndex - The maximum valid index
|
|
* @param {string} [name='IndexSizeError'] - The DOMException name
|
|
*/
|
|
function throwIndexError(context, methodName, objectName, index, maxIndex, name) {
|
|
var message = "Failed to execute '" + methodName + "' on '" + objectName + "': " +
|
|
"The index provided (" + index + ") is larger than the maximum index (" + maxIndex + ").";
|
|
throwError(context, 'DOMException', message, name || 'IndexSizeError');
|
|
}
|
|
|
|
var errorUtils = {
|
|
createError: createError,
|
|
getErrorConstructor: getErrorConstructor,
|
|
throwError: throwError,
|
|
throwMissingArguments: throwMissingArguments,
|
|
throwParseError: throwParseError,
|
|
throwIndexError: throwIndexError
|
|
};
|
|
|
|
//.CommonJS
|
|
exports.errorUtils = errorUtils;
|
|
///CommonJS
|