eventAdapter.js
- Pfad:
public/js/adapters/eventAdapter.js - Namespace: js.adapters
- Zeilen: 80 | Größe: 2,471 Bytes
- Geändert: 2025-12-20 11:27:07 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Funktionen 1
-
withBoundary()Zeile 20
Code
/**
* Event Adapter
* Contract: js-browser-architecture-contract_v2.yaml
*
* Wraps event listener registration with withBoundary error handling.
* All event handlers must be wrapped to catch and log errors.
*/
/**
* Wraps an event handler with error boundary.
* @param {Function} handler - The event handler function
* @param {Object} meta - Metadata for error logging
* @param {string} meta.code - Error code identifier
* @param {string} meta.featureKey - Feature key for disabling on error
* @param {Object} meta.ui - Injected UI dependency
* @param {Object} meta.logger - Injected logger dependency
* @param {string} meta.runId - Run ID for tracing
* @returns {Function} Wrapped handler
*/
export function withBoundary(handler, meta) {
return function wrappedHandler(event) {
try {
return handler(event);
} catch (error) {
const logEntry = {
level: "error",
code: meta.code,
message: error.message,
runId: meta.runId,
context: {
featureKey: meta.featureKey,
eventType: event.type,
target: event.target?.tagName
},
error: error.stack
};
if (meta.logger !== undefined && meta.logger !== null) {
meta.logger.error(logEntry);
}
if (meta.ui !== undefined && meta.ui !== null && typeof meta.ui.showMessage === "function") {
meta.ui.showMessage({
type: "error",
text: "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut."
});
}
}
};
}
/**
* Event Adapter - wraps addEventListener with withBoundary
*/
export const eventAdapter = {
/**
* Adds an event listener with error boundary.
* @param {Element} element - Target element
* @param {string} eventType - Event type (click, input, etc.)
* @param {Function} handler - Event handler
* @param {Object} deps - Injected dependencies
* @param {string} code - Error code for logging
* @param {string} featureKey - Feature key for the component
* @returns {Function} Cleanup function to remove listener
*/
on: (element, eventType, handler, deps, code, featureKey) => {
const wrappedHandler = withBoundary(handler, {
code: code,
featureKey: featureKey,
ui: deps.ui,
logger: deps.logger,
runId: deps.runId
});
element.addEventListener(eventType, wrappedHandler);
return () => element.removeEventListener(eventType, wrappedHandler);
}
};