Skip to content

Commit b3c6e45

Browse files
committed
generating additional export statements package index
1 parent 402e939 commit b3c6e45

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CodegenVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ void execute() {
189189
}
190190

191191
// Generate index for client.
192-
IndexGenerator.writeIndex(settings, model, symbolProvider, fileManifest);
192+
IndexGenerator.writeIndex(settings, model, symbolProvider, fileManifest, integrations);
193193

194194
// Generate protocol tests IFF found in the model.
195195
if (protocolGenerator != null) {

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/IndexGenerator.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package software.amazon.smithy.typescript.codegen;
1717

18+
import java.util.List;
1819
import java.util.Set;
1920
import java.util.TreeSet;
2021
import software.amazon.smithy.build.FileManifest;
@@ -25,6 +26,7 @@
2526
import software.amazon.smithy.model.shapes.OperationShape;
2627
import software.amazon.smithy.model.shapes.ServiceShape;
2728
import software.amazon.smithy.model.traits.PaginatedTrait;
29+
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
2830
import software.amazon.smithy.waiters.WaitableTrait;
2931
import software.amazon.smithy.waiters.Waiter;
3032

@@ -39,7 +41,8 @@ static void writeIndex(
3941
TypeScriptSettings settings,
4042
Model model,
4143
SymbolProvider symbolProvider,
42-
FileManifest fileManifest
44+
FileManifest fileManifest,
45+
List<TypeScriptIntegration> integrations
4346
) {
4447
TypeScriptWriter writer = new TypeScriptWriter("");
4548
ServiceShape service = settings.getService(model);
@@ -78,6 +81,10 @@ static void writeIndex(
7881

7982
// write export statement for models
8083
writer.write("export * from \"./models/index\";");
84+
// Write each custom export.
85+
for (TypeScriptIntegration integration : integrations) {
86+
integration.writeAdditionalExports(settings, model, symbolProvider, writer);
87+
}
8188
fileManifest.writeFile("index.ts", writer.toString());
8289
}
8390
}

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/TypeScriptIntegration.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,25 @@ default void writeAdditionalFiles(
160160
// pass
161161
}
162162

163+
/**
164+
* Write additional export statement to client root index.ts.
165+
* This is necessary when {@link TypeScriptIntegration#writeAdditionalFiles} is also implemented.
166+
*
167+
* @param settings Settings used to generate.
168+
* @param model Model to generate from.
169+
* @param symbolProvider Symbol provider used for codegen.
170+
* @param writer TypeScript writer that works with the file.
171+
* @see #writeAdditionalFiles(TypeScriptSettings, Model, SymbolProvider, BiConsumer)
172+
*/
173+
default void writeAdditionalExports(
174+
TypeScriptSettings settings,
175+
Model model,
176+
SymbolProvider symbolProvider,
177+
TypeScriptWriter writer
178+
) {
179+
// pass
180+
}
181+
163182
/**
164183
* Gets a list of plugins to apply to the generated client.
165184
*

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/IndexGeneratorTest.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.containsString;
55

6+
import java.util.ArrayList;
7+
import java.util.List;
68
import org.junit.jupiter.api.Test;
79
import software.amazon.smithy.build.MockManifest;
810
import software.amazon.smithy.codegen.core.SymbolProvider;
911
import software.amazon.smithy.model.Model;
1012
import software.amazon.smithy.model.node.Node;
13+
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
1114

1215
public class IndexGeneratorTest {
1316

@@ -21,13 +24,26 @@ public void writesIndex() {
2124
.build());
2225
SymbolProvider symbolProvider = TypeScriptCodegenPlugin.createSymbolProvider(model, settings);
2326
MockManifest manifest = new MockManifest();
27+
List<TypeScriptIntegration> integrations = new ArrayList<>();
28+
integrations.add(new TypeScriptIntegration() {
29+
@Override
30+
public void writeAdditionalExports(
31+
TypeScriptSettings settings,
32+
Model model,
33+
SymbolProvider symbolProvider,
34+
TypeScriptWriter writer
35+
) {
36+
writer.write("export * from $S;", "./foo");
37+
}
38+
});
2439

25-
IndexGenerator.writeIndex(settings, model, symbolProvider, manifest);
40+
IndexGenerator.writeIndex(settings, model, symbolProvider, manifest, integrations);
2641

2742
String contents = manifest.getFileString("index.ts").get();
2843
assertThat(contents, containsString("export * from \"./Example\";"));
2944
assertThat(contents, containsString("export * from \"./ExampleClient\";"));
3045
assertThat(contents, containsString("export * from \"./commands/GetFooCommand\";"));
3146
assertThat(contents, containsString("export * from \"./models/index\";"));
47+
assertThat(contents, containsString("export * from \"./foo\";"));
3248
}
3349
}

0 commit comments

Comments
 (0)