|  | @@ -10,7 +10,6 @@ import (
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  var (
 | 
	
		
			
				|  |  | -	cfg     = config.DefaultConfig()
 | 
	
		
			
				|  |  |  	fModule = pflag.StringP("module", "m", "", "module name")
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -24,62 +23,75 @@ func init() {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func main() {
 | 
	
		
			
				|  |  | -	module := admin_api.Module(*fModule)
 | 
	
		
			
				|  |  | -	if !module.IsValid() {
 | 
	
		
			
				|  |  | -		_, _ = fmt.Fprintf(os.Stderr, "incorrect module name has been specified; available modules are: %v\n", admin_api.AllModules)
 | 
	
		
			
				|  |  | -		os.Exit(2)
 | 
	
		
			
				|  |  | +	var modules []admin_api.Module
 | 
	
		
			
				|  |  | +	if *fModule == "all" {
 | 
	
		
			
				|  |  | +		modules = admin_api.AllModules
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		module := admin_api.Module(*fModule)
 | 
	
		
			
				|  |  | +		if !module.IsValid() {
 | 
	
		
			
				|  |  | +			_, _ = fmt.Fprintf(os.Stderr, "incorrect module has been specified; available modules are: %v\n", admin_api.AllModules)
 | 
	
		
			
				|  |  | +			os.Exit(2)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		modules = append(modules, module)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	moduleSchema := fmt.Sprintf("subgraph/%s.tpl", module)
 | 
	
		
			
				|  |  | -	f, err := os.OpenFile(moduleSchema, os.O_RDONLY, 0644)
 | 
	
		
			
				|  |  | -	if err != nil {
 | 
	
		
			
				|  |  | -		_, _ = fmt.Fprintf(os.Stderr, "unknown module; %v\n", err.Error())
 | 
	
		
			
				|  |  | -		os.Exit(2)
 | 
	
		
			
				|  |  | +	for _, module := range modules {
 | 
	
		
			
				|  |  | +		if err := generate(module); err != nil {
 | 
	
		
			
				|  |  | +			_, _ = fmt.Fprintf(os.Stderr, err.Error())
 | 
	
		
			
				|  |  | +			os.Exit(2)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	defer f.Close()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if stat, err := f.Stat(); err != nil || stat.Size() < 1 {
 | 
	
		
			
				|  |  | -		fmt.Printf("illegal module definition schema")
 | 
	
		
			
				|  |  | -		_, _ = fmt.Fprintf(os.Stderr, "illegal module definition schema")
 | 
	
		
			
				|  |  | -		os.Exit(2)
 | 
	
		
			
				|  |  | +	os.Exit(0)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func generate(m admin_api.Module) error {
 | 
	
		
			
				|  |  | +	schema := fmt.Sprintf("subgraph/%s.tpl", m)
 | 
	
		
			
				|  |  | +	if stat, err := os.Stat(schema); err != nil || stat.Size() < 1 {
 | 
	
		
			
				|  |  | +		return fmt.Errorf("illegal module schema definition")
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	cfg := makeConfig(m)
 | 
	
		
			
				|  |  | +	if err := config.CompleteConfig(cfg); err != nil {
 | 
	
		
			
				|  |  | +		return err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if err := api.Generate(cfg); err != nil {
 | 
	
		
			
				|  |  | +		return err
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	return nil
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func makeConfig(m admin_api.Module) *config.Config {
 | 
	
		
			
				|  |  | +	cfg := config.DefaultConfig()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	// Federation
 | 
	
		
			
				|  |  |  	cfg.Federation = config.PackageConfig{
 | 
	
		
			
				|  |  | -		Filename: fmt.Sprintf("graph/%s/generated/federation.go", module),
 | 
	
		
			
				|  |  | +		Filename: fmt.Sprintf("graph/%s/generated/federation.go", m),
 | 
	
		
			
				|  |  |  		Version:  2,
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// Exec
 | 
	
		
			
				|  |  |  	cfg.Exec = config.ExecConfig{
 | 
	
		
			
				|  |  | -		Filename: fmt.Sprintf("graph/%s/generated/generated.go", module),
 | 
	
		
			
				|  |  | +		Filename: fmt.Sprintf("graph/%s/generated/generated.go", m),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// Model
 | 
	
		
			
				|  |  |  	cfg.Model = config.PackageConfig{
 | 
	
		
			
				|  |  | -		Filename: fmt.Sprintf("graph/%s/generated/models.go", module),
 | 
	
		
			
				|  |  | +		Filename: fmt.Sprintf("graph/%s/generated/models.go", m),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	// Resolver
 | 
	
		
			
				|  |  |  	cfg.Resolver = config.ResolverConfig{
 | 
	
		
			
				|  |  |  		Layout:  config.LayoutFollowSchema,
 | 
	
		
			
				|  |  | -		DirName: fmt.Sprintf("graph/%s", module),
 | 
	
		
			
				|  |  | +		DirName: fmt.Sprintf("graph/%s", m),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// SchemaFilename
 | 
	
		
			
				|  |  |  	cfg.SchemaFilename = config.StringList{
 | 
	
		
			
				|  |  | -		moduleSchema,
 | 
	
		
			
				|  |  | -		"ext/*.graphql",
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	if err := config.CompleteConfig(cfg); err != nil {
 | 
	
		
			
				|  |  | -		_, _ = fmt.Fprintln(os.Stderr, err.Error())
 | 
	
		
			
				|  |  | -		os.Exit(3)
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	if err := api.Generate(cfg); err != nil {
 | 
	
		
			
				|  |  | -		_, _ = fmt.Fprintln(os.Stderr, err.Error())
 | 
	
		
			
				|  |  | -		os.Exit(3)
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +		fmt.Sprintf("subgraph/%s.tpl", m), "ext/*.graphql"}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	os.Exit(0)
 | 
	
		
			
				|  |  | +	return cfg
 | 
	
		
			
				|  |  |  }
 |