"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Event_js_1 = __importDefault(require("../../event/Event.cjs")); const ErrorEvent_js_1 = __importDefault(require("../../event/events/ErrorEvent.cjs")); const ResourceFetch_js_1 = __importDefault(require("../../fetch/ResourceFetch.cjs")); const CSSStyleSheet_js_1 = __importDefault(require("../../css/CSSStyleSheet.cjs")); const DOMException_js_1 = __importDefault(require("../../exception/DOMException.cjs")); const DOMExceptionNameEnum_js_1 = __importDefault(require("../../exception/DOMExceptionNameEnum.cjs")); /** * Helper class for getting the URL relative to a Location object. */ class HTMLLinkElementUtility { /** * Returns a URL relative to the given Location object. * * @param options Options. * @param options.element Element. * @param element */ static async loadExternalStylesheet(element) { const href = element.getAttribute('href'); const rel = element.getAttribute('rel'); if (href !== null && rel && rel.toLowerCase() === 'stylesheet' && element.isConnected) { if (element.ownerDocument.defaultView.happyDOM.settings.disableCSSFileLoading) { this.onError(element, new DOMException_js_1.default(`Failed to load external stylesheet "${href}". CSS file loading is disabled.`, DOMExceptionNameEnum_js_1.default.notSupportedError)); return; } element.ownerDocument._readyStateManager.startTask(); let code; try { code = await ResourceFetch_js_1.default.fetch(element.ownerDocument, href); } catch (error) { this.onError(element, error); return; } const styleSheet = new CSSStyleSheet_js_1.default(); styleSheet.replaceSync(code); element.sheet = styleSheet; element.dispatchEvent(new Event_js_1.default('load')); element.ownerDocument._readyStateManager.endTask(); } } /** * Triggered when an error occurs. * * @param element Element. * @param error Error. */ static onError(element, error) { element.dispatchEvent(new ErrorEvent_js_1.default('error', { message: error.message, error })); element.ownerDocument.defaultView.dispatchEvent(new ErrorEvent_js_1.default('error', { message: error.message, error })); element.ownerDocument._readyStateManager.endTask(); if (!element['_listeners']['error'] && !element.ownerDocument.defaultView['_listeners']['error']) { element.ownerDocument.defaultView.console.error(error); } } } exports.default = HTMLLinkElementUtility; //# sourceMappingURL=HTMLLinkElementUtility.cjs.map