Skip to content

Commit b2f33c5

Browse files
committed
feat(dgeni): consolidate docs nav list generation (#2989)
1 parent 3b6103c commit b2f33c5

22 files changed

+144
-157
lines changed

tools/dgeni/src/processors/generateApiList.ts

-66
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {
2+
Processor,
3+
Document,
4+
} from 'dgeni';
5+
6+
export class GenerateNavListProcessor implements Processor {
7+
name = 'generateNavList';
8+
$runAfter = ['docs-processed'];
9+
$runBefore = ['rendering-docs'];
10+
$validate = {
11+
transform: {
12+
presence: true,
13+
},
14+
outputFolder: {
15+
presence: true,
16+
},
17+
};
18+
outputFolder: string;
19+
transform: (docs: Array<Document>) => Document;
20+
21+
$process(docs: Array<Document>): Array<Document> {
22+
docs.push({
23+
docType: 'navigation-list',
24+
template: 'navigation-list.template.json',
25+
path: this.outputFolder + '/index.json',
26+
outputPath: this.outputFolder + '/index.json',
27+
data: this.transform(docs),
28+
});
29+
30+
return docs;
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { Document } from 'dgeni';
2+
3+
import { GenerateNavListProcessor } from '../../../processors/generateNavList';
4+
5+
interface DaffDocsApiNavigationList {
6+
id: string;
7+
title: string;
8+
path: string;
9+
docType: string;
10+
docTypeShorthand: string;
11+
children: Array<DaffDocsApiNavigationList>;
12+
}
13+
14+
export const transformApiNavList: GenerateNavListProcessor['transform'] = (docs: Array<Document>): DaffDocsApiNavigationList => ({
15+
id: '',
16+
title: '',
17+
path: '',
18+
docType: '',
19+
docTypeShorthand: '',
20+
children: docs
21+
.filter(doc => doc.docType === 'package')
22+
// sort alphabetically
23+
.sort((a, b) => {
24+
if (a.name < b.name) {
25+
return -1;
26+
}
27+
if (a.name > b.name) {
28+
return 1;
29+
}
30+
return 0;
31+
})
32+
.map(doc => getPackageInfo(doc)),
33+
});
34+
35+
function getPackageInfo(packageDoc): DaffDocsApiNavigationList {
36+
return {
37+
...getExportInfo(packageDoc),
38+
title: packageDoc.name,
39+
docType: 'package',
40+
docTypeShorthand: 'pk',
41+
children: packageDoc.exports
42+
.filter(doc => doc.docType !== 'package')
43+
.map(getExportInfo),
44+
};
45+
}
46+
47+
function getExportInfo(exportDoc): DaffDocsApiNavigationList {
48+
return {
49+
id: exportDoc.id,
50+
title: exportDoc.name,
51+
path: `/${exportDoc.path}`,
52+
docType: getDocType(exportDoc),
53+
docTypeShorthand: exportDoc.docType.charAt(0),
54+
children: [],
55+
};
56+
}
57+
58+
function getDocType(doc): DaffDocsApiNavigationList['docType'] {
59+
// We map `let` and `var` types to `const`
60+
if (['let', 'var'].indexOf(doc.docType) !== -1) {
61+
return 'const';
62+
}
63+
return doc.docType;
64+
}

tools/dgeni/src/transforms/daffodil-api-package/index.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import { Package } from 'dgeni';
22

33
import {
4-
DAFF_DOC_KIND_PATH_SEGMENT_MAP,
54
DAFF_DOCS_DESIGN_PATH,
65
DAFF_DOCS_PATH,
76
DaffDocKind,
87
} from '@daffodil/docs-utils';
98

10-
import { outputPathsConfigurator } from './configurator/output';
9+
import { transformApiNavList } from './helpers/generateApiList';
1110
import { RemoveDuplicatesProcessor } from './processors/remove-duplicates';
1211
import { DAFF_DGENI_EXCLUDED_PACKAGES_REGEX } from '../../constants/excluded-packages';
1312
import { AddInheritedDocsContentProcessor } from '../../processors/addInheritedDocsContent';
@@ -20,10 +19,11 @@ import {
2019
import { CrossEnvSafeNameProcessor } from '../../processors/cross-env-safe-name';
2120
import { FilterContainedDocsProcessor } from '../../processors/filterDocs';
2221
import { FilterOutPrivatePropertiesProcessor } from '../../processors/filterOutPrivateProperties';
23-
import { GenerateApiListProcessor } from '../../processors/generateApiList';
22+
import { GenerateNavListProcessor } from '../../processors/generateNavList';
2423
import { MakeTypesHtmlCompatibleProcessor } from '../../processors/makeTypesHtmlCompatible';
2524
import { MarkdownCodeProcessor } from '../../processors/markdown';
2625
import { PackagesProcessor } from '../../processors/packages';
26+
import { outputPathsConfigurator } from '../../utils/configurator/output';
2727
import {
2828
API_SOURCE_PATH,
2929
API_TEMPLATES_PATH,
@@ -90,11 +90,15 @@ export const apiDocsBase = new Package('api-base', [
9090
.config((templateFinder) => {
9191
// Where to find the templates for the API doc rendering
9292
templateFinder.templateFolders.unshift(API_TEMPLATES_PATH);
93+
})
94+
.config((generateNavList: GenerateNavListProcessor) => {
95+
generateNavList.transform = transformApiNavList;
9396
});
9497

9598
export const apiDocs = outputPathsConfigurator({
9699
kind: DaffDocKind.API,
97100
outputPath: DAFF_DOCS_PATH,
101+
docTypes: ['package'],
98102
})(new Package(API_PACKAGE_NAME, [apiDocsBase]))
99103
.config((readTypeScriptModules) => {
100104
// Specify collections of source files that should contain the documentation to extract
@@ -106,6 +110,7 @@ export const apiDocs = outputPathsConfigurator({
106110
export const designApiPackage = outputPathsConfigurator({
107111
kind: DaffDocKind.API,
108112
outputPath: `${DAFF_DOCS_PATH}/${DAFF_DOCS_DESIGN_PATH}`,
113+
docTypes: ['package'],
109114
})(new Package('design-api-docs', [apiDocs]))
110115
.processor(new RemoveDuplicatesProcessor())
111116
.config((readTypeScriptModules) => {

tools/dgeni/src/transforms/daffodil-api-package/processors/remove-duplicates.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
export class RemoveDuplicatesProcessor implements Processor {
1010
name = 'removeDuplicates';
1111
$runAfter = ['readTypeScriptModules'];
12-
$runBefore = ['generateApiList', 'parsing-tags'];
12+
$runBefore = ['generateNavList', 'parsing-tags'];
1313

1414
$process(docs: Array<Document>): Array<Document> {
1515
const set = new Set();

tools/dgeni/src/transforms/daffodil-guides-package/helpers/configurator/output.ts

-30
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { Document } from 'dgeni';
2+
3+
export const transformGuideDoc = (doc: Document): TransformedDocument => ({
4+
id: doc.id,
5+
title: doc.title,
6+
path: doc.path,
7+
tableOfContents: doc.tableOfContents,
8+
});
9+
10+
export interface TransformedDocument {
11+
id: string;
12+
title: string;
13+
path: string;
14+
tableOfContents: string;
15+
}
16+

tools/dgeni/src/transforms/daffodil-guides-package/index.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ import {
66
DaffDocKind,
77
} from '@daffodil/docs-utils';
88

9-
import { outputPathsConfigurator } from './helpers/configurator/output';
10-
import { pathsConfigurator } from './helpers/configurator/path';
9+
import { transformGuideDoc } from './helpers/generateGuideList';
1110
import { guideFileReaderFactory } from './reader/guide-file.reader';
1211
import { DAFF_DGENI_EXCLUDED_PACKAGES_REGEX } from '../../constants/excluded-packages';
12+
import { GenerateNavListProcessor } from '../../processors/generateNavList';
1313
import { MarkdownCodeProcessor } from '../../processors/markdown';
14+
import { outputPathsConfigurator } from '../../utils/configurator/output';
15+
import { pathsConfigurator } from '../../utils/configurator/path';
16+
import { generateNavigationTrieFromDocuments } from '../../utils/navigation-trie';
1417
import {
1518
API_SOURCE_PATH,
1619
DESIGN_PATH,
@@ -47,12 +50,16 @@ const base = new Package('daffodil-guides-base', [daffodilBasePackage])
4750
.replace(/\.\w*$/, ''),
4851
getAliases: (doc) => [doc.id],
4952
});
53+
})
54+
.config((generateNavList: GenerateNavListProcessor) => {
55+
generateNavList.transform = (docs) => generateNavigationTrieFromDocuments(docs.map(transformGuideDoc));
5056
});
5157

5258
// global
5359
export const packageDocsPackage = outputPathsConfigurator({
5460
kind: DaffDocKind.PACKAGE,
5561
outputPath: DAFF_DOCS_PATH,
62+
docTypes: ['guide'],
5663
})(new Package('daffodil-package-docs', [base]))
5764
.config((readFilesProcessor) => {
5865
readFilesProcessor.basePath = API_SOURCE_PATH;
@@ -65,19 +72,22 @@ export const guideDocsPackage = pathsConfigurator({
6572
kind: DaffDocKind.GUIDE,
6673
outputPath: DAFF_DOCS_PATH,
6774
inputPathBase: DOCS_SOURCE_PATH,
75+
docTypes: ['guide'],
6876
})(new Package('daffodil-guide', [base]));
6977

7078
export const explanationDocsPackage = pathsConfigurator({
7179
kind: DaffDocKind.EXPLANATION,
7280
outputPath: DAFF_DOCS_PATH,
7381
inputPathBase: DOCS_SOURCE_PATH,
82+
docTypes: ['guide'],
7483
})(new Package('daffodil-explanation', [base]));
7584
//
7685

7786
// design
7887
export const designDocsPackage = outputPathsConfigurator({
7988
kind: DaffDocKind.PACKAGE,
8089
outputPath: `${DAFF_DOCS_PATH}/${DAFF_DOCS_DESIGN_PATH}`,
90+
docTypes: ['guide'],
8191
})(new Package('design-packages', [base]))
8292
.config((readFilesProcessor) => {
8393
readFilesProcessor.basePath = DESIGN_PATH;
@@ -90,11 +100,13 @@ export const designGuidesPackage = pathsConfigurator({
90100
kind: DaffDocKind.GUIDE,
91101
outputPath: `${DAFF_DOCS_PATH}/${DAFF_DOCS_DESIGN_PATH}`,
92102
inputPathBase: DESIGN_PATH,
103+
docTypes: ['guide'],
93104
})(new Package('design-guides', [base]));
94105

95106
export const designExplanationsPackage = pathsConfigurator({
96107
kind: DaffDocKind.EXPLANATION,
97108
outputPath: `${DAFF_DOCS_PATH}/${DAFF_DOCS_DESIGN_PATH}`,
98109
inputPathBase: DESIGN_PATH,
110+
docTypes: ['guide'],
99111
})(new Package('design-explanations', [base]));
100112
//

tools/dgeni/src/transforms/daffodil-guides-package/processors/generateGuideList.ts

-46
This file was deleted.

tools/dgeni/src/transforms/daffodil-guides-package/helpers/configurator/input.ts tools/dgeni/src/utils/configurator/input.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Package } from 'dgeni';
2-
import { Configurator } from 'tools/dgeni/src/utils/configurator.type';
2+
import { Configurator } from 'tools/dgeni/src/utils/configurator/type';
33

44
import {
55
DaffDocKind,

0 commit comments

Comments
 (0)