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

Method ServeModule

web/handler.go:391–515  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request, filename string, query url.Values, preTransformContent []byte)

Source from the content-addressed store, hash-verified

389}
390
391func (s *Handler) ServeModule(w http.ResponseWriter, r *http.Request, filename string, query url.Values, preTransformContent []byte) {
392 indexHtmlStat, err := os.Lstat(filepath.Join(s.config.AppDir, "index.html"))
393 if err != nil {
394 if os.IsNotExist(err) {
395 http.Error(w, "Bad Request", 400)
396 } else {
397 http.Error(w, "Internal Server Error", 500)
398 }
399 return
400 }
401
402 var modTime uint64
403 var size int64
404 if preTransformContent != nil {
405 xx := xxhash.New()
406 xx.Write(preTransformContent)
407 modTime = xx.Sum64()
408 size = int64(len(preTransformContent))
409 } else {
410 fi, err := os.Lstat(filepath.Join(s.config.AppDir, filename))
411 if err != nil {
412 if os.IsNotExist(err) {
413 http.Error(w, "Not Found", 404)
414 } else {
415 http.Error(w, "Internal Server Error", 500)
416 }
417 return
418 }
419 modTime = uint64(fi.ModTime().UnixMilli())
420 size = fi.Size()
421 }
422 etag := fmt.Sprintf("w/\"%x-%x-%x-%x%s\"", modTime, size, indexHtmlStat.ModTime().UnixMilli(), indexHtmlStat.Size(), s.etagSuffix)
423 if r.Header.Get("If-None-Match") == etag && !query.Has("t") {
424 w.WriteHeader(http.StatusNotModified)
425 return
426 }
427 cacheKey := "module-" + filename
428 etagCacheKey := cacheKey + ".etag"
429 if js, ok := s.loaderCache.Load(cacheKey); ok {
430 if e, ok := s.loaderCache.Load(etagCacheKey); ok {
431 if e.(string) == etag {
432 header := w.Header()
433 header.Set("Content-Type", "application/javascript; charset=utf-8")
434 if !query.Has("t") {
435 header.Set("Cache-Control", "public, max-age=0, must-revalidate")
436 header.Set("Etag", etag)
437 }
438 w.Write(js.([]byte))
439 return
440 }
441 }
442 }
443 if s.loaderWorker == nil {
444 http.Error(w, "Loader worker not started", 500)
445 return
446 }
447 _, importMap, err := s.getAppImportMap()
448 if err != nil {

Callers 2

ServeHTTPMethod · 0.95
preloadMethod · 0.95

Calls 12

getAppImportMapMethod · 0.95
ParseEsmPathFunction · 0.92
ErrorMethod · 0.80
WriteMethod · 0.80
HasMethod · 0.80
WriteHeaderMethod · 0.80
HeaderMethod · 0.80
SetMethod · 0.80
CallMethod · 0.80
ModTimeMethod · 0.65
SizeMethod · 0.65
GetMethod · 0.65

Tested by

no test coverage detected