fix: npm pkg

This commit is contained in:
2025-11-15 21:35:41 +08:00
parent bb00250dda
commit 319d0021b9
4 changed files with 38 additions and 17 deletions

View File

@@ -1,10 +1,6 @@
package hubmodule package hubmodule
import ( import "time"
"time"
"github.com/any-hub/any-hub/internal/cache"
)
// MigrationState 描述模块上线阶段,方便观测端区分 legacy/beta/ga。 // MigrationState 描述模块上线阶段,方便观测端区分 legacy/beta/ga。
type MigrationState string type MigrationState string
@@ -48,5 +44,12 @@ func DefaultModuleKey() string {
return defaultModuleKey return defaultModuleKey
} }
// Locator 表示模块可用于重写缓存路径的轻量结构体,避免依赖 cache 包。
type Locator struct {
HubName string
Path string
HubType string
}
// LocatorRewrite 允许模块根据自身协议调整缓存路径,例如将 npm metadata 写入独立文件。 // LocatorRewrite 允许模块根据自身协议调整缓存路径,例如将 npm metadata 写入独立文件。
type LocatorRewrite func(cache.Locator) cache.Locator type LocatorRewrite func(Locator) Locator

View File

@@ -25,6 +25,6 @@ func init() {
RequiresMetadataFile: false, RequiresMetadataFile: false,
SupportsStreamingWrite: true, SupportsStreamingWrite: true,
}, },
LocatorRewrite: rewriteLocator, LocatorRewrite: hubmodule.DefaultLocatorRewrite("npm"),
}) })
} }

View File

@@ -1,14 +1,18 @@
package npm package hubmodule
import ( import "strings"
"strings"
"github.com/any-hub/any-hub/internal/cache" // DefaultLocatorRewrite 针对内置 hub 类型提供缓存路径重写逻辑。
) func DefaultLocatorRewrite(hubType string) LocatorRewrite {
switch hubType {
case "npm":
return rewriteNPMLocator
default:
return nil
}
}
// rewriteLocator 将 npm metadata JSON 落盘至 package.json避免与 tarball func rewriteNPMLocator(loc Locator) Locator {
// 路径的 `/-/` 子目录冲突,同时保持 tarball 使用原始路径。
func rewriteLocator(loc cache.Locator) cache.Locator {
path := loc.Path path := loc.Path
if path == "" { if path == "" {
return loc return loc

View File

@@ -20,6 +20,7 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/any-hub/any-hub/internal/cache" "github.com/any-hub/any-hub/internal/cache"
"github.com/any-hub/any-hub/internal/hubmodule"
"github.com/any-hub/any-hub/internal/logging" "github.com/any-hub/any-hub/internal/logging"
"github.com/any-hub/any-hub/internal/server" "github.com/any-hub/any-hub/internal/server"
) )
@@ -289,6 +290,7 @@ func (h *Handler) buildUpstreamRequest(c fiber.Ctx, upstream *url.URL, route *se
requestHeaders := fiberHeadersAsHTTP(c) requestHeaders := fiberHeadersAsHTTP(c)
server.CopyHeaders(req.Header, requestHeaders) server.CopyHeaders(req.Header, requestHeaders)
req.Header.Del("Accept-Encoding")
req.Host = upstream.Host req.Host = upstream.Host
req.Header.Set("Host", upstream.Host) req.Header.Set("Host", upstream.Host)
req.Header.Set("X-Forwarded-Host", c.Hostname()) req.Header.Set("X-Forwarded-Host", c.Hostname())
@@ -410,8 +412,20 @@ func buildLocator(route *server.HubRoute, c fiber.Ctx) cache.Locator {
HubName: route.Config.Name, HubName: route.Config.Name,
Path: clean, Path: clean,
} }
if route.Module.LocatorRewrite != nil { rewrite := route.Module.LocatorRewrite
loc = route.Module.LocatorRewrite(loc) if rewrite == nil {
rewrite = hubmodule.DefaultLocatorRewrite(route.Config.Type)
}
if rewrite != nil {
rewritten := rewrite(hubmodule.Locator{
HubName: loc.HubName,
Path: loc.Path,
HubType: route.Config.Type,
})
loc = cache.Locator{
HubName: rewritten.HubName,
Path: rewritten.Path,
}
} }
return loc return loc
} }