// Copyright 2017 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . // Package tracers contains the actual JavaScript tracer assets. package tracers import ( "embed" "io/fs" "strings" "unicode" ) //go:embed *.js var files embed.FS // Load reads the built-in JS tracer files embedded in the binary and // returns a mapping of tracer name to source. func Load() (map[string]string, error) { var assetTracers = make(map[string]string) err := fs.WalkDir(files, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if d.IsDir() { return nil } b, err := fs.ReadFile(files, path) if err != nil { return err } name := camel(strings.TrimSuffix(path, ".js")) assetTracers[name] = string(b) return nil }) return assetTracers, err } // camel converts a snake cased input string into a camel cased output. func camel(str string) string { pieces := strings.Split(str, "_") for i := 1; i < len(pieces); i++ { pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:] } return strings.Join(pieces, "") }