MCPcopy
hub / github.com/esm-dev/esm.sh / esmRouter

Function esmRouter

server/router.go:61–1579  ·  view source on GitHub ↗
(esmStorage storage.Storage, logger *log.Logger)

Source from the content-addressed store, hash-verified

59)
60
61func esmRouter(esmStorage storage.Storage, logger *log.Logger) rex.Handle {
62 var (
63 startTime = time.Now()
64 globalETag = fmt.Sprintf(`W/"%s"`, VERSION)
65 buildQueue = NewBuildQueue(int(config.BuildConcurrency))
66 npmrc = DefaultNpmRC()
67 metaDB = NewBuildMetaDB(esmStorage)
68 )
69
70 // todo: remove old db code after migration is complete
71 {
72 oldDbFile := path.Join(config.WorkDir, "esm.db")
73 if existsFile(oldDbFile) {
74 var err error
75 metaDB.oldDB, err = OpenBoltDB(oldDbFile)
76 if err != nil {
77 logger.Errorf("failed to open old db: %v", err)
78 }
79 }
80 }
81
82 // purge npm cache when disk is low or full
83 go func() {
84 // run an initial check before waiting for the first ticker event
85 purgeNPMCacheWhenDiskIsLowOrFull(npmrc, logger)
86
87 ticker := time.NewTicker(1 * time.Hour)
88 defer ticker.Stop()
89 for range ticker.C {
90 go purgeNPMCacheWhenDiskIsLowOrFull(npmrc, logger)
91 }
92 }()
93
94 return func(ctx *rex.Context) any {
95 pathname := ctx.R.URL.Path
96
97 // ban malicious requests
98 if strings.HasSuffix(pathname, ".env") || strings.HasSuffix(pathname, ".php") || strings.Contains(pathname, "/.") {
99 ctx.SetHeader("Cache-Control", ccImmutable)
100 return rex.Status(404, "not found")
101 }
102
103 // handle POST API requests
104 switch ctx.R.Method {
105 case "HEAD", "GET":
106 // continue
107 case "POST":
108 switch pathname {
109 case "/transform":
110 var options TransformOptions
111 err := json.NewDecoder(io.LimitReader(ctx.R.Body, 2*MB)).Decode(&options)
112 ctx.R.Body.Close()
113 if err != nil {
114 return rex.Err(400, "require valid json body")
115 }
116 if options.Code == "" {
117 return rex.Err(400, "Code is required")
118 }

Callers 1

StartFunction · 0.85

Calls 15

installMethod · 0.95
resolveEntryMethod · 0.95
ExistsMethod · 0.95
PathMethod · 0.95
getSavePathMethod · 0.95
ParseFunction · 0.92
NewClientFunction · 0.92
GetContentTypeFunction · 0.92
NewBuildQueueFunction · 0.85
DefaultNpmRCFunction · 0.85
NewBuildMetaDBFunction · 0.85
existsFileFunction · 0.85

Tested by

no test coverage detected