Skip to content

Commit 8cdebec

Browse files
authored
chore: Migrate to the new documenter API (#22)
1 parent 2a46e09 commit 8cdebec

File tree

3 files changed

+10
-44
lines changed

3 files changed

+10
-44
lines changed

scripts/docs.js

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,21 @@
22
// SPDX-License-Identifier: Apache-2.0
33
import path from "node:path";
44

5-
import { documentComponents, documentTestUtils } from "@cloudscape-design/documenter";
5+
import { documentTestUtils, writeComponentsDocumentation } from "@cloudscape-design/documenter";
66

7-
import { dashCase, listPublicDirs, writeSourceFile } from "./utils.js";
7+
import { writeSourceFile } from "./utils.js";
88

9-
const publicDirs = listPublicDirs("src");
109
const targetDir = "lib/components/internal/api-docs";
1110

1211
componentDocs();
1312
testUtilDocs();
1413

15-
function validatePublicFiles(definitionFiles) {
16-
for (const publicDir of publicDirs) {
17-
if (!definitionFiles.includes(publicDir)) {
18-
throw new Error(`Directory src/${publicDir} does not have a corresponding API definition`);
19-
}
20-
}
21-
}
22-
2314
function componentDocs() {
24-
const definitions = documentComponents({
15+
writeComponentsDocumentation({
16+
outDir: path.join(targetDir, "components"),
2517
tsconfigPath: path.resolve("tsconfig.json"),
2618
publicFilesGlob: "src/*/index.tsx",
2719
});
28-
const outDir = path.join(targetDir, "components");
29-
const fileNames = definitions
30-
.filter((definition) => {
31-
const fileName = dashCase(definition.name);
32-
if (!publicDirs.includes(fileName)) {
33-
console.warn(`Excluded "${fileName}" from components definitions.`);
34-
return false;
35-
}
36-
return true;
37-
})
38-
.map((definition) => {
39-
const fileName = dashCase(definition.name);
40-
writeSourceFile(path.join(outDir, fileName + ".js"), `module.exports = ${JSON.stringify(definition, null, 2)};`);
41-
return fileName;
42-
});
43-
validatePublicFiles(fileNames);
44-
const indexContent = `module.exports = {
45-
${fileNames.map((name) => `${JSON.stringify(name)}:require('./${name}')`).join(",\n")}
46-
}`;
47-
writeSourceFile(path.join(outDir, "index.js"), indexContent);
4820
}
4921

5022
function testUtilDocs() {

src/__tests__/documenter.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
// SPDX-License-Identifier: Apache-2.0
33
import { expect, test } from "vitest";
44

5-
import { getAllComponents, requireComponentDefinition } from "./utils";
6-
5+
import componentDefinitions from "../../lib/components/internal/api-docs/components";
6+
import { getAllComponents } from "./utils";
77
test.each<string>(getAllComponents())(`definition for %s matches the snapshot`, (componentName: string) => {
8-
const definition = requireComponentDefinition(componentName);
8+
const definition = componentDefinitions[componentName];
99

1010
// overriding with a fake value so that when there are icon changes in components this test doesn't block it
11-
const iconNameDefinition = definition.properties.filter(({ name }: { name: string }) => name === "iconName");
12-
if (iconNameDefinition && iconNameDefinition[0]) {
13-
iconNameDefinition[0].inlineType.values = "comes from @cloudscape-design/components";
11+
const iconNameDefinition = definition.properties.find(({ name }: { name: string }) => name === "iconName");
12+
if (iconNameDefinition && iconNameDefinition.inlineType?.type === "union") {
13+
iconNameDefinition.inlineType.values = ["comes from @cloudscape-design/components"];
1414
}
1515
expect(definition).toMatchSnapshot(componentName);
1616
});

src/__tests__/utils.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import * as fs from "node:fs";
66
import * as path from "node:path";
77

88
const componentsDir = path.resolve(__dirname, "../../lib/components");
9-
const definitionsDir = path.resolve(__dirname, "../../lib/components/internal/api-docs/components");
109

1110
export function getAllComponents(): string[] {
1211
return fs
@@ -21,11 +20,6 @@ export function getAllComponents(): string[] {
2120
);
2221
}
2322

24-
export function requireComponentDefinition(componentName: string) {
25-
// eslint-disable-next-line @typescript-eslint/no-require-imports
26-
return require(path.join(definitionsDir, componentName));
27-
}
28-
2923
export async function requireComponent(componentName: string) {
3024
// eslint-disable-next-line no-unsanitized/method
3125
const { default: Component } = await import(path.join(componentsDir, componentName));

0 commit comments

Comments
 (0)