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
import (
"time"
"github.com/any-hub/any-hub/internal/cache"
)
import "time"
// MigrationState 描述模块上线阶段,方便观测端区分 legacy/beta/ga。
type MigrationState string
@@ -48,5 +44,12 @@ func DefaultModuleKey() string {
return defaultModuleKey
}
// Locator 表示模块可用于重写缓存路径的轻量结构体,避免依赖 cache 包。
type Locator struct {
HubName string
Path string
HubType string
}
// 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,
SupportsStreamingWrite: true,
},
LocatorRewrite: rewriteLocator,
LocatorRewrite: hubmodule.DefaultLocatorRewrite("npm"),
})
}

View File

@@ -1,14 +1,18 @@
package npm
package hubmodule
import (
"strings"
import "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
// 路径的 `/-/` 子目录冲突,同时保持 tarball 使用原始路径。
func rewriteLocator(loc cache.Locator) cache.Locator {
func rewriteNPMLocator(loc Locator) Locator {
path := loc.Path
if path == "" {
return loc

View File

@@ -20,6 +20,7 @@ import (
"github.com/sirupsen/logrus"
"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/server"
)
@@ -289,6 +290,7 @@ func (h *Handler) buildUpstreamRequest(c fiber.Ctx, upstream *url.URL, route *se
requestHeaders := fiberHeadersAsHTTP(c)
server.CopyHeaders(req.Header, requestHeaders)
req.Header.Del("Accept-Encoding")
req.Host = upstream.Host
req.Header.Set("Host", upstream.Host)
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,
Path: clean,
}
if route.Module.LocatorRewrite != nil {
loc = route.Module.LocatorRewrite(loc)
rewrite := route.Module.LocatorRewrite
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
}