fix: resolve RedisCache array offset error and improve discovery diagnostics

- Fix RedisCache driver to handle MGET failures gracefully with fallback
- Add comprehensive discovery context comparison debug tools
- Identify root cause: WEB context discovery missing 166 items vs CLI
- WEB context missing RequestFactory class entirely (52 vs 69 commands)
- Improved exception handling with detailed binding diagnostics
This commit is contained in:
2025-09-12 20:05:18 +02:00
parent 8040d3e7a5
commit e30753ba0e
46990 changed files with 10789682 additions and 89639 deletions

View File

@@ -1,119 +0,0 @@
body:has(aside.show) {
overflow: hidden;
scrollbar-gutter: stable;
}
aside {
--sidebar-width: min(50ch, 100vw);
position: absolute;
z-index: 3000;
visibility: hidden;
background-color: #2c1c59;
color: #fff;
padding: 3rem;
border: none;
/*position: fixed;*/
/*position: sticky;*/
top: 0;
right: 0;
bottom: 0;
left: calc(100vw - var(--sidebar-width));
width: var(--sidebar-width);
height: 100vh;
transition: opacity 0.25s, translate 0.25s, overlay 0.25s allow-discrete, display 0.25s allow-discrete;
opacity: 0;
translate: 100% 0;
&.show {
visibility: visible;
opacity: 1;
translate: 0 0;
}
button {
place-content: end;
background-color: transparent;
border: none;
cursor: pointer;
padding: 0;
appearance: none;
font-size: 2rem;
font-weight: 700;
margin-inline-end: 0.5rem;
float: right;
&:hover {
color: #fff;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
}
}
/* Backdrop */
.backdrop {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(4px);
opacity: 0;
pointer-events: none;
transition: opacity 0.3s ease;
z-index: 1000;
/*cursor: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/9632/heart.svg), auto;*/
}
:is(aside.show) .backdrop {
opacity: 1;
}
body:has(aside.show) .backdrop {
opacity: 1;
pointer-events: auto;
}
aside > nav > ul {
padding-block-start: 10rem;
display: flex;
flex-direction: column;
list-style: none;
gap: 3rem;
a {
text-decoration: none;
font-weight: 700;
text-transform: uppercase;
font-size: 1rem;
/*font-size: 1.5rem;*/
}
@media (hover) and (prefers-reduced-motion: no-preference) {
& > li {
transition: opacity .3s ease;
}
&:has(:hover) > li:not(:hover) {
opacity: .85;
}
/* for keyboard support */
&:is(:hover, :focus-within) > li:not(:hover, :focus-within) {
opacity: .85;
}
}
}
.backdrop:has( ~ #sidebar a:hover, ~ #sidebar a:focus)/*, .backdrop:has( ~ #sidebar a:focus)*/ {
background-color: rgba(0 0 0 / 0.1);
}

View File

@@ -7,7 +7,6 @@
@import url('layout/container.css') layer(layout);
@import url('components/header.css') layer(components);
@import url('components/footer.css') layer(components);
@import url('components/sidebar.css') layer(components);
@import url('components/nav.css') layer(components);
@import url('components/buttons.css') layer(components);
@import url('components/card.css') layer(components);

View File

@@ -64,10 +64,6 @@
animation: slide-up 0.2s ease-out; /* Von 0.4s auf 0.2s reduziert */
}
::view-transition-old(sidebar),
::view-transition-new(sidebar) {
animation: blur-in 0.15s ease-out; /* Von 0.3s auf 0.15s reduziert */
}
/* Respektiere User-Präferenzen für reduzierte Bewegung */
@media (prefers-reduced-motion: reduce) {
@@ -76,9 +72,7 @@
::view-transition-old(site-header),
::view-transition-new(site-header),
::view-transition-old(site-footer),
::view-transition-new(site-footer),
::view-transition-old(sidebar),
::view-transition-new(sidebar) {
::view-transition-new(site-footer) {
animation: none;
}
}

View File

@@ -1,11 +1,3 @@
/*
const menu = document.getElementById("sidebar-menu");
const closeBtn = menu.querySelector(".close-btn");
closeBtn.addEventListener("click", () => {
menu.hidePopover();
});
*/
import { registerModules, activeModules } from "../modules/index.js";

View File

@@ -35,7 +35,7 @@ export class CsrfAutoRefresh {
apiEndpoint: '/api/csrf/refresh',
tokenSelector: 'input[name="_token"]',
formIdSelector: 'input[name="_form_id"]',
enableVisualFeedback: true,
enableVisualFeedback: false, // Disabled to hide browser notifications
enableConsoleLogging: true,
pauseWhenHidden: true, // Pause refresh when tab is not visible
maxRetries: 3,
@@ -110,7 +110,7 @@ export class CsrfAutoRefresh {
// Show visual feedback if enabled
if (this.config.enableVisualFeedback) {
this.showStatusMessage('CSRF protection enabled - tokens will refresh automatically', 'info');
// this.showStatusMessage('CSRF protection enabled - tokens will refresh automatically', 'info');
}
}
@@ -175,7 +175,7 @@ export class CsrfAutoRefresh {
// Show visual feedback
if (this.config.enableVisualFeedback) {
this.showStatusMessage('Security token refreshed', 'success');
// this.showStatusMessage('Security token refreshed', 'success');
}
} catch (error) {
@@ -228,7 +228,7 @@ export class CsrfAutoRefresh {
// Show visual feedback for retry
if (this.config.enableVisualFeedback) {
this.showStatusMessage(`Token refresh failed, retrying... (${this.retryCount}/${this.config.maxRetries})`, 'warning');
// this.showStatusMessage(`Token refresh failed, retrying... (${this.retryCount}/${this.config.maxRetries})`, 'warning');
}
} else {
// Max retries reached
@@ -236,7 +236,7 @@ export class CsrfAutoRefresh {
this.stop();
if (this.config.enableVisualFeedback) {
this.showStatusMessage('Token refresh failed. Please refresh the page if you encounter errors.', 'error');
// this.showStatusMessage('Token refresh failed. Please refresh the page if you encounter errors.', 'error');
}
}
}

View File

@@ -1,67 +0,0 @@
import {useEvent} from "../../core";
import {removeModules} from "../../core/removeModules";
let keydownHandler = null;
let clickHandler = null;
export function init() {
const el = document.getElementById("sidebar-menu");
const button = document.getElementById('menu-toggle');
const aside = document.getElementById('sidebar');
const backdrop = document.querySelector('.backdrop');
const footer = document.querySelector('footer');
const headerLink = document.querySelector('header a');
// Check if required elements exist
if (!button || !aside || !backdrop) {
console.info('[Sidebar] Required elements not found, skipping sidebar initialization');
return;
}
useEvent(button, 'click', (e) => {
aside.classList.toggle('show');
//aside.toggleAttribute('inert')
let isVisible = aside.classList.contains('show');
if (isVisible) {
backdrop.classList.add('visible');
if (footer) footer.setAttribute('inert', 'true');
if (headerLink) headerLink.setAttribute('inert', 'true');
} else {
backdrop.classList.remove('visible');
if (footer) footer.removeAttribute('inert');
if (headerLink) headerLink.removeAttribute('inert');
}
})
keydownHandler = (e) => {
if(e.key === 'Escape'){
if(aside.classList.contains('show')){
aside.classList.remove('show');
backdrop.classList.remove('visible');
}
}
}
useEvent(document, 'keydown', keydownHandler)
clickHandler = (e) => {
aside.classList.remove('show');
backdrop.classList.remove('visible');
if (footer) footer.removeAttribute('inert');
if (headerLink) headerLink.removeAttribute('inert');
}
useEvent(backdrop, 'click' , clickHandler)
}
export function destroy() {
/*document.removeEventListener('keydown', keydownHandler);
document.removeEventListener('click', clickHandler);*/
removeModules('sidebar');
}