Start refactoring docs to remove unnecessary configs given more concise TypeDoc JSON
This commit is contained in:
@@ -13,6 +13,20 @@ import * as ts from 'typescript';
|
||||
|
||||
import { ExportPathToExportedItems } from '../types';
|
||||
|
||||
interface ExportInfo {
|
||||
exportPathToExportedItems: ExportPathToExportedItems;
|
||||
exportPathOrder: string[];
|
||||
}
|
||||
|
||||
interface ExportNameToTypedocName {
|
||||
[exportName: string]: string;
|
||||
}
|
||||
|
||||
interface Metadata {
|
||||
exportPathToTypedocName: ExportNameToTypedocName;
|
||||
exportPathOrder: string[];
|
||||
}
|
||||
|
||||
const publishReleaseAsync = promisify(publishRelease);
|
||||
export async function publishReleaseNotesAsync(updatedPublishPackages: Package[]): Promise<void> {
|
||||
// Git push a tag representing this publish (publish-{commit-hash}) (truncate hash)
|
||||
@@ -107,7 +121,7 @@ function getReleaseNotesForPackage(packageName: string, version: string): string
|
||||
export async function generateAndUploadDocsAsync(packageName: string, isStaging: boolean): Promise<void> {
|
||||
const pathToPackage = `${constants.monorepoRootPath}/packages/${packageName}`;
|
||||
const indexPath = `${pathToPackage}/src/index.ts`;
|
||||
const exportPathToExportedItems = getExportPathToExportedItems(indexPath);
|
||||
const { exportPathToExportedItems, exportPathOrder } = getExportPathToExportedItems(indexPath);
|
||||
|
||||
const monorepoPackages = utils.getPackages(constants.monorepoRootPath);
|
||||
const pkg = _.find(monorepoPackages, monorepoPackage => {
|
||||
@@ -151,7 +165,8 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
||||
|
||||
const typeDocSourceIncludes = new Set();
|
||||
const pathToIndex = `${pathIfExists}/src/index.ts`;
|
||||
const innerExportPathToExportedItems = getExportPathToExportedItems(pathToIndex);
|
||||
const exportInfo = getExportPathToExportedItems(pathToIndex);
|
||||
const innerExportPathToExportedItems = exportInfo.exportPathToExportedItems;
|
||||
_.each(exportedItems, exportName => {
|
||||
_.each(innerExportPathToExportedItems, (innerExportItems, innerExportPath) => {
|
||||
if (!_.includes(innerExportItems, exportName)) {
|
||||
@@ -200,13 +215,18 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
||||
_.each(typedocOutput.children, (child, i) => {
|
||||
if (!_.includes(child.name, '/src/')) {
|
||||
const nameWithoutQuotes = child.name.replace(/"/g, '');
|
||||
finalTypeDocOutput.children[i].name = `"${packageName}/src/${nameWithoutQuotes}"`;
|
||||
const standardizedName = `"${packageName}/src/${nameWithoutQuotes}"`;
|
||||
finalTypeDocOutput.children[i].name = standardizedName;
|
||||
}
|
||||
});
|
||||
|
||||
// For each entry, see if it was exported in index.ts. If not, remove it.
|
||||
const exportPathToTypedocName: ExportNameToTypedocName = {};
|
||||
_.each(typedocOutput.children, (file, i) => {
|
||||
const exportItems = findExportItemsGivenTypedocName(exportPathToExportedItems, packageName, file.name);
|
||||
const exportPath = findExportPathGivenTypedocName(exportPathToExportedItems, packageName, file.name);
|
||||
exportPathToTypedocName[exportPath] = file.name;
|
||||
|
||||
const exportItems = exportPathToExportedItems[exportPath];
|
||||
_.each(file.children, (child, j) => {
|
||||
if (!_.includes(exportItems, child.name)) {
|
||||
delete finalTypeDocOutput.children[i].children[j];
|
||||
@@ -214,8 +234,22 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
||||
});
|
||||
finalTypeDocOutput.children[i].children = _.compact(finalTypeDocOutput.children[i].children);
|
||||
});
|
||||
|
||||
// TODO: Add extra metadata for Class properties that are class instances
|
||||
// Look in file for imports of that class, get the import name and construct a link to
|
||||
// it's definition on another docs page.
|
||||
|
||||
// Since we need additional metadata included in the doc JSON, we nest the TypeDoc JSON
|
||||
const docJson = {
|
||||
metadata: {
|
||||
exportPathToTypedocName,
|
||||
exportPathOrder,
|
||||
},
|
||||
typedocJson: finalTypeDocOutput,
|
||||
};
|
||||
|
||||
// Write modified TypeDoc JSON, without all the unexported stuff
|
||||
writeFileSync(jsonFilePath, JSON.stringify(finalTypeDocOutput, null, 2));
|
||||
writeFileSync(jsonFilePath, JSON.stringify(docJson, null, 2));
|
||||
|
||||
const fileName = `v${packageJson.version}.json`;
|
||||
utils.log(`GENERATE_UPLOAD_DOCS: Doc generation successful, uploading docs... as ${fileName}`);
|
||||
@@ -234,11 +268,11 @@ export async function generateAndUploadDocsAsync(packageName: string, isStaging:
|
||||
});
|
||||
}
|
||||
|
||||
function findExportItemsGivenTypedocName(
|
||||
function findExportPathGivenTypedocName(
|
||||
exportPathToExportedItems: ExportPathToExportedItems,
|
||||
packageName: string,
|
||||
typedocName: string,
|
||||
): string[] {
|
||||
): string {
|
||||
const typeDocNameWithoutQuotes = _.replace(typedocName, '"', '');
|
||||
const sanitizedExportPathToExportPath: { [sanitizedName: string]: string } = {};
|
||||
const exportPaths = _.keys(exportPathToExportedItems);
|
||||
@@ -264,22 +298,23 @@ function findExportItemsGivenTypedocName(
|
||||
throw new Error(`Didn't find an exportPath for ${typeDocNameWithoutQuotes}`);
|
||||
}
|
||||
const matchingExportPath = sanitizedExportPathToExportPath[matchingSanitizedExportPathIfExists];
|
||||
return exportPathToExportedItems[matchingExportPath];
|
||||
return matchingExportPath;
|
||||
}
|
||||
|
||||
function getExportPathToExportedItems(pkgPath: string): ExportPathToExportedItems {
|
||||
function getExportPathToExportedItems(filePath: string): ExportInfo {
|
||||
const sourceFile = ts.createSourceFile(
|
||||
'indexFile',
|
||||
readFileSync(pkgPath).toString(),
|
||||
readFileSync(filePath).toString(),
|
||||
ts.ScriptTarget.ES2017,
|
||||
/*setParentNodes */ true,
|
||||
);
|
||||
const exportPathToExportedItems = _getExportPathToExportedItems(sourceFile);
|
||||
return exportPathToExportedItems;
|
||||
const exportInfo = _getExportPathToExportedItems(sourceFile);
|
||||
return exportInfo;
|
||||
}
|
||||
|
||||
function _getExportPathToExportedItems(sf: ts.SourceFile): ExportPathToExportedItems {
|
||||
function _getExportPathToExportedItems(sf: ts.SourceFile): ExportInfo {
|
||||
const exportPathToExportedItems: ExportPathToExportedItems = {};
|
||||
const exportPathOrder: string[] = [];
|
||||
processNode(sf);
|
||||
|
||||
function processNode(node: ts.Node): void {
|
||||
@@ -287,6 +322,7 @@ function _getExportPathToExportedItems(sf: ts.SourceFile): ExportPathToExportedI
|
||||
case ts.SyntaxKind.ExportDeclaration:
|
||||
const exportClause = (node as any).exportClause;
|
||||
const pkgName = exportClause.parent.moduleSpecifier.text;
|
||||
exportPathOrder.push(pkgName);
|
||||
_.each(exportClause.elements, element => {
|
||||
exportPathToExportedItems[pkgName] = _.isUndefined(exportPathToExportedItems[pkgName])
|
||||
? [element.name.escapedText]
|
||||
@@ -301,5 +337,9 @@ function _getExportPathToExportedItems(sf: ts.SourceFile): ExportPathToExportedI
|
||||
|
||||
ts.forEachChild(node, processNode);
|
||||
}
|
||||
return exportPathToExportedItems;
|
||||
const exportInfo = {
|
||||
exportPathToExportedItems,
|
||||
exportPathOrder,
|
||||
};
|
||||
return exportInfo;
|
||||
}
|
||||
|
||||
@@ -32,33 +32,8 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
web3Wrapper: [docSections.web3Wrapper],
|
||||
types: [docSections.types],
|
||||
},
|
||||
sectionNameToMarkdownByVersion: {
|
||||
'0.0.1': {
|
||||
[docSections.introduction]: IntroMarkdownV1,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.web3Wrapper]: ['"web3-wrapper/src/index"'],
|
||||
[docSections.types]: ['"types/src/index"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
visibleConstructors: [docSections.web3Wrapper],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [
|
||||
'TxData',
|
||||
'TransactionReceipt',
|
||||
'RawLogEntry',
|
||||
'BlockParam',
|
||||
'ContractAbi',
|
||||
'FilterObject',
|
||||
'LogEntry',
|
||||
'BlockWithoutTransactionData',
|
||||
'CallData',
|
||||
'LogEntryEvent',
|
||||
],
|
||||
typeNameToExternalLink: {
|
||||
Web3: 'https://github.com/ethereum/wiki/wiki/JavaScript-API',
|
||||
Provider: 'https://github.com/0xProject/web3-typescript-typings/blob/f5bcb96/index.d.ts#L150',
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import {
|
||||
AnchorTitle,
|
||||
colors,
|
||||
constants as sharedConstants,
|
||||
EtherscanLinkSuffixes,
|
||||
HeaderSizes,
|
||||
MarkdownSection,
|
||||
NestedSidebarMenu,
|
||||
Networks,
|
||||
@@ -32,8 +34,7 @@ import { Badge } from './badge';
|
||||
import { Comment } from './comment';
|
||||
import { EventDefinition } from './event_definition';
|
||||
import { SignatureBlock } from './signature_block';
|
||||
import { SourceLink } from './source_link';
|
||||
import { Type } from './type';
|
||||
import { PropertyBlock } from './property_block';
|
||||
import { TypeDefinition } from './type_definition';
|
||||
|
||||
const networkNameToColor: { [network: string]: string } = {
|
||||
@@ -129,7 +130,7 @@ export class Documentation extends React.Component<DocumentationProps, Documenta
|
||||
selectedVersion={this.props.selectedVersion}
|
||||
versions={this.props.availableVersions}
|
||||
sidebarHeader={this.props.sidebarHeader}
|
||||
topLevelMenu={this.props.docsInfo.getMenu(this.props.selectedVersion)}
|
||||
topLevelMenu={this.props.docsInfo.menu}
|
||||
menuSubsectionsBySection={menuSubsectionsBySection}
|
||||
onVersionSelected={this.props.onVersionSelected}
|
||||
/>
|
||||
@@ -172,7 +173,7 @@ export class Documentation extends React.Component<DocumentationProps, Documenta
|
||||
);
|
||||
}
|
||||
private _renderDocumentation(): React.ReactNode {
|
||||
const subMenus = _.values(this.props.docsInfo.getMenu());
|
||||
const subMenus = _.values(this.props.docsInfo.menu);
|
||||
const orderedSectionNames = _.flatten(subMenus);
|
||||
|
||||
const typeDefinitionByName = this.props.docsInfo.getTypeDefinitionsByName(this.props.docAgnosticFormat);
|
||||
@@ -258,13 +259,12 @@ export class Documentation extends React.Component<DocumentationProps, Documenta
|
||||
{this._renderNetworkBadgesIfExists(sectionName)}
|
||||
</div>
|
||||
{docSection.comment && <Comment comment={docSection.comment} />}
|
||||
{!_.isEmpty(docSection.constructors) &&
|
||||
this.props.docsInfo.isVisibleConstructor(sectionName) && (
|
||||
<div>
|
||||
<h2 style={headerStyle}>Constructor</h2>
|
||||
{this._renderConstructors(docSection.constructors, sectionName, typeDefinitionByName)}
|
||||
</div>
|
||||
)}
|
||||
{!_.isEmpty(docSection.constructors) && (
|
||||
<div>
|
||||
<h2 style={headerStyle}>Constructor</h2>
|
||||
{this._renderConstructors(docSection.constructors, sectionName, typeDefinitionByName)}
|
||||
</div>
|
||||
)}
|
||||
{!_.isEmpty(docSection.properties) && (
|
||||
<div>
|
||||
<h2 style={headerStyle}>Properties</h2>
|
||||
@@ -345,20 +345,14 @@ export class Documentation extends React.Component<DocumentationProps, Documenta
|
||||
}
|
||||
private _renderProperty(sectionName: string, property: Property): React.ReactNode {
|
||||
return (
|
||||
<div key={`property-${property.name}-${property.type.name}`} className="pb3">
|
||||
<code className={`hljs ${constants.TYPE_TO_SYNTAX[this.props.docsInfo.type]}`}>
|
||||
{property.name}:{' '}
|
||||
<Type type={property.type} sectionName={sectionName} docsInfo={this.props.docsInfo} />
|
||||
</code>
|
||||
{property.source && (
|
||||
<SourceLink
|
||||
version={this.props.selectedVersion}
|
||||
source={property.source}
|
||||
sourceUrl={this.props.sourceUrl}
|
||||
/>
|
||||
)}
|
||||
{property.comment && <Comment comment={property.comment} className="py2" />}
|
||||
</div>
|
||||
<PropertyBlock
|
||||
key={`property-${property.name}-${property.type.name}`}
|
||||
property={property}
|
||||
sectionName={sectionName}
|
||||
docsInfo={this.props.docsInfo}
|
||||
sourceUrl={this.props.sourceUrl}
|
||||
selectedVersion={this.props.selectedVersion}
|
||||
/>
|
||||
);
|
||||
}
|
||||
private _renderSignatureBlocks(
|
||||
|
||||
70
packages/react-docs/src/components/property_block.tsx
Normal file
70
packages/react-docs/src/components/property_block.tsx
Normal file
@@ -0,0 +1,70 @@
|
||||
import { AnchorTitle, HeaderSizes } from '@0xproject/react-shared';
|
||||
import * as React from 'react';
|
||||
|
||||
import { DocsInfo } from '../docs_info';
|
||||
import { Property } from '../types';
|
||||
import { constants } from '../utils/constants';
|
||||
|
||||
import { Comment } from './comment';
|
||||
import { Type } from './type';
|
||||
import { SourceLink } from './source_link';
|
||||
|
||||
export interface PropertyBlockProps {
|
||||
property: Property;
|
||||
sectionName: string;
|
||||
docsInfo: DocsInfo;
|
||||
sourceUrl: string;
|
||||
selectedVersion: string;
|
||||
}
|
||||
|
||||
export interface PropertyBlockState {
|
||||
shouldShowAnchor: boolean;
|
||||
}
|
||||
|
||||
export class PropertyBlock extends React.Component<PropertyBlockProps, PropertyBlockState> {
|
||||
constructor(props: PropertyBlockProps) {
|
||||
super(props);
|
||||
this.state = {
|
||||
shouldShowAnchor: false,
|
||||
};
|
||||
}
|
||||
public render(): React.ReactNode {
|
||||
const property = this.props.property;
|
||||
const sectionName = this.props.sectionName;
|
||||
return (
|
||||
<div
|
||||
id={`${this.props.sectionName}-${property.name}`}
|
||||
className="pb4"
|
||||
key={`property-${property.name}-${property.type.name}`}
|
||||
onMouseOver={this._setAnchorVisibility.bind(this, true)}
|
||||
onMouseOut={this._setAnchorVisibility.bind(this, false)}
|
||||
>
|
||||
<div className="pb2" style={{ lineHeight: 1.3 }}>
|
||||
<AnchorTitle
|
||||
headerSize={HeaderSizes.H3}
|
||||
title={property.name}
|
||||
id={`${sectionName}-${property.name}`}
|
||||
shouldShowAnchor={this.state.shouldShowAnchor}
|
||||
/>
|
||||
</div>
|
||||
<code className={`hljs ${constants.TYPE_TO_SYNTAX[this.props.docsInfo.type]}`}>
|
||||
{property.name}:{' '}
|
||||
<Type type={property.type} sectionName={sectionName} docsInfo={this.props.docsInfo} />
|
||||
</code>
|
||||
{property.source && (
|
||||
<SourceLink
|
||||
version={this.props.selectedVersion}
|
||||
source={property.source}
|
||||
sourceUrl={this.props.sourceUrl}
|
||||
/>
|
||||
)}
|
||||
{property.comment && <Comment comment={property.comment} className="py2" />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
private _setAnchorVisibility(shouldShowAnchor: boolean): void {
|
||||
this.setState({
|
||||
shouldShowAnchor,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import { DocsInfo } from '../docs_info';
|
||||
import { Type as TypeDef, TypeDefinitionByName, TypeDocTypes } from '../types';
|
||||
|
||||
import { Signature } from './signature';
|
||||
import { constants } from '../utils/constants';
|
||||
import { TypeDefinition } from './type_definition';
|
||||
|
||||
export interface TypeProps {
|
||||
@@ -43,7 +44,7 @@ export function Type(props: TypeProps): any {
|
||||
<span>
|
||||
<Type
|
||||
key={key}
|
||||
type={arg.elementType}
|
||||
type={arg}
|
||||
sectionName={props.sectionName}
|
||||
typeDefinitionByName={props.typeDefinitionByName}
|
||||
docsInfo={props.docsInfo}
|
||||
@@ -142,7 +143,6 @@ export function Type(props: TypeProps): any {
|
||||
|
||||
let typeNameUrlIfExists;
|
||||
let typePrefixIfExists;
|
||||
let sectionNameIfExists;
|
||||
if (!_.isUndefined(props.docsInfo.typeConfigs)) {
|
||||
typeNameUrlIfExists = !_.isUndefined(props.docsInfo.typeConfigs.typeNameToExternalLink)
|
||||
? props.docsInfo.typeConfigs.typeNameToExternalLink[typeName as string]
|
||||
@@ -150,9 +150,6 @@ export function Type(props: TypeProps): any {
|
||||
typePrefixIfExists = !_.isUndefined(props.docsInfo.typeConfigs.typeNameToPrefix)
|
||||
? props.docsInfo.typeConfigs.typeNameToPrefix[typeName as string]
|
||||
: undefined;
|
||||
sectionNameIfExists = !_.isUndefined(props.docsInfo.typeConfigs.typeNameToDocSection)
|
||||
? props.docsInfo.typeConfigs.typeNameToDocSection[typeName as string]
|
||||
: undefined;
|
||||
}
|
||||
if (!_.isUndefined(typeNameUrlIfExists)) {
|
||||
typeName = (
|
||||
@@ -168,16 +165,12 @@ export function Type(props: TypeProps): any {
|
||||
);
|
||||
} else if (
|
||||
(isReference || isArray) &&
|
||||
(props.docsInfo.isPublicType(typeName as string) || !_.isUndefined(sectionNameIfExists))
|
||||
props.typeDefinitionByName &&
|
||||
props.typeDefinitionByName[typeName as string]
|
||||
) {
|
||||
const id = Math.random().toString();
|
||||
const typeDefinitionAnchorId = _.isUndefined(sectionNameIfExists)
|
||||
? `${props.sectionName}-${typeName}`
|
||||
: sectionNameIfExists;
|
||||
let typeDefinition;
|
||||
if (props.typeDefinitionByName) {
|
||||
typeDefinition = props.typeDefinitionByName[typeName as string];
|
||||
}
|
||||
const typeDefinitionAnchorId = `${constants.TYPES_SECTION_NAME}-${typeName}`;
|
||||
let typeDefinition = props.typeDefinitionByName[typeName as string];
|
||||
typeName = (
|
||||
<ScrollLink
|
||||
to={typeDefinitionAnchorId}
|
||||
@@ -186,18 +179,12 @@ export function Type(props: TypeProps): any {
|
||||
duration={sharedConstants.DOCS_SCROLL_DURATION_MS}
|
||||
containerId={sharedConstants.DOCS_CONTAINER_ID}
|
||||
>
|
||||
{_.isUndefined(typeDefinition) || sharedUtils.isUserOnMobile() ? (
|
||||
<span
|
||||
onClick={sharedUtils.setUrlHash.bind(null, typeDefinitionAnchorId)}
|
||||
style={{ color: colors.lightBlueA700, cursor: 'pointer' }}
|
||||
>
|
||||
{typeName}
|
||||
</span>
|
||||
{sharedUtils.isUserOnMobile() ? (
|
||||
<span style={{ color: colors.lightBlueA700, cursor: 'pointer' }}>{typeName}</span>
|
||||
) : (
|
||||
<span
|
||||
data-tip={true}
|
||||
data-for={id}
|
||||
onClick={sharedUtils.setUrlHash.bind(null, typeDefinitionAnchorId)}
|
||||
style={{
|
||||
color: colors.lightBlueA700,
|
||||
cursor: 'pointer',
|
||||
|
||||
@@ -37,9 +37,6 @@ export class TypeDefinition extends React.Component<TypeDefinitionProps, TypeDef
|
||||
}
|
||||
public render(): React.ReactNode {
|
||||
const customType = this.props.customType;
|
||||
if (!this.props.docsInfo.isPublicType(customType.name)) {
|
||||
return null; // no-op
|
||||
}
|
||||
|
||||
let typePrefix: string;
|
||||
let codeSnippet: React.ReactNode;
|
||||
|
||||
@@ -13,7 +13,7 @@ import {
|
||||
SectionsMap,
|
||||
SupportedDocJson,
|
||||
TypeDefinitionByName,
|
||||
TypeDocNode,
|
||||
GeneratedDocJson,
|
||||
} from './types';
|
||||
import { doxityUtils } from './utils/doxity_utils';
|
||||
import { typeDocUtils } from './utils/typedoc_utils';
|
||||
@@ -32,6 +32,7 @@ export class DocsInfo {
|
||||
constructor(config: DocsInfoConfig) {
|
||||
this.id = config.id;
|
||||
this.type = config.type;
|
||||
this.menu = config.menu;
|
||||
this.displayName = config.displayName;
|
||||
this.packageUrl = config.packageUrl;
|
||||
this.sections = config.sections;
|
||||
@@ -40,38 +41,8 @@ export class DocsInfo {
|
||||
this.typeConfigs = config.typeConfigs;
|
||||
this._docsInfo = config;
|
||||
}
|
||||
public isPublicType(typeName: string): boolean {
|
||||
if (_.isUndefined(this._docsInfo.typeConfigs.publicTypes)) {
|
||||
return false;
|
||||
}
|
||||
const isPublic = _.includes(this._docsInfo.typeConfigs.publicTypes, typeName);
|
||||
return isPublic;
|
||||
}
|
||||
public getModulePathsIfExists(sectionName: string): string[] {
|
||||
const modulePathsIfExists = this._docsInfo.sectionNameToModulePath[sectionName];
|
||||
return modulePathsIfExists;
|
||||
}
|
||||
public getMenu(selectedVersion?: string): { [section: string]: string[] } {
|
||||
if (_.isUndefined(selectedVersion) || _.isUndefined(this._docsInfo.menuSubsectionToVersionWhenIntroduced)) {
|
||||
return this._docsInfo.menu;
|
||||
}
|
||||
|
||||
const finalMenu = _.cloneDeep(this._docsInfo.menu);
|
||||
if (_.isUndefined(finalMenu.contracts)) {
|
||||
return finalMenu;
|
||||
}
|
||||
|
||||
// TODO: refactor to include more sections then simply the `contracts` section
|
||||
finalMenu.contracts = _.filter(finalMenu.contracts, (contractName: string) => {
|
||||
const versionIntroducedIfExists = this._docsInfo.menuSubsectionToVersionWhenIntroduced[contractName];
|
||||
if (!_.isUndefined(versionIntroducedIfExists)) {
|
||||
const doesExistInSelectedVersion = compareVersions(selectedVersion, versionIntroducedIfExists) >= 0;
|
||||
return doesExistInSelectedVersion;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return finalMenu;
|
||||
return this._docsInfo.menu;
|
||||
}
|
||||
public getMenuSubsectionsBySection(docAgnosticFormat?: DocAgnosticFormat): MenuSubsectionsBySection {
|
||||
const menuSubsectionsBySection = {} as MenuSubsectionsBySection;
|
||||
@@ -96,12 +67,18 @@ export class DocsInfo {
|
||||
const sortedEventNames = _.sortBy(docSection.events, 'name');
|
||||
eventNames = _.map(sortedEventNames, m => m.name);
|
||||
}
|
||||
const sortedMethodNames = _.sortBy(docSection.methods, 'name');
|
||||
const methodNames = _.map(sortedMethodNames, m => m.name);
|
||||
menuSubsectionsBySection[sectionName] = [...methodNames, ...eventNames];
|
||||
const propertiesSortedByName = _.sortBy(docSection.properties, 'name');
|
||||
const propertyNames = _.map(propertiesSortedByName, m => m.name);
|
||||
const methodsSortedByName = _.sortBy(docSection.methods, 'name');
|
||||
const methodNames = _.map(methodsSortedByName, m => m.name);
|
||||
const sortedFunctionNames = _.sortBy(docSection.functions, 'name');
|
||||
const functionNames = _.map(sortedFunctionNames, m => m.name);
|
||||
menuSubsectionsBySection[sectionName] = [...eventNames, ...functionNames, ...methodNames];
|
||||
menuSubsectionsBySection[sectionName] = [
|
||||
...eventNames,
|
||||
...propertyNames,
|
||||
...functionNames,
|
||||
...methodNames,
|
||||
];
|
||||
}
|
||||
});
|
||||
return menuSubsectionsBySection;
|
||||
@@ -115,14 +92,11 @@ export class DocsInfo {
|
||||
const typeDefinitionByName = _.keyBy(typeDocSection.types, 'name') as any;
|
||||
return typeDefinitionByName;
|
||||
}
|
||||
public isVisibleConstructor(sectionName: string): boolean {
|
||||
return _.includes(this._docsInfo.visibleConstructors, sectionName);
|
||||
}
|
||||
public convertToDocAgnosticFormat(docObj: DoxityDocObj | TypeDocNode): DocAgnosticFormat {
|
||||
public convertToDocAgnosticFormat(docObj: DoxityDocObj | GeneratedDocJson): DocAgnosticFormat {
|
||||
if (this.type === SupportedDocJson.Doxity) {
|
||||
return doxityUtils.convertToDocAgnosticFormat(docObj as DoxityDocObj);
|
||||
} else {
|
||||
return typeDocUtils.convertToDocAgnosticFormat(docObj as TypeDocNode, this);
|
||||
return typeDocUtils.convertToDocAgnosticFormat(docObj as GeneratedDocJson, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,14 @@ export { Type } from './components/type';
|
||||
|
||||
export { DocsInfo } from './docs_info';
|
||||
|
||||
export { DocsInfoConfig, DocAgnosticFormat, DoxityDocObj, DocsMenu, SupportedDocJson, TypeDocNode } from './types';
|
||||
export {
|
||||
DocsInfoConfig,
|
||||
DocAgnosticFormat,
|
||||
DoxityDocObj,
|
||||
DocsMenu,
|
||||
SupportedDocJson,
|
||||
TypeDocNode,
|
||||
GeneratedDocJson,
|
||||
} from './types';
|
||||
|
||||
export { constants } from './utils/constants';
|
||||
|
||||
@@ -10,18 +10,13 @@ export interface DocsInfoConfig {
|
||||
menu: DocsMenu;
|
||||
sections: SectionsMap;
|
||||
sectionNameToMarkdownByVersion: SectionNameToMarkdownByVersion;
|
||||
visibleConstructors: string[];
|
||||
sectionNameToModulePath?: { [sectionName: string]: string[] };
|
||||
menuSubsectionToVersionWhenIntroduced?: { [sectionName: string]: string };
|
||||
contractsByVersionByNetworkId?: ContractsByVersionByNetworkId;
|
||||
typeConfigs?: DocsInfoTypeConfigs;
|
||||
}
|
||||
|
||||
export interface DocsInfoTypeConfigs {
|
||||
typeNameToExternalLink?: { [typeName: string]: string };
|
||||
publicTypes?: string[];
|
||||
typeNameToPrefix?: { [typeName: string]: string };
|
||||
typeNameToDocSection?: { [typeName: string]: string };
|
||||
}
|
||||
|
||||
export interface DocsMenu {
|
||||
@@ -292,3 +287,17 @@ export enum AbiTypes {
|
||||
Function = 'function',
|
||||
Event = 'event',
|
||||
}
|
||||
|
||||
export interface ExportNameToTypedocName {
|
||||
[exportName: string]: string;
|
||||
}
|
||||
|
||||
export interface Metadata {
|
||||
exportPathToTypedocName: ExportNameToTypedocName;
|
||||
exportPathOrder: string[];
|
||||
}
|
||||
|
||||
export interface GeneratedDocJson {
|
||||
metadata: Metadata;
|
||||
typedocJson: TypeDocNode;
|
||||
}
|
||||
|
||||
@@ -19,8 +19,11 @@ import {
|
||||
TypeParameter,
|
||||
TypescriptFunction,
|
||||
TypescriptMethod,
|
||||
GeneratedDocJson,
|
||||
} from '../types';
|
||||
|
||||
import { constants } from './constants';
|
||||
|
||||
export const typeDocUtils = {
|
||||
isType(entity: TypeDocNode): boolean {
|
||||
return (
|
||||
@@ -55,62 +58,68 @@ export const typeDocUtils = {
|
||||
});
|
||||
return moduleDefinitions;
|
||||
},
|
||||
convertToDocAgnosticFormat(typeDocJson: TypeDocNode, docsInfo: DocsInfo): DocAgnosticFormat {
|
||||
const subMenus = _.values(docsInfo.getMenu());
|
||||
const orderedSectionNames = _.flatten(subMenus);
|
||||
const docAgnosticFormat: DocAgnosticFormat = {};
|
||||
_.each(orderedSectionNames, sectionName => {
|
||||
const modulePathsIfExists = docsInfo.getModulePathsIfExists(sectionName);
|
||||
if (_.isUndefined(modulePathsIfExists)) {
|
||||
return; // no-op
|
||||
}
|
||||
const packageDefinitions = typeDocUtils.getModuleDefinitionsBySectionName(typeDocJson, modulePathsIfExists);
|
||||
let packageDefinitionWithMergedChildren;
|
||||
if (_.isEmpty(packageDefinitions)) {
|
||||
return; // no-op
|
||||
} else if (packageDefinitions.length === 1) {
|
||||
packageDefinitionWithMergedChildren = packageDefinitions[0];
|
||||
} else {
|
||||
// HACK: For now, if there are two modules to display in a single section,
|
||||
// we simply concat the children. This works for our limited use-case where
|
||||
// we want to display types stored in two files under a single section
|
||||
packageDefinitionWithMergedChildren = packageDefinitions[0];
|
||||
for (let i = 1; i < packageDefinitions.length; i++) {
|
||||
packageDefinitionWithMergedChildren.children = [
|
||||
...packageDefinitionWithMergedChildren.children,
|
||||
...packageDefinitions[i].children,
|
||||
];
|
||||
}
|
||||
}
|
||||
convertToDocAgnosticFormat(generatedDocJson: GeneratedDocJson, docsInfo: DocsInfo): DocAgnosticFormat {
|
||||
const exportPathOrder = generatedDocJson.metadata.exportPathOrder;
|
||||
const exportPathToTypedocName = generatedDocJson.metadata.exportPathToTypedocName;
|
||||
const typeDocJson = generatedDocJson.typedocJson;
|
||||
|
||||
let entities;
|
||||
let packageComment = '';
|
||||
// HACK: We assume 1 exported class per file
|
||||
const classChildren = _.filter(packageDefinitionWithMergedChildren.children, (child: TypeDocNode) => {
|
||||
return child.kindString === KindString.Class;
|
||||
});
|
||||
if (classChildren.length > 1 && sectionName !== 'types') {
|
||||
throw new Error('`react-docs` only supports projects with 1 exported class per file');
|
||||
}
|
||||
const isClassExport = packageDefinitionWithMergedChildren.children[0].kindString === KindString.Class;
|
||||
const isObjectLiteralExport =
|
||||
packageDefinitionWithMergedChildren.children[0].kindString === KindString.ObjectLiteral;
|
||||
if (isClassExport) {
|
||||
entities = packageDefinitionWithMergedChildren.children[0].children;
|
||||
const commentObj = packageDefinitionWithMergedChildren.children[0].comment;
|
||||
packageComment = !_.isUndefined(commentObj) ? commentObj.shortText : packageComment;
|
||||
} else if (isObjectLiteralExport) {
|
||||
entities = packageDefinitionWithMergedChildren.children[0].children;
|
||||
const commentObj = packageDefinitionWithMergedChildren.children[0].comment;
|
||||
packageComment = !_.isUndefined(commentObj) ? commentObj.shortText : packageComment;
|
||||
} else {
|
||||
entities = packageDefinitionWithMergedChildren.children;
|
||||
}
|
||||
|
||||
const docSection = typeDocUtils._convertEntitiesToDocSection(entities, docsInfo, sectionName);
|
||||
docSection.comment = packageComment;
|
||||
docAgnosticFormat[sectionName] = docSection;
|
||||
const typeDocNameOrder = _.map(exportPathOrder, exportPath => {
|
||||
return exportPathToTypedocName[exportPath];
|
||||
});
|
||||
|
||||
const docAgnosticFormat: DocAgnosticFormat = {};
|
||||
const typeEntities: TypeDocNode[] = [];
|
||||
_.each(typeDocNameOrder, typeDocName => {
|
||||
const fileChildIndex = _.findIndex(typeDocJson.children, child => child.name === typeDocName);
|
||||
const fileChild = typeDocJson.children[fileChildIndex];
|
||||
let sectionName: string;
|
||||
_.each(fileChild.children, (child, j) => {
|
||||
switch (child.kindString) {
|
||||
case KindString.Class:
|
||||
case KindString.ObjectLiteral: {
|
||||
sectionName = child.name;
|
||||
docsInfo.sections[sectionName] = sectionName;
|
||||
docsInfo.menu[sectionName] = [sectionName];
|
||||
const entities = child.children;
|
||||
const commentObj = child.comment;
|
||||
const sectionComment = !_.isUndefined(commentObj) ? commentObj.shortText : '';
|
||||
const docSection = typeDocUtils._convertEntitiesToDocSection(entities, docsInfo, sectionName);
|
||||
docSection.comment = sectionComment;
|
||||
docAgnosticFormat[sectionName] = docSection;
|
||||
break;
|
||||
}
|
||||
case KindString.Function: {
|
||||
sectionName = child.name;
|
||||
docsInfo.sections[sectionName] = sectionName;
|
||||
docsInfo.menu[sectionName] = [sectionName];
|
||||
const entities = [child];
|
||||
const commentObj = child.comment;
|
||||
const SectionComment = !_.isUndefined(commentObj) ? commentObj.shortText : '';
|
||||
const docSection = typeDocUtils._convertEntitiesToDocSection(entities, docsInfo, sectionName);
|
||||
docSection.comment = SectionComment;
|
||||
docAgnosticFormat[sectionName] = docSection;
|
||||
break;
|
||||
}
|
||||
case KindString.Interface:
|
||||
case KindString.Variable:
|
||||
case KindString.Enumeration:
|
||||
case KindString.TypeAlias:
|
||||
typeEntities.push(child);
|
||||
break;
|
||||
default:
|
||||
throw errorUtils.spawnSwitchErr('kindString', child.kindString);
|
||||
}
|
||||
});
|
||||
});
|
||||
docsInfo.sections[constants.TYPES_SECTION_NAME] = constants.TYPES_SECTION_NAME;
|
||||
docsInfo.menu[constants.TYPES_SECTION_NAME] = [constants.TYPES_SECTION_NAME];
|
||||
const docSection = typeDocUtils._convertEntitiesToDocSection(
|
||||
typeEntities,
|
||||
docsInfo,
|
||||
constants.TYPES_SECTION_NAME,
|
||||
);
|
||||
docAgnosticFormat[constants.TYPES_SECTION_NAME] = docSection;
|
||||
|
||||
return docAgnosticFormat;
|
||||
},
|
||||
_convertEntitiesToDocSection(entities: TypeDocNode[], docsInfo: DocsInfo, sectionName: string): DocSection {
|
||||
@@ -175,18 +184,16 @@ export const typeDocUtils = {
|
||||
case KindString.Variable:
|
||||
case KindString.Enumeration:
|
||||
case KindString.TypeAlias:
|
||||
if (docsInfo.isPublicType(entity.name)) {
|
||||
const customType = typeDocUtils._convertCustomType(
|
||||
entity,
|
||||
docsInfo.sections,
|
||||
sectionName,
|
||||
docsInfo.id,
|
||||
);
|
||||
const seenTypeNames = _.map(docSection.types, t => t.name);
|
||||
const isUnseen = !_.includes(seenTypeNames, customType.name);
|
||||
if (isUnseen) {
|
||||
docSection.types.push(customType);
|
||||
}
|
||||
const customType = typeDocUtils._convertCustomType(
|
||||
entity,
|
||||
docsInfo.sections,
|
||||
sectionName,
|
||||
docsInfo.id,
|
||||
);
|
||||
const seenTypeNames = _.map(docSection.types, t => t.name);
|
||||
const isUnseen = !_.includes(seenTypeNames, customType.name);
|
||||
if (isUnseen) {
|
||||
docSection.types.push(customType);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -40,42 +40,12 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[connectDocSections.installation]: InstallationMarkdownV1,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[connectDocSections.httpClient]: ['"src/http_client"'],
|
||||
[connectDocSections.webSocketOrderbookChannel]: ['"src/ws_orderbook_channel"'],
|
||||
[connectDocSections.types]: ['"src/types"', '"types/src/index"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: connectDocSections,
|
||||
visibleConstructors: [connectDocSections.httpClient, connectDocSections.webSocketOrderbookChannel],
|
||||
typeConfigs: {
|
||||
typeNameToExternalLink: {
|
||||
Provider: constants.URL_WEB3_PROVIDER_DOCS,
|
||||
BigNumber: constants.URL_BIGNUMBERJS_GITHUB,
|
||||
},
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [
|
||||
'Client',
|
||||
'FeesRequest',
|
||||
'FeesResponse',
|
||||
'OrderbookChannel',
|
||||
'OrderbookChannelHandler',
|
||||
'OrderbookChannelSubscriptionOpts',
|
||||
'OrderbookRequest',
|
||||
'OrderbookResponse',
|
||||
'OrdersRequest',
|
||||
'OrdersRequestOpts',
|
||||
'PagedRequestOpts',
|
||||
'TokenPairsItem',
|
||||
'TokenPairsRequest',
|
||||
'TokenPairsRequestOpts',
|
||||
'TokenTradeInfo',
|
||||
'WebSocketOrderbookChannelConfig',
|
||||
'Order',
|
||||
'SignedOrder',
|
||||
'ECSignature',
|
||||
],
|
||||
},
|
||||
};
|
||||
const docsInfo = new DocsInfo(docsInfoConfig);
|
||||
|
||||
@@ -36,60 +36,8 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[docSections.installation]: InstallationMarkdown,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.types]: ['"index"'],
|
||||
},
|
||||
visibleConstructors: [],
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [
|
||||
'Provider',
|
||||
'JSONRPCErrorCallback',
|
||||
'Provider',
|
||||
'ContractAbi',
|
||||
'AbiDefinition',
|
||||
'FunctionAbi',
|
||||
'ConstructorStateMutability',
|
||||
'StateMutability',
|
||||
'MethodAbi',
|
||||
'ConstructorAbi',
|
||||
'FallbackAbi',
|
||||
'EventParameter',
|
||||
'EventAbi',
|
||||
'DataItem',
|
||||
'OpCode',
|
||||
// 'StructLog', // TODO: This type breaks the docs so we don't render it for now
|
||||
'TransactionTrace',
|
||||
'Unit',
|
||||
'JSONRPCRequestPayload',
|
||||
'JSONRPCResponsePayload',
|
||||
'BlockWithoutTransactionData',
|
||||
'BlockWithTransactionData',
|
||||
'Transaction',
|
||||
'TxData',
|
||||
'CallData',
|
||||
'FilterObject',
|
||||
'LogTopic',
|
||||
'DecodedLogEntry',
|
||||
'DecodedLogEntryEvent',
|
||||
'LogEntryEvent',
|
||||
'LogEntry',
|
||||
'TxDataPayable',
|
||||
'TransactionReceipt',
|
||||
'AbiType',
|
||||
'ContractEventArg',
|
||||
'DecodedLogArgs',
|
||||
'LogWithDecodedArgs',
|
||||
'RawLog',
|
||||
'BlockParamLiteral',
|
||||
'BlockParam',
|
||||
'RawLogEntry',
|
||||
'SolidityTypes',
|
||||
'TransactionReceiptWithDecodedLogs',
|
||||
],
|
||||
typeNameToExternalLink: {
|
||||
BigNumber: constants.URL_BIGNUMBERJS_GITHUB,
|
||||
},
|
||||
|
||||
@@ -43,16 +43,8 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[docSections.usage]: UsageMarkdownV1,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.schemaValidator]: ['"json-schemas/src/schema_validator"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
visibleConstructors: [docSections.schemaValidator],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [],
|
||||
typeNameToExternalLink: {
|
||||
Schema:
|
||||
'https://github.com/tdegrunt/jsonschema/blob/5c2edd4baba149964aec0f23c87ad12c25a50dfb/lib/index.d.ts#L49',
|
||||
|
||||
@@ -38,33 +38,8 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[docSections.installation]: InstallationMarkdownV1,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.usage]: [
|
||||
'"order-utils/src/order_hash"',
|
||||
'"order-utils/src/signature_utils"',
|
||||
'"order-utils/src/order_factory"',
|
||||
'"order-utils/src/salt"',
|
||||
'"order-utils/src/assert"',
|
||||
'"order-utils/src/constants"',
|
||||
],
|
||||
[docSections.types]: ['"order-utils/src/types"', '"types/src/index"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
visibleConstructors: [],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [
|
||||
'OrderError',
|
||||
'Order',
|
||||
'SignedOrder',
|
||||
'ECSignature',
|
||||
'Provider',
|
||||
'JSONRPCRequestPayload',
|
||||
'JSONRPCResponsePayload',
|
||||
'JSONRPCErrorCallback',
|
||||
],
|
||||
typeNameToExternalLink: {
|
||||
BigNumber: constants.URL_BIGNUMBERJS_GITHUB,
|
||||
},
|
||||
|
||||
@@ -34,7 +34,6 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
TokenRegistry: Sections.TokenRegistry,
|
||||
ZRXToken: Sections.ZRXToken,
|
||||
},
|
||||
visibleConstructors: [Sections.Exchange, Sections.TokenRegistry, Sections.ZRXToken, Sections.TokenTransferProxy],
|
||||
contractsByVersionByNetworkId: {
|
||||
'1.0.0': {
|
||||
[Networks.Mainnet]: {
|
||||
|
||||
@@ -41,17 +41,8 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[docSections.usage]: UsageMarkdown,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.compiler]: ['"sol-compiler/src/compiler"'],
|
||||
[docSections.types]: ['"sol-compiler/src/utils/types"', '"types/src/index"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
visibleConstructors: [docSections.compiler],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: ['CompilerOptions'],
|
||||
typeNameToExternalLink: {},
|
||||
typeNameToPrefix: {},
|
||||
},
|
||||
|
||||
@@ -47,42 +47,10 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[docSections.usage]: UsageMarkdown,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.coverageSubprovider]: ['"sol-cov/src/coverage_subprovider"'],
|
||||
[docSections.abstractArtifactAdapter]: ['"sol-cov/src/artifact_adapters/abstract_artifact_adapter"'],
|
||||
[docSections.solCompilerArtifactAdapter]: ['"sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter"'],
|
||||
[docSections.truffleArtifactAdapter]: ['"sol-cov/src/artifact_adapters/truffle_artifact_adapter"'],
|
||||
[docSections.types]: ['"subproviders/src/types"', '"types/src/index"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
visibleConstructors: [
|
||||
docSections.coverageSubprovider,
|
||||
docSections.abstractArtifactAdapter,
|
||||
docSections.solCompilerArtifactAdapter,
|
||||
docSections.truffleArtifactAdapter,
|
||||
],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [
|
||||
'JSONRPCRequestPayload',
|
||||
'NextCallback',
|
||||
'ErrorCallback',
|
||||
'AbstractArtifactAdapter',
|
||||
'CoverageSubprovider',
|
||||
'TruffleArtifactAdapter',
|
||||
'SolCompilerArtifactAdapter',
|
||||
'ContractData',
|
||||
],
|
||||
typeNameToExternalLink: {},
|
||||
typeNameToPrefix: {},
|
||||
typeNameToDocSection: {
|
||||
AbstractArtifactAdapter: docSections.abstractArtifactAdapter,
|
||||
CoverageSubprovider: docSections.coverageSubprovider,
|
||||
TruffleArtifactAdapter: docSections.truffleArtifactAdapter,
|
||||
SolCompilerArtifactAdapter: docSections.solCompilerArtifactAdapter,
|
||||
},
|
||||
},
|
||||
};
|
||||
const docsInfo = new DocsInfo(docsInfoConfig);
|
||||
|
||||
@@ -64,55 +64,8 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[docSections.ledgerNodeHid]: LedgerNodeHidMarkdown,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.subprovider]: ['"subproviders/src/subproviders/subprovider"'],
|
||||
[docSections.ledgerSubprovider]: ['"subproviders/src/subproviders/ledger"'],
|
||||
[docSections.privateKeyWalletSubprovider]: ['"subproviders/src/subproviders/private_key_wallet"'],
|
||||
[docSections.mnemonicWalletSubprovider]: ['"subproviders/src/subproviders/mnemonic_wallet"'],
|
||||
[docSections.factoryMethods]: ['"subproviders/src/index"'],
|
||||
[docSections.emptyWalletSubprovider]: ['"subproviders/src/subproviders/empty_wallet_subprovider"'],
|
||||
[docSections.fakeGasEstimateSubprovider]: ['"subproviders/src/subproviders/fake_gas_estimate_subprovider"'],
|
||||
[docSections.injectedWeb3Subprovider]: ['"subproviders/src/subproviders/injected_web3"'],
|
||||
[docSections.signerSubprovider]: ['"subproviders/src/subproviders/signer"'],
|
||||
[docSections.redundantRPCSubprovider]: ['"subproviders/src/subproviders/redundant_rpc"'],
|
||||
[docSections.ganacheSubprovider]: ['"subproviders/src/subproviders/ganache"'],
|
||||
[docSections.nonceTrackerSubprovider]: ['"subproviders/src/subproviders/nonce_tracker"'],
|
||||
[docSections.types]: ['"sol-compiler/src/utils/types"', '"types/src/index"', '"subproviders/src/types"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
visibleConstructors: [
|
||||
docSections.subprovider,
|
||||
docSections.ledgerSubprovider,
|
||||
docSections.privateKeyWalletSubprovider,
|
||||
docSections.mnemonicWalletSubprovider,
|
||||
docSections.emptyWalletSubprovider,
|
||||
docSections.fakeGasEstimateSubprovider,
|
||||
docSections.injectedWeb3Subprovider,
|
||||
docSections.redundantRPCSubprovider,
|
||||
docSections.ganacheSubprovider,
|
||||
docSections.nonceTrackerSubprovider,
|
||||
],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [
|
||||
'Callback',
|
||||
'NextCallback',
|
||||
'ErrorCallback',
|
||||
'ECSignature',
|
||||
'JSONRPCRequestPayloadWithMethod',
|
||||
'JSONRPCRequestPayload',
|
||||
'JSONRPCResponsePayload',
|
||||
'AccountFetchingConfigs',
|
||||
'LedgerEthereumClientFactoryAsync',
|
||||
'PartialTxParams',
|
||||
'LedgerEthereumClient',
|
||||
'LedgerSubproviderConfigs',
|
||||
'MnemonicWalletSubproviderConfigs',
|
||||
'OnNextCompleted',
|
||||
'Provider',
|
||||
],
|
||||
typeNameToExternalLink: {
|
||||
Web3: constants.URL_WEB3_DOCS,
|
||||
BigNumber: constants.URL_BIGNUMBERJS_GITHUB,
|
||||
|
||||
@@ -38,60 +38,13 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[docSections.installation]: InstallationMarkdownV1,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[docSections.web3Wrapper]: ['"web3-wrapper/src/web3_wrapper"'],
|
||||
[docSections.types]: ['"types/src/index"'],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {},
|
||||
sections: docSections,
|
||||
visibleConstructors: [docSections.web3Wrapper],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :(
|
||||
publicTypes: [
|
||||
'TxData',
|
||||
'TransactionReceipt',
|
||||
'RawLogEntry',
|
||||
'ContractAbi',
|
||||
'BlockParam',
|
||||
'FilterObject',
|
||||
'LogEntry',
|
||||
'BlockWithoutTransactionData',
|
||||
'CallData',
|
||||
'LogEntryEvent',
|
||||
'Provider',
|
||||
'AbiDefinition',
|
||||
'LogTopic',
|
||||
'JSONRPCRequestPayload',
|
||||
'JSONRPCResponsePayload',
|
||||
'BlockParamLiteral',
|
||||
'FunctionAbi',
|
||||
'EventAbi',
|
||||
'JSONRPCErrorCallback',
|
||||
'MethodAbi',
|
||||
'ConstructorAbi',
|
||||
'FallbackAbi',
|
||||
'EventParameter',
|
||||
'DataItem',
|
||||
'StateMutability',
|
||||
'Function',
|
||||
'Fallback',
|
||||
'Constructor',
|
||||
'Event',
|
||||
'ConstructorStateMutability',
|
||||
'TransactionReceiptWithDecodedLogs',
|
||||
'DecodedLogArgs',
|
||||
'LogWithDecodedArgs',
|
||||
'ContractEventArg',
|
||||
],
|
||||
typeNameToExternalLink: {
|
||||
Web3: constants.URL_WEB3_DOCS,
|
||||
BigNumber: constants.URL_BIGNUMBERJS_GITHUB,
|
||||
},
|
||||
typeNameToPrefix: {},
|
||||
typeNameToDocSection: {
|
||||
Web3Wrapper: docSections.web3Wrapper,
|
||||
},
|
||||
},
|
||||
};
|
||||
const docsInfo = new DocsInfo(docsInfoConfig);
|
||||
|
||||
@@ -27,14 +27,6 @@ const zeroExJsDocSections = {
|
||||
async: 'async',
|
||||
errors: 'errors',
|
||||
versioning: 'versioning',
|
||||
zeroEx: 'zeroEx',
|
||||
exchange: 'exchange',
|
||||
token: 'token',
|
||||
tokenRegistry: 'tokenRegistry',
|
||||
etherToken: 'etherToken',
|
||||
proxy: 'proxy',
|
||||
orderWatcher: 'orderWatcher',
|
||||
types: docConstants.TYPES_SECTION_NAME,
|
||||
};
|
||||
|
||||
const docsInfoConfig: DocsInfoConfig = {
|
||||
@@ -46,16 +38,6 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
introduction: [zeroExJsDocSections.introduction],
|
||||
install: [zeroExJsDocSections.installation],
|
||||
topics: [zeroExJsDocSections.async, zeroExJsDocSections.errors, zeroExJsDocSections.versioning],
|
||||
zeroEx: [zeroExJsDocSections.zeroEx],
|
||||
contracts: [
|
||||
zeroExJsDocSections.exchange,
|
||||
zeroExJsDocSections.token,
|
||||
zeroExJsDocSections.tokenRegistry,
|
||||
zeroExJsDocSections.etherToken,
|
||||
zeroExJsDocSections.proxy,
|
||||
],
|
||||
orderWatcher: [zeroExJsDocSections.orderWatcher],
|
||||
types: [zeroExJsDocSections.types],
|
||||
},
|
||||
sectionNameToMarkdownByVersion: {
|
||||
'0.0.1': {
|
||||
@@ -74,166 +56,12 @@ const docsInfoConfig: DocsInfoConfig = {
|
||||
[zeroExJsDocSections.errors]: ErrorsMarkdownV1,
|
||||
},
|
||||
},
|
||||
sectionNameToModulePath: {
|
||||
[zeroExJsDocSections.zeroEx]: ['"0x.js/src/0x"', '"src/0x"'],
|
||||
[zeroExJsDocSections.exchange]: [
|
||||
'"0x.js/src/contract_wrappers/exchange_wrapper"',
|
||||
'"src/contract_wrappers/exchange_wrapper"',
|
||||
'"contract-wrappers/src/contract_wrappers/exchange_wrapper"',
|
||||
],
|
||||
[zeroExJsDocSections.tokenRegistry]: [
|
||||
'"0x.js/src/contract_wrappers/token_registry_wrapper"',
|
||||
'"src/contract_wrappers/token_registry_wrapper"',
|
||||
'"contract-wrappers/src/contract_wrappers/token_registry_wrapper"',
|
||||
],
|
||||
[zeroExJsDocSections.token]: [
|
||||
'"0x.js/src/contract_wrappers/token_wrapper"',
|
||||
'"src/contract_wrappers/token_wrapper"',
|
||||
'"contract-wrappers/src/contract_wrappers/token_wrapper"',
|
||||
],
|
||||
[zeroExJsDocSections.etherToken]: [
|
||||
'"0x.js/src/contract_wrappers/ether_token_wrapper"',
|
||||
'"src/contract_wrappers/ether_token_wrapper"',
|
||||
'"contract-wrappers/src/contract_wrappers/ether_token_wrapper"',
|
||||
],
|
||||
[zeroExJsDocSections.proxy]: [
|
||||
'"0x.js/src/contract_wrappers/proxy_wrapper"',
|
||||
'"0x.js/src/contract_wrappers/token_transfer_proxy_wrapper"',
|
||||
'"contract-wrappers/src/contract_wrappers/token_transfer_proxy_wrapper"',
|
||||
],
|
||||
[zeroExJsDocSections.orderWatcher]: [
|
||||
'"0x.js/src/order_watcher/order_state_watcher"',
|
||||
'"src/order_watcher/order_state_watcher"',
|
||||
'"order-watcher/src/order_watcher/order_watcher"',
|
||||
],
|
||||
[zeroExJsDocSections.types]: [
|
||||
'"0x.js/src/types"',
|
||||
'"src/types"',
|
||||
'"types/src/index"',
|
||||
'"contract-wrappers/src/types"',
|
||||
'"0x.js/src/contract_wrappers/generated/ether_token"',
|
||||
'"0x.js/src/contract_wrappers/generated/token"',
|
||||
'"0x.js/src/contract_wrappers/generated/exchange"',
|
||||
'"0x.js/src/generated_contract_wrappers/ether_token"',
|
||||
'"0x.js/src/generated_contract_wrappers/token"',
|
||||
'"0x.js/src/generated_contract_wrappers/exchange"',
|
||||
],
|
||||
},
|
||||
menuSubsectionToVersionWhenIntroduced: {
|
||||
[zeroExJsDocSections.etherToken]: '0.7.1',
|
||||
[zeroExJsDocSections.proxy]: '0.8.0',
|
||||
[zeroExJsDocSections.orderWatcher]: '0.27.1',
|
||||
},
|
||||
sections: zeroExJsDocSections,
|
||||
visibleConstructors: [zeroExJsDocSections.zeroEx],
|
||||
typeConfigs: {
|
||||
// Note: This needs to be kept in sync with the types exported in index.ts. Unfortunately there is
|
||||
// currently no way to extract the re-exported types from index.ts via TypeDoc :( Make sure to only
|
||||
// ADD types here, DO NOT REMOVE types since they might still be needed for older supported versions
|
||||
publicTypes: [
|
||||
'Order',
|
||||
'SignedOrder',
|
||||
'ECSignature',
|
||||
'ContractWrappersError',
|
||||
'EventCallback',
|
||||
'EventCallbackAsync',
|
||||
'EventCallbackSync',
|
||||
'ExchangeContractErrs',
|
||||
'ContractEvent',
|
||||
'Token',
|
||||
'Provider',
|
||||
'ExchangeEvents',
|
||||
'IndexedFilterValues',
|
||||
'SubscriptionOpts',
|
||||
'BlockRange',
|
||||
'BlockParam',
|
||||
'OrderFillOrKillRequest',
|
||||
'OrderCancellationRequest',
|
||||
'OrderFillRequest',
|
||||
'ContractEventEmitter',
|
||||
'Web3Provider',
|
||||
'ContractEventArgs',
|
||||
'LogCancelArgs',
|
||||
'LogFillArgs',
|
||||
'LogErrorContractEventArgs',
|
||||
'LogFillContractEventArgs',
|
||||
'LogCancelContractEventArgs',
|
||||
'EtherTokenContractEventArgs',
|
||||
'WithdrawalContractEventArgs',
|
||||
'DepositContractEventArgs',
|
||||
'TokenEvents',
|
||||
'ExchangeContractEventArgs',
|
||||
'TransferContractEventArgs',
|
||||
'ApprovalContractEventArgs',
|
||||
'TokenContractEventArgs',
|
||||
'ZeroExConfig',
|
||||
'TransactionReceipt',
|
||||
'TransactionReceiptWithDecodedLogs',
|
||||
'LogWithDecodedArgs',
|
||||
'EtherTokenEvents',
|
||||
'BlockParamLiteral',
|
||||
'DecodedLogArgs',
|
||||
'MethodOpts',
|
||||
'ValidateOrderFillableOpts',
|
||||
'OrderTransactionOpts',
|
||||
'TransactionOpts',
|
||||
'ContractEventArg',
|
||||
'LogEvent',
|
||||
'DecodedLogEvent',
|
||||
'EventWatcherCallback',
|
||||
'OnOrderStateChangeCallback',
|
||||
'OrderStateValid',
|
||||
'OrderStateInvalid',
|
||||
'OrderState',
|
||||
'OrderStateWatcherConfig',
|
||||
'OrderWatcherConfig',
|
||||
'FilterObject',
|
||||
'OrderRelevantState',
|
||||
'JSONRPCRequestPayload',
|
||||
'JSONRPCResponsePayload',
|
||||
'JSONRPCErrorCallback',
|
||||
'LogEntryEvent',
|
||||
'LogEntry',
|
||||
'ERC20AssetData',
|
||||
'ERC721AssetData',
|
||||
'AssetProxyId',
|
||||
'WETH9Events',
|
||||
'WETH9WithdrawalEventArgs',
|
||||
'WETH9ApprovalEventArgs',
|
||||
'WETH9EventArgs',
|
||||
'WETH9DepositEventArgs',
|
||||
'WETH9TransferEventArgs',
|
||||
'ERC20TokenTransferEventArgs',
|
||||
'ERC20TokenApprovalEventArgs',
|
||||
'ERC20TokenEvents',
|
||||
'ERC20TokenEventArgs',
|
||||
'ERC721TokenApprovalEventArgs',
|
||||
'ERC721TokenApprovalForAllEventArgs',
|
||||
'ERC721TokenTransferEventArgs',
|
||||
'ERC721TokenEvents',
|
||||
'ExchangeCancelUpToEventArgs',
|
||||
'ExchangeAssetProxyRegisteredEventArgs',
|
||||
'ExchangeFillEventArgs',
|
||||
'ExchangeCancelEventArgs',
|
||||
'ExchangeEventArgs',
|
||||
'ContractWrappersConfig',
|
||||
'MessagePrefixType',
|
||||
'MessagePrefixOpts',
|
||||
'OrderInfo',
|
||||
],
|
||||
typeNameToPrefix: {},
|
||||
typeNameToExternalLink: {
|
||||
BigNumber: constants.URL_BIGNUMBERJS_GITHUB,
|
||||
},
|
||||
typeNameToDocSection: {
|
||||
ExchangeWrapper: 'exchange',
|
||||
TokenWrapper: 'token',
|
||||
TokenRegistryWrapper: 'tokenRegistry',
|
||||
EtherTokenWrapper: 'etherToken',
|
||||
ProxyWrapper: 'proxy',
|
||||
TokenTransferProxyWrapper: 'proxy',
|
||||
OrderStateWatcher: 'orderWatcher',
|
||||
},
|
||||
},
|
||||
};
|
||||
const docsInfo = new DocsInfo(docsInfoConfig);
|
||||
|
||||
@@ -84,7 +84,7 @@ export class DocPage extends React.Component<DocPageProps, DocPageState> {
|
||||
location={this.props.location}
|
||||
docsVersion={this.props.docsVersion}
|
||||
availableDocVersions={this.props.availableDocVersions}
|
||||
menu={this.props.docsInfo.getMenu(this.props.docsVersion)}
|
||||
menu={this.props.docsInfo.menu}
|
||||
menuSubsectionsBySection={menuSubsectionsBySection}
|
||||
docsInfo={this.props.docsInfo}
|
||||
translate={this.props.translate}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { DoxityDocObj, TypeDocNode } from '@0xproject/react-docs';
|
||||
import { DoxityDocObj, GeneratedDocJson } from '@0xproject/react-docs';
|
||||
import { fetchAsync, logUtils } from '@0xproject/utils';
|
||||
import * as _ from 'lodash';
|
||||
import { S3FileObject, VersionToFilePath } from 'ts/types';
|
||||
@@ -70,7 +70,7 @@ export const docUtils = {
|
||||
});
|
||||
return versionFilePaths;
|
||||
},
|
||||
async getJSONDocFileAsync(filePath: string, s3DocJsonRoot: string): Promise<TypeDocNode | DoxityDocObj> {
|
||||
async getJSONDocFileAsync(filePath: string, s3DocJsonRoot: string): Promise<GeneratedDocJson | DoxityDocObj> {
|
||||
const endpoint = `${s3DocJsonRoot}/${filePath}`;
|
||||
const response = await fetchAsync(endpoint);
|
||||
if (response.status !== 200) {
|
||||
|
||||
12
yarn.lock
12
yarn.lock
@@ -1149,6 +1149,12 @@
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react-scroll@1.5.3":
|
||||
version "1.5.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-scroll/-/react-scroll-1.5.3.tgz#cc4e94db3d7d5b1cd244bfee24091c335d3e2598"
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react-tap-event-plugin@0.0.30":
|
||||
version "0.0.30"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-tap-event-plugin/-/react-tap-event-plugin-0.0.30.tgz#123f35080412f489b6770c5a65c159ff96654cb5"
|
||||
@@ -10655,9 +10661,9 @@ react-scroll@1.7.7:
|
||||
lodash.throttle "^4.1.1"
|
||||
prop-types "^15.5.8"
|
||||
|
||||
react-scroll@^1.5.2:
|
||||
version "1.7.8"
|
||||
resolved "https://registry.yarnpkg.com/react-scroll/-/react-scroll-1.7.8.tgz#45d8bd0f3fb104a7a1c3adb358e3a742a7091409"
|
||||
react-scroll@^1.7.10:
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/react-scroll/-/react-scroll-1.7.10.tgz#b59cfa11a899a362c6489607ed5865c9c5fd0b53"
|
||||
dependencies:
|
||||
lodash.throttle "^4.1.1"
|
||||
prop-types "^15.5.8"
|
||||
|
||||
Reference in New Issue
Block a user