Skip to content

Commit 6482e9f

Browse files
committed
feat: update service client documentation generator
1 parent a7006c6 commit 6482e9f

File tree

7 files changed

+162
-211
lines changed

7 files changed

+162
-211
lines changed

packages/service-client-documentation-generator/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
3131
"concurrently": "7.0.0",
3232
"downlevel-dts": "0.10.1",
3333
"rimraf": "3.0.2",
34-
"typedoc": "0.19.2",
35-
"typescript": "~4.6.2"
34+
"typescript": "4.7.3"
35+
},
36+
"typedoc": {
37+
"entryPoint": "src/index.ts"
3638
},
3739
"typesVersions": {
3840
"<4.0": {
Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
1-
import { PluginHost } from "typedoc/dist/lib/utils";
1+
import { Application, ParameterType } from "typedoc";
22

3-
import { SdkClientCommentUpdatePlugin } from "./sdk-client-comment-update";
4-
import { SdkClientRemoveNavigatorPlugin } from "./sdk-client-remove-navigator";
53
import { SdkClientRenameProjectPlugin } from "./sdk-client-rename-project";
64
import { SdkClientTocPlugin } from "./sdk-client-toc-plugin";
75

8-
module.exports = function load(pluginHost: PluginHost) {
9-
const application = pluginHost.owner;
6+
export function load(app: Application) {
7+
app.options.addDeclaration({
8+
name: "defaultServiceSuffix",
9+
help: "Default suffix to be used when renaming service project.",
10+
defaultValue: "AWS SDK for JavaScript v3",
11+
type: ParameterType.String,
12+
});
13+
app.options.addDeclaration({
14+
name: "defaultGroup",
15+
help: "Default group to place categories as children",
16+
defaultValue: "SDK",
17+
type: ParameterType.String,
18+
});
1019

11-
application.converter.addComponent(
12-
"SdkClientCommentUpdatePlugin",
13-
new SdkClientCommentUpdatePlugin(application.converter)
14-
);
20+
new SdkClientRenameProjectPlugin(app.options, app.logger, app.renderer);
1521

16-
application.renderer.addComponent("SdkClientTocPlugin", new SdkClientTocPlugin(application.renderer));
17-
application.renderer.addComponent(
18-
"SdkClientRenameProjectPlugin",
19-
new SdkClientRenameProjectPlugin(application.renderer)
20-
);
21-
application.renderer.addComponent(
22-
"SdkClientRemoveNavigatorPlugin",
23-
new SdkClientRemoveNavigatorPlugin(application.renderer)
24-
);
25-
};
22+
new SdkClientTocPlugin(app.options, app.logger, app.renderer);
23+
}

packages/service-client-documentation-generator/src/sdk-client-comment-update.ts

Lines changed: 0 additions & 38 deletions
This file was deleted.

packages/service-client-documentation-generator/src/sdk-client-remove-navigator.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,51 @@
11
import { readFileSync } from "fs";
2-
import { Component, RendererComponent } from "typedoc/dist/lib/output/components";
3-
import { RendererEvent } from "typedoc/dist/lib/output/events";
2+
import path from "path";
3+
import { BindOption, Context, Converter, Logger, Options, Reflection, Renderer, RendererEvent } from "typedoc";
44

5-
import { getCurrentClientDirectory } from "./utils";
5+
import { isClientModel } from "./utils";
66

77
/**
88
* Correct the package name in the navigator.
99
*/
10-
@Component({ name: "SdkClientRenameProject" })
11-
export class SdkClientRenameProjectPlugin extends RendererComponent {
10+
export class SdkClientRenameProjectPlugin {
1211
private projectName: string | undefined = undefined;
13-
initialize() {
14-
this.listenTo(this.owner, {
15-
[RendererEvent.BEGIN]: this.onRenderedBegin,
16-
});
12+
13+
@BindOption("defaultServiceSuffix")
14+
readonly defaultServiceSuffix: string;
15+
16+
constructor(public readonly options: Options, public readonly logger: Logger, private readonly renderer: Renderer) {
17+
this.renderer.application.converter.on(Converter.EVENT_CREATE_DECLARATION, this.onCreateDeclaration);
18+
this.renderer.on(Renderer.EVENT_BEGIN, this.onRendererBegin);
1719
}
1820

19-
onRenderedBegin(event: RendererEvent) {
21+
/**
22+
* Triggered when the converter creates the declaration of a project.
23+
*
24+
* @param context The context object describing the current state the converter is in.
25+
*/
26+
private onCreateDeclaration = (_context: Context, reflection: Reflection) => {
27+
const defaultCommentTag = reflection.comment?.getTag("@default") || reflection.comment?.getTag("@defaultValue");
28+
if (isClientModel(reflection) && reflection.name === "serviceId" && defaultCommentTag) {
29+
const defaultValue = defaultCommentTag.content[0]?.text?.replace(/"/g, "");
30+
if (defaultValue && !this.projectName) {
31+
this.projectName = `${defaultValue} Client - ${this.defaultServiceSuffix}`;
32+
}
33+
}
34+
};
35+
36+
/**
37+
* Triggered when the renderer is starting.
38+
*
39+
* @param event The project the renderer is currently processing.
40+
*/
41+
private onRendererBegin = (event: RendererEvent) => {
2042
if (!this.projectName) {
21-
const clientDirectory = getCurrentClientDirectory(event);
22-
const metadataDir = clientDirectory.files.filter((sourceFile) =>
23-
sourceFile.fileName.endsWith("/package.json")
24-
)?.[0]?.fullFileName;
25-
const { name } = metadataDir || JSON.parse(readFileSync(metadataDir).toString());
26-
const serviceIdReflection = clientDirectory.directories.src.files
27-
?.filter((sourceFile) => sourceFile.fileName.endsWith("/runtimeConfig.shared.ts"))?.[0]
28-
.reflections.filter((reflection) => reflection.name === "serviceId")?.[0];
29-
this.projectName = serviceIdReflection /* serviceIdReflection.defaultValue looks like '"S3"' */
30-
? `${(serviceIdReflection as any).defaultValue.match(/"(.*)"/)[1]} Client - AWS SDK for JavaScript v3`
31-
: name;
43+
const children = Object.values(event.project.reflections).filter(isClientModel);
44+
const clientDirectory = path.dirname(path.dirname(children[0].sources[0].fullFileName));
45+
const metadataPath = path.join(clientDirectory, "package.json");
46+
const { name } = JSON.parse(readFileSync(metadataPath).toString());
47+
this.projectName = name;
3248
}
3349
event.project.name = this.projectName;
34-
}
50+
};
3551
}

0 commit comments

Comments
 (0)