package main import ( "flag" "fmt" "log" "path" "path/filepath" "github.com/pkg/errors" generator "github.com/projectdiscovery/nuclei/v3/pkg/js/devtools/bindgen" fileutil "github.com/projectdiscovery/utils/file" ) var ( dir string generatedDir string targetModules string ) func main() { flag.StringVar(&dir, "dir", "libs", "directory to process") flag.StringVar(&generatedDir, "out", "generated", "directory to output generated files") flag.StringVar(&targetModules, "target", "", "target modules to generate") flag.Parse() log.SetFlags(0) if !fileutil.FolderExists(dir) { log.Fatalf("directory %s does not exist", dir) } if err := process(); err != nil { log.Fatal(err) } } func process() error { modules, err := generator.GetLibraryModules(dir) if err != nil { return errors.Wrap(err, "could not get library modules") } if len(modules) == 0 && fileutil.FolderExists(dir) { // if no modules are found, then given directory is the module itself targetModules = path.Base(dir) modules = append(modules, targetModules) dir = filepath.Dir(dir) } for _, module := range modules { log.Printf("[module] Generating %s", module) data, err := generator.CreateTemplateData(filepath.Join(dir, module), "github.com/projectdiscovery/nuclei/v3/pkg/js/libs/") if err != nil { return fmt.Errorf("could not create template data: %v", err) } prefixed := "lib" + module err = data.WriteJSTemplate(filepath.Join(generatedDir, "js/"+prefixed), module) if err != nil { return fmt.Errorf("could not write js template: %v", err) } err = data.WriteGoTemplate(path.Join(generatedDir, "go/"+prefixed), module) if err != nil { return fmt.Errorf("could not write go template: %v", err) } // disabled for now since we have static website for docs // err = data.WriteMarkdownLibraryDocumentation(path.Join(generatedDir, "markdown/"), module) // if err != nil { // return fmt.Errorf("could not write markdown template: %v", err) // } // err = data.WriteMarkdownIndexTemplate(path.Join(generatedDir, "markdown/")) // if err != nil { // return fmt.Errorf("could not write markdown index template: %v", err) // } data.InitNativeScripts() } return nil }