Add a check to make sure types part of the exported interface are also exported from the packages index.ts
This commit is contained in:
parent
3d1c8dfe06
commit
67666446bf
@ -19,6 +19,12 @@ interface ExportNameToTypedocNames {
|
|||||||
[exportName: string]: string[];
|
[exportName: string]: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Add the EXTERNAL_TYPE_TO_LINK mapping to the Doc JSON
|
||||||
|
const EXTERNAL_TYPE_TO_LINK: { [externalType: string]: string } = {
|
||||||
|
BigNumber: 'http://mikemcl.github.io/bignumber.js',
|
||||||
|
Error: 'https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/v9/index.d.ts#L134',
|
||||||
|
};
|
||||||
|
|
||||||
export async function generateAndUploadDocsAsync(packageName: string, isStaging: boolean): Promise<void> {
|
export async function generateAndUploadDocsAsync(packageName: string, isStaging: boolean): Promise<void> {
|
||||||
const monorepoPackages = utils.getPackages(constants.monorepoRootPath);
|
const monorepoPackages = utils.getPackages(constants.monorepoRootPath);
|
||||||
const pkg = _.find(monorepoPackages, monorepoPackage => {
|
const pkg = _.find(monorepoPackages, monorepoPackage => {
|
||||||
@ -141,9 +147,24 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
|||||||
finalTypeDocOutput.children[i].children = _.compact(finalTypeDocOutput.children[i].children);
|
finalTypeDocOutput.children[i].children = _.compact(finalTypeDocOutput.children[i].children);
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: Add extra metadata for Class properties that are class instances
|
const allExportedItems = _.flatten(_.values(exportPathToExportedItems));
|
||||||
// Look in file for imports of that class, get the import name and construct a link to
|
const propertyName = ''; // Root has no property name
|
||||||
// it's definition on another docs page.
|
const referenceNamesWithDuplicates = getAllReferenceNames(propertyName, finalTypeDocOutput, []);
|
||||||
|
const referenceNames = _.uniq(referenceNamesWithDuplicates);
|
||||||
|
|
||||||
|
const missingReferences: string[] = [];
|
||||||
|
_.each(referenceNames, referenceName => {
|
||||||
|
if (!_.includes(allExportedItems, referenceName) && _.isUndefined(EXTERNAL_TYPE_TO_LINK[referenceName])) {
|
||||||
|
missingReferences.push(referenceName);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!_.isEmpty(missingReferences)) {
|
||||||
|
throw new Error(
|
||||||
|
`${packageName} package needs to export ${missingReferences.join(
|
||||||
|
', ',
|
||||||
|
)} from it's index.ts. If any are from external dependencies, then add them to the EXTERNAL_TYPE_TO_LINK mapping.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Since we need additional metadata included in the doc JSON, we nest the TypeDoc JSON
|
// Since we need additional metadata included in the doc JSON, we nest the TypeDoc JSON
|
||||||
const docJson = {
|
const docJson = {
|
||||||
@ -171,7 +192,34 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
|||||||
// Remove the generated docs directory
|
// Remove the generated docs directory
|
||||||
await execAsync(`rm -rf ${jsonFilePath}`, {
|
await execAsync(`rm -rf ${jsonFilePath}`, {
|
||||||
cwd,
|
cwd,
|
||||||
|
|
||||||
|
function getAllReferenceNames(propertyName: string, node: any, referenceNames: string[]): string[] {
|
||||||
|
let updatedReferenceNames = referenceNames;
|
||||||
|
if (!_.isObject(node)) {
|
||||||
|
return updatedReferenceNames;
|
||||||
|
}
|
||||||
|
// Some nodes of type reference are for subtypes, which we don't want to return.
|
||||||
|
// We therefore filter them out.
|
||||||
|
const SUB_TYPE_PROPERTY_NAMES = ['inheritedFrom', 'overwrites'];
|
||||||
|
if (
|
||||||
|
!_.isUndefined(node.type) &&
|
||||||
|
_.isString(node.type) &&
|
||||||
|
node.type === 'reference' &&
|
||||||
|
_.isUndefined(node.typeArguments) &&
|
||||||
|
!_.includes(SUB_TYPE_PROPERTY_NAMES, propertyName)
|
||||||
|
) {
|
||||||
|
return [...referenceNames, node.name];
|
||||||
|
}
|
||||||
|
_.each(node, (nodeValue, innerPropertyName) => {
|
||||||
|
if (_.isArray(nodeValue)) {
|
||||||
|
_.each(nodeValue, aNode => {
|
||||||
|
updatedReferenceNames = getAllReferenceNames(innerPropertyName, aNode, updatedReferenceNames);
|
||||||
|
});
|
||||||
|
} else if (_.isObject(nodeValue)) {
|
||||||
|
updatedReferenceNames = getAllReferenceNames(innerPropertyName, nodeValue, updatedReferenceNames);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
return updatedReferenceNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
function findExportPathGivenTypedocName(
|
function findExportPathGivenTypedocName(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user