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

Method getAppImportMap

web/handler.go:767–814  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

765}
766
767func (s *Handler) getAppImportMap() (importMapRaw []byte, importMap *importmap.ImportMap, err error) {
768 file, err := os.Open(filepath.Join(s.config.AppDir, "index.html"))
769 if err != nil {
770 return
771 }
772 defer file.Close()
773
774 tokenizer := html.NewTokenizer(file)
775 for {
776 tt := tokenizer.Next()
777 if tt == html.ErrorToken {
778 break
779 }
780 if tt == html.StartTagToken {
781 tagName, moreAttr := tokenizer.TagName()
782 if string(tagName) == "script" {
783 var typeAttr string
784 for moreAttr {
785 var key, val []byte
786 key, val, moreAttr = tokenizer.TagAttr()
787 if string(key) == "type" {
788 typeAttr = string(val)
789 break
790 }
791 }
792 if typeAttr == "importmap" {
793 tokenizer.Next()
794 importMapRaw = tokenizer.Text()
795 importMap, err = importmap.Parse(nil, importMapRaw)
796 if err != nil {
797 err = errors.New("invalid import map")
798 return
799 }
800 // todo: cache parsed import map
801 break
802 }
803 } else if string(tagName) == "body" {
804 break
805 }
806 } else if tt == html.EndTagToken {
807 tagName, _ := tokenizer.TagName()
808 if bytes.Equal(tagName, []byte("head")) {
809 break
810 }
811 }
812 }
813 return
814}
815
816func (s *Handler) analyzeDependencyTree(entry string, importMap *importmap.ImportMap) (tree map[string][]byte, err error) {
817 tree = make(map[string][]byte)

Callers 1

ServeModuleMethod · 0.95

Calls 3

ParseFunction · 0.92
NextMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected