Aktualisiere die Version auf 1.4.2 und füge Funktionen zur Fehlerprotokollierung und Validierung von Saison-Slugs hinzu
Some checks failed
Code Analysis and Production Deploy / analyze (push) Has been skipped
Code Analysis and Production Deploy / deploy-production (push) Has been skipped
Code Analysis and Production Deploy / deploy-test (push) Successful in 1m51s
Code Analysis and Production Deploy / analyze (pull_request) Failing after 2m43s
Code Analysis and Production Deploy / deploy-production (pull_request) Has been skipped
Code Analysis and Production Deploy / deploy-test (pull_request) Has been skipped
Require Package Version Change / check (pull_request) Failing after 8s

This commit is contained in:
Torsten Schulz (local)
2026-05-20 11:07:56 +02:00
parent 4e918870f5
commit 2503eb92af
2 changed files with 27 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "harheimertc-website",
"version": "1.4.1",
"version": "1.4.2",
"description": "Moderne Webseite für den Harheimer Tischtennis Club",
"private": true,
"type": "module",

View File

@@ -75,6 +75,26 @@ function seasonSlugToLabel(slug) {
return `20${match[1]}/${match[2]}`
}
function logReadError(message, filePath, error) {
console.error(message, { filePath, error })
}
function requireSeasonSlug(seasonSlug) {
const value = String(seasonSlug || '')
if (!SEASON_SLUG_PATTERN.test(value)) {
throw new Error(`Ungueltiger Spielplan-Saison-Slug: ${value}`)
}
return value
}
function normalizeSpielplanCsvPath(csvPath) {
const value = String(csvPath || '')
if (value.includes('\0') || path.basename(value) !== 'spielplan.csv') {
throw new Error('Ungueltiger Spielplan-CSV-Pfad')
}
return path.normalize(value)
}
export function getCurrentSeasonSlug(date = new Date()) {
const year = date.getFullYear()
const month = date.getMonth()
@@ -353,7 +373,7 @@ async function readFirstExistingJson(paths) {
}
} catch (error) {
if (error.code !== 'ENOENT') {
console.error(`Fehler beim Lesen der Spielplan-JSON ${filePath}:`, error)
logReadError('Fehler beim Lesen der Spielplan-JSON', filePath, error)
}
}
}
@@ -374,7 +394,7 @@ async function readFirstExistingCsv(paths) {
}
} catch (error) {
if (error.code !== 'ENOENT') {
console.error(`Fehler beim Lesen der Spielplan-CSV ${filePath}:`, error)
logReadError('Fehler beim Lesen der Spielplan-CSV', filePath, error)
}
}
}
@@ -419,7 +439,7 @@ export async function listSpielplanSeasons() {
entries = await fs.readdir(directory)
} catch (error) {
if (error.code !== 'ENOENT') {
console.error(`Fehler beim Lesen des Spielplan-Saisonverzeichnisses ${directory}:`, error)
logReadError('Fehler beim Lesen des Spielplan-Saisonverzeichnisses', directory, error)
}
continue
}
@@ -468,5 +488,7 @@ export async function readSpielplanData(options = {}) {
}
export function getSpielplanSeasonJsonPathForCsvPath(csvPath, seasonSlug) {
return path.join(path.dirname(csvPath), 'spielplaene', `spielplan-${seasonSlug}.json`)
const safeCsvPath = normalizeSpielplanCsvPath(csvPath)
const safeSeasonSlug = requireSeasonSlug(seasonSlug)
return `${path.dirname(safeCsvPath)}/spielplaene/spielplan-${safeSeasonSlug}.json`
}