Add links for external dep exports to docJson
This commit is contained in:
@@ -30,6 +30,16 @@ const EXTERNAL_TYPE_TO_LINK: { [externalType: string]: string } = {
|
|||||||
Schema: 'https://github.com/tdegrunt/jsonschema/blob/5c2edd4baba149964aec0f23c87ad12c25a50dfb/lib/index.d.ts#L49',
|
Schema: 'https://github.com/tdegrunt/jsonschema/blob/5c2edd4baba149964aec0f23c87ad12c25a50dfb/lib/index.d.ts#L49',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a 0x package re-exports an external package, we should add a link to it's exported items here
|
||||||
|
*/
|
||||||
|
const EXTERNAL_EXPORT_TO_LINK: { [externalExport: string]: string } = {
|
||||||
|
Web3ProviderEngine: 'https://www.npmjs.com/package/web3-provider-engine',
|
||||||
|
BigNumber: 'https://www.npmjs.com/package/bignumber.js',
|
||||||
|
Schema: 'https://github.com/tdegrunt/jsonschema/blob/v1.2.4/lib/index.d.ts#L49',
|
||||||
|
ValidatorResult: 'https://github.com/tdegrunt/jsonschema/blob/v1.2.4/lib/helpers.js#L31',
|
||||||
|
};
|
||||||
|
|
||||||
const CLASSES_WITH_HIDDEN_CONSTRUCTORS: string[] = [
|
const CLASSES_WITH_HIDDEN_CONSTRUCTORS: string[] = [
|
||||||
'ERC20ProxyWrapper',
|
'ERC20ProxyWrapper',
|
||||||
'ERC20TokenWrapper',
|
'ERC20TokenWrapper',
|
||||||
@@ -67,10 +77,9 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
|||||||
}
|
}
|
||||||
|
|
||||||
const pkgNameToPath: { [name: string]: string } = {};
|
const pkgNameToPath: { [name: string]: string } = {};
|
||||||
_.each(monorepoPackages, pkg => {
|
_.each(monorepoPackages, p => (pkgNameToPath[p.packageJson.name] = p.location));
|
||||||
pkgNameToPath[pkg.packageJson.name] = pkg.location;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
const externalExports: string[] = [];
|
||||||
// For each dep that is another one of our monorepo packages, we fetch it's index.ts
|
// For each dep that is another one of our monorepo packages, we fetch it's index.ts
|
||||||
// and see which specific files we must pass to TypeDoc.
|
// and see which specific files we must pass to TypeDoc.
|
||||||
let typeDocExtraFileIncludes: string[] = [];
|
let typeDocExtraFileIncludes: string[] = [];
|
||||||
@@ -84,6 +93,9 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
|||||||
|
|
||||||
const pathIfExists = pkgNameToPath[exportPath];
|
const pathIfExists = pkgNameToPath[exportPath];
|
||||||
if (_.isUndefined(pathIfExists)) {
|
if (_.isUndefined(pathIfExists)) {
|
||||||
|
_.each(exportedItems, exportedItem => {
|
||||||
|
externalExports.push(exportedItem);
|
||||||
|
});
|
||||||
return; // It's an external package
|
return; // It's an external package
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,6 +221,24 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const externalExportsToLink: { [externalExport: string]: string } = {};
|
||||||
|
const externalExportsWithoutLinks: string[] = [];
|
||||||
|
_.each(externalExports, externalExport => {
|
||||||
|
const linkIfExists = EXTERNAL_EXPORT_TO_LINK[externalExport];
|
||||||
|
if (_.isUndefined(linkIfExists)) {
|
||||||
|
externalExportsWithoutLinks.push(externalExport);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
externalExportsToLink[externalExport] = linkIfExists;
|
||||||
|
});
|
||||||
|
if (!_.isEmpty(externalExportsWithoutLinks)) {
|
||||||
|
throw new Error(
|
||||||
|
`Found the following external exports in ${packageName}'s index.ts:\n ${externalExportsWithoutLinks.join(
|
||||||
|
'\n',
|
||||||
|
)}\nThey are missing from the EXTERNAL_EXPORT_TO_LINK mapping. Add them and try again.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// 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 = {
|
||||||
version: DOC_JSON_VERSION,
|
version: DOC_JSON_VERSION,
|
||||||
@@ -216,6 +246,7 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
|||||||
exportPathToTypedocNames,
|
exportPathToTypedocNames,
|
||||||
exportPathOrder,
|
exportPathOrder,
|
||||||
externalTypeToLink: EXTERNAL_TYPE_TO_LINK,
|
externalTypeToLink: EXTERNAL_TYPE_TO_LINK,
|
||||||
|
externalExportsToLink,
|
||||||
},
|
},
|
||||||
typedocJson: finalTypeDocOutput,
|
typedocJson: finalTypeDocOutput,
|
||||||
};
|
};
|
||||||
@@ -367,9 +398,15 @@ function _getExportPathToExportedItems(sf: ts.SourceFile, omitExports?: string[]
|
|||||||
|
|
||||||
case ts.SyntaxKind.ExportKeyword: {
|
case ts.SyntaxKind.ExportKeyword: {
|
||||||
const foundNode: any = node;
|
const foundNode: any = node;
|
||||||
const exportPath = './index';
|
let exportPath = './index';
|
||||||
if (foundNode.parent && foundNode.parent.name) {
|
if (foundNode.parent && foundNode.parent.name) {
|
||||||
const exportItem = foundNode.parent.name.escapedText;
|
const exportItem = foundNode.parent.name.escapedText;
|
||||||
|
const isExportImportRequireStatement = !_.isUndefined(
|
||||||
|
_.get(foundNode, 'parent.moduleReference.expression.text'),
|
||||||
|
);
|
||||||
|
if (isExportImportRequireStatement) {
|
||||||
|
exportPath = foundNode.parent.moduleReference.expression.text;
|
||||||
|
}
|
||||||
if (!_.includes(exportsToOmit, exportItem)) {
|
if (!_.includes(exportsToOmit, exportItem)) {
|
||||||
exportPathToExportedItems[exportPath] = _.isUndefined(exportPathToExportedItems[exportPath])
|
exportPathToExportedItems[exportPath] = _.isUndefined(exportPathToExportedItems[exportPath])
|
||||||
? [exportItem]
|
? [exportItem]
|
||||||
|
Reference in New Issue
Block a user