fix: migrate placeholders after encoded path separators

This commit is contained in:
muena
2026-09-24 19:25:06 +02:00
parent ae62c6f95c
commit 8e928bc69f
2 changed files with 37 additions and 1 deletions

View File

@@ -11,6 +11,9 @@ const excluded = new Set([".git", "node_modules", "dist", "build", "out", ".next
".venv", "venv", "__pycache__", "target", "vendor", "coverage", ".cache", ".turbo",
".idea", ".vscode", "Pods", "DerivedData"]);
const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
// In URL-kodierten Dateinamen steht nach %2f unmittelbar ein "f" vor dem Platzhalter.
// Das ist ein Pfadtrenner, kein angrenzender Buchstabe des Bezeichners.
const strictPrefix = "(?:(?<![\\p{L}\\p{N}])|(?<=%2[fF]))";
const hasSeparator = (value) => /[^\p{L}\p{N}]/u.test(value);
const shape = (value) => !/\p{L}/u.test(value) ? "mixed"
: value === value.toUpperCase() ? "upper" : value === value.toLowerCase() ? "lower" : "mixed";
@@ -52,7 +55,7 @@ export function createConverter(manifest, globalTerms = []) {
})).sort((a, b) => b.needle.length - a.needle.length || a.needle.localeCompare(b.needle));
const lookup = new Map(needles.map((item) => [item.needle, item]));
const pattern = needles.length ? new RegExp(needles.map((item) => item.strict
? `(?<![\\p{L}\\p{N}])${escapeRegex(item.needle)}(?![\\p{L}\\p{N}])`
? `${strictPrefix}${escapeRegex(item.needle)}(?![\\p{L}\\p{N}])`
: escapeRegex(item.needle)).join("|"), "gu") : null;
const mapping = {};
const matchModes = {};