Skip to content

Commit 6d5747e

Browse files
authored
generating additional export statements package index (#303)
1 parent 402e939 commit 6d5747e

File tree

4 files changed

+60
-3
lines changed

4 files changed

+60
-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: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,40 @@ default void writeAdditionalFiles(
160160
// pass
161161
}
162162

163+
/**
164+
* Write additional export statement to client root index.ts.
165+
* The files generated by {@link TypeScriptIntegration#writeAdditionalFiles}
166+
* can be exported with this method.
167+
*
168+
* <pre>
169+
* {@code
170+
* public final class MyIntegration implements TypeScriptIntegration {
171+
* public writeAdditionalExports(
172+
* TypeScriptSettings settings,
173+
* Model model,
174+
* SymbolProvider symbolProvider,
175+
* TypeScriptWriter writer
176+
* ) {
177+
* writer.write("export * from $S;", "./foo.ts");
178+
* }
179+
* }
180+
* }</pre>
181+
*
182+
* @param settings Settings used to generate.
183+
* @param model Model to generate from.
184+
* @param symbolProvider Symbol provider used for codegen.
185+
* @param writer TypeScript writer that works with the file.
186+
* @see #writeAdditionalFiles(TypeScriptSettings, Model, SymbolProvider, BiConsumer)
187+
*/
188+
default void writeAdditionalExports(
189+
TypeScriptSettings settings,
190+
Model model,
191+
SymbolProvider symbolProvider,
192+
TypeScriptWriter writer
193+
) {
194+
// pass
195+
}
196+
163197
/**
164198
* Gets a list of plugins to apply to the generated client.
165199
*

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)