Skip to content

Commit 43d5af1

Browse files
committed
use chain builder as a router for all chains to be supported
1 parent 911d7ce commit 43d5af1

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { Chain, StarshipConfig } from '@starship-ci/types';
2+
3+
import { IGenerator, Manifest } from '../../types';
4+
import { CosmosBuilder } from './cosmos';
5+
6+
// Export all individual builders and components
7+
export * from './cosmos';
8+
9+
const chainBuilderRegistry: Record<
10+
string,
11+
new (config: StarshipConfig) => IGenerator
12+
> = {
13+
// ethereum: EthereumBuilder, // Future: when ethereum builder is implemented
14+
};
15+
16+
function createBuilder(chainName: string, config: StarshipConfig): IGenerator {
17+
const builder = chainBuilderRegistry[chainName] || CosmosBuilder; // default to cosmos builder if no builder is found
18+
return new builder(config);
19+
}
20+
21+
/**
22+
* Main ChainBuilder that uses the factory pattern to create appropriate builders
23+
*/
24+
export class ChainBuilder implements IGenerator {
25+
private config: StarshipConfig;
26+
private generators: IGenerator[] = [];
27+
28+
constructor(config: StarshipConfig) {
29+
this.config = config;
30+
31+
// Create builders for each chain
32+
this.config.chains?.forEach((chain) => {
33+
this.generators.push(createBuilder(chain.name, this.config));
34+
});
35+
}
36+
37+
generate(): Manifest[] {
38+
return this.generators.flatMap((generator) => generator.generate());
39+
}
40+
}

packages/packages/generator/src/builders/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import * as path from 'path';
55

66
import { applyDefaults } from '../defaults';
77
import { Manifest } from '../types';
8-
import { CosmosBuilder } from './chains/cosmos';
8+
import { ChainBuilder } from './chains';
99
import { ExplorerBuilder } from './explorer';
1010
import { FrontendBuilder } from './frontend';
1111
import { RegistryBuilder } from './registry';
@@ -76,7 +76,7 @@ export class BuilderManager {
7676

7777
build(outputDir: string): void {
7878
const builders = [
79-
new CosmosBuilder(this.config),
79+
new ChainBuilder(this.config),
8080
new RegistryBuilder(this.config),
8181
new ExplorerBuilder(this.config),
8282
new FrontendBuilder(this.config),

packages/packages/generator/src/builders/relayers/index.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,13 @@ function createBuilder(relayer: Relayer, config: StarshipConfig): IGenerator {
3838
export class RelayerBuilder implements IGenerator {
3939
private config: StarshipConfig;
4040
private relayers: Relayer[];
41-
private defaultsManager: DefaultsManager;
4241
private generators: IGenerator[] = [];
4342

4443
constructor(config: StarshipConfig) {
4544
this.config = config;
46-
this.defaultsManager = new DefaultsManager();
4745

4846
// Process relayers with defaults
49-
this.relayers = (config.relayers || []).map((relayer) =>
50-
this.defaultsManager.processRelayer(relayer)
51-
);
47+
this.relayers = config.relayers || []
5248

5349
this.generators = this.relayers.map((relayer) =>
5450
createBuilder(relayer, this.config)

0 commit comments

Comments
 (0)