* docs(nxdev): consume nx cloud documentation & dedicated menu * docs(nxdev): nx-cloud docs visually indicated nx-cloud docs in nx.dev * docs(nxdev): formatting visually indicated nx-cloud docs in nx.dev * docs(nxdev): fix config * docs(nxdev): fix header link * docs(nxdev): consolidate dte set up guides Co-authored-by: ben <3447705+bcabanes@users.noreply.github.com>
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import { DocumentMetadata } from '@nrwl/nx-dev/models-document';
|
|
import { Menu, MenuItem, MenuSection } from '@nrwl/nx-dev/models-menu';
|
|
import {
|
|
createMenuItems,
|
|
getBasicSection,
|
|
getDeepDiveSection,
|
|
getPackageApiSection,
|
|
} from './menu.utils';
|
|
|
|
export class MenuApi {
|
|
private menuCache: Menu | null = null;
|
|
|
|
constructor(
|
|
private readonly documents: DocumentMetadata,
|
|
private readonly packageDocuments: DocumentMetadata[] = [],
|
|
private readonly extractorFunctions: ((x: MenuItem[]) => MenuSection)[] = []
|
|
) {}
|
|
|
|
getMenu(): Menu {
|
|
let menu = this.menuCache;
|
|
|
|
if (menu) return menu;
|
|
|
|
const items = createMenuItems(this.documents);
|
|
if (!items) throw new Error(`Cannot find any documents`);
|
|
|
|
menu = {
|
|
sections: this.extractorFunctions.map((categorizer) =>
|
|
categorizer(
|
|
items.length === 1 && items[0].id === 'nx-cloud'
|
|
? (items[0].itemList as MenuItem[])
|
|
: items
|
|
)
|
|
),
|
|
};
|
|
|
|
if (!!this.packageDocuments.length)
|
|
menu.sections.push(
|
|
this.getReferenceApiMenuSection(this.packageDocuments)
|
|
);
|
|
|
|
this.menuCache = menu;
|
|
|
|
return menu;
|
|
}
|
|
|
|
getReferenceApiMenuSection(
|
|
packageDocuments: DocumentMetadata[]
|
|
): MenuSection {
|
|
const documents: DocumentMetadata = {
|
|
id: 'packages',
|
|
name: 'Packages',
|
|
itemList: packageDocuments,
|
|
};
|
|
|
|
const items = createMenuItems(documents);
|
|
return getPackageApiSection(items);
|
|
}
|
|
}
|