























@@ -889,6 +889,7 @@ export function resolveExtensionApiAlias(params: LoaderModuleResolveParams = {})
889889890890const JITI_NORMALIZED_ALIAS_SYMBOL = Symbol.for("pathe:normalizedAlias");
891891const JITI_ALIAS_ROOT_SENTINELS = new Set<string | undefined>(["/", "\\", undefined]);
892+const JITI_CONCRETE_ALIAS_TARGET_PATTERN = /^(?:[A-Za-z]:[/\\]|[/\\])/;
892893893894// Memoize loader alias/config by effective resolution context so repeated
894895// loader setup avoids rebuilding the same filesystem-derived map and cache key.
@@ -919,6 +920,45 @@ function createJitiAliasContentCacheKey(aliasMap: Record<string, string>) {
919920.join("\0");
920921}
921922923+function isConcreteJitiAliasTarget(target: string | undefined): boolean {
924+return typeof target === "string" && JITI_CONCRETE_ALIAS_TARGET_PATTERN.test(target);
925+}
926+927+function resolveJitiAliasTarget(
928+aliasKey: string,
929+aliasKeys: string[],
930+aliasMap: Record<string, string>,
931+) {
932+let target = aliasMap[aliasKey];
933+const seenTargets = new Set<string>();
934+const seenAliasKeys = new Set<string>();
935+while (target && !isConcreteJitiAliasTarget(target) && !seenTargets.has(target)) {
936+seenTargets.add(target);
937+let nextTarget: string | undefined;
938+for (const candidateKey of aliasKeys) {
939+if (
940+candidateKey === aliasKey ||
941+aliasKey.startsWith(candidateKey) ||
942+!target.startsWith(candidateKey) ||
943+!JITI_ALIAS_ROOT_SENTINELS.has(target[candidateKey.length])
944+) {
945+continue;
946+}
947+if (seenAliasKeys.has(candidateKey)) {
948+return target;
949+}
950+seenAliasKeys.add(candidateKey);
951+nextTarget = aliasMap[candidateKey] + target.slice(candidateKey.length);
952+break;
953+}
954+if (!nextTarget || nextTarget === target) {
955+break;
956+}
957+target = nextTarget;
958+}
959+return target;
960+}
961+922962function normalizePluginLoaderAliasMapForJiti(
923963aliasMap: Record<string, string>,
924964): Record<string, string> {
@@ -950,18 +990,15 @@ function normalizePluginLoaderAliasMapForJiti(
950990([left], [right]) => getAliasDepth(right) - getAliasDepth(left),
951991),
952992);
953-for (const aliasKey in normalizedAliasMap) {
954-for (const candidateKey in normalizedAliasMap) {
955-if (
956-candidateKey === aliasKey ||
957-aliasKey.startsWith(candidateKey) ||
958-!normalizedAliasMap[aliasKey]?.startsWith(candidateKey) ||
959-!JITI_ALIAS_ROOT_SENTINELS.has(normalizedAliasMap[aliasKey]?.[candidateKey.length])
960-) {
961-continue;
962-}
963-normalizedAliasMap[aliasKey] =
964-normalizedAliasMap[candidateKey] + normalizedAliasMap[aliasKey].slice(candidateKey.length);
993+const aliasKeys = Object.keys(normalizedAliasMap);
994+for (const aliasKey of aliasKeys) {
995+const target = normalizedAliasMap[aliasKey];
996+if (!target || isConcreteJitiAliasTarget(target)) {
997+continue;
998+}
999+const resolvedTarget = resolveJitiAliasTarget(aliasKey, aliasKeys, normalizedAliasMap);
1000+if (resolvedTarget) {
1001+normalizedAliasMap[aliasKey] = resolvedTarget;
9651002}
9661003}
9671004Object.defineProperty(normalizedAliasMap, JITI_NORMALIZED_ALIAS_SYMBOL, {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。