@microsoft/api-documenter 7.17.26 → 7.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.28.0"
8
+ "packageVersion": "7.28.1"
9
9
  }
10
10
  ]
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownDocumenter.d.ts","sourceRoot":"","sources":["../../src/documenters/MarkdownDocumenter.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,QAAQ,EAuBT,MAAM,gCAAgC,CAAC;AAgBxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;IACjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAE1B,OAAO,EAAE,0BAA0B;IAU/C,aAAa,IAAI,IAAI;IAyB5B,OAAO,CAAC,iBAAiB;IAiNzB,OAAO,CAAC,mBAAmB;IAmF3B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA0HtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiGzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8BxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyE7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+D7B,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,4BAA4B;IAMpC,OAAO,CAAC,iCAAiC;IAgCzC,OAAO,CAAC,gBAAgB;IAoBxB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAkC9B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,qBAAqB;CAI9B"}
1
+ {"version":3,"file":"MarkdownDocumenter.d.ts","sourceRoot":"","sources":["../../src/documenters/MarkdownDocumenter.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,QAAQ,EAyBT,MAAM,gCAAgC,CAAC;AAgBxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;IACjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAE1B,OAAO,EAAE,0BAA0B;IAU/C,aAAa,IAAI,IAAI;IAyB5B,OAAO,CAAC,iBAAiB;IAiNzB,OAAO,CAAC,mBAAmB;IAmF3B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA0HtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiGzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8BxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2E7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+D7B,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,4BAA4B;IAMpC,OAAO,CAAC,iCAAiC;IAgCzC,OAAO,CAAC,gBAAgB;IAoBxB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAkC9B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,qBAAqB;CAI9B"}
@@ -599,11 +599,11 @@ class MarkdownDocumenter {
599
599
  const configuration = this._tsdocConfiguration;
600
600
  const eventsTable = new DocTable_1.DocTable({
601
601
  configuration,
602
- headerTitles: ['Property', 'Type', 'Description']
602
+ headerTitles: ['Property', 'Modifiers', 'Type', 'Description']
603
603
  });
604
604
  const propertiesTable = new DocTable_1.DocTable({
605
605
  configuration,
606
- headerTitles: ['Property', 'Type', 'Description']
606
+ headerTitles: ['Property', 'Modifiers', 'Type', 'Description']
607
607
  });
608
608
  const methodsTable = new DocTable_1.DocTable({
609
609
  configuration,
@@ -624,6 +624,7 @@ class MarkdownDocumenter {
624
624
  if (apiMember.isEventProperty) {
625
625
  eventsTable.addRow(new DocTableRow_1.DocTableRow({ configuration }, [
626
626
  this._createTitleCell(apiMember),
627
+ this._createModifiersCell(apiMember),
627
628
  this._createPropertyTypeCell(apiMember),
628
629
  this._createDescriptionCell(apiMember)
629
630
  ]));
@@ -631,6 +632,7 @@ class MarkdownDocumenter {
631
632
  else {
632
633
  propertiesTable.addRow(new DocTableRow_1.DocTableRow({ configuration }, [
633
634
  this._createTitleCell(apiMember),
635
+ this._createModifiersCell(apiMember),
634
636
  this._createPropertyTypeCell(apiMember),
635
637
  this._createDescriptionCell(apiMember)
636
638
  ]));
@@ -799,9 +801,19 @@ class MarkdownDocumenter {
799
801
  _createModifiersCell(apiItem) {
800
802
  const configuration = this._tsdocConfiguration;
801
803
  const section = new tsdoc_1.DocSection({ configuration });
804
+ if (api_extractor_model_1.ApiProtectedMixin.isBaseClassOf(apiItem)) {
805
+ if (apiItem.isProtected) {
806
+ section.appendNode(new tsdoc_1.DocParagraph({ configuration }, [new tsdoc_1.DocCodeSpan({ configuration, code: 'protected' })]));
807
+ }
808
+ }
809
+ if (api_extractor_model_1.ApiReadonlyMixin.isBaseClassOf(apiItem)) {
810
+ if (apiItem.isReadonly) {
811
+ section.appendNode(new tsdoc_1.DocParagraph({ configuration }, [new tsdoc_1.DocCodeSpan({ configuration, code: 'readonly' })]));
812
+ }
813
+ }
802
814
  if (api_extractor_model_1.ApiStaticMixin.isBaseClassOf(apiItem)) {
803
815
  if (apiItem.isStatic) {
804
- section.appendNodeInParagraph(new tsdoc_1.DocCodeSpan({ configuration, code: 'static' }));
816
+ section.appendNode(new tsdoc_1.DocParagraph({ configuration }, [new tsdoc_1.DocCodeSpan({ configuration, code: 'static' })]));
805
817
  }
806
818
  }
807
819
  return new DocTableCell_1.DocTableCell({ configuration }, section.nodes);
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownDocumenter.js","sourceRoot":"","sources":["../../src/documenters/MarkdownDocumenter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as path from 'path';\nimport { PackageName, FileSystem, NewlineKind } from '@rushstack/node-core-library';\nimport {\n DocSection,\n DocPlainText,\n DocLinkTag,\n TSDocConfiguration,\n StringBuilder,\n DocNodeKind,\n DocParagraph,\n DocCodeSpan,\n DocFencedCode,\n StandardTags,\n DocBlock,\n DocComment,\n DocNodeContainer\n} from '@microsoft/tsdoc';\nimport {\n ApiModel,\n ApiItem,\n ApiEnum,\n ApiPackage,\n ApiItemKind,\n ApiReleaseTagMixin,\n ApiDocumentedItem,\n ApiClass,\n ReleaseTag,\n ApiStaticMixin,\n ApiPropertyItem,\n ApiInterface,\n Excerpt,\n ApiParameterListMixin,\n ApiReturnTypeMixin,\n ApiDeclaredItem,\n ApiNamespace,\n ExcerptTokenKind,\n IResolveDeclarationReferenceResult,\n ApiTypeAlias,\n ExcerptToken,\n ApiOptionalMixin,\n ApiInitializerMixin\n} from '@microsoft/api-extractor-model';\n\nimport { CustomDocNodes } from '../nodes/CustomDocNodeKind';\nimport { DocHeading } from '../nodes/DocHeading';\nimport { DocTable } from '../nodes/DocTable';\nimport { DocEmphasisSpan } from '../nodes/DocEmphasisSpan';\nimport { DocTableRow } from '../nodes/DocTableRow';\nimport { DocTableCell } from '../nodes/DocTableCell';\nimport { DocNoteBox } from '../nodes/DocNoteBox';\nimport { Utilities } from '../utils/Utilities';\nimport { CustomMarkdownEmitter } from '../markdown/CustomMarkdownEmitter';\nimport { PluginLoader } from '../plugin/PluginLoader';\nimport {\n IMarkdownDocumenterFeatureOnBeforeWritePageArgs,\n MarkdownDocumenterFeatureContext\n} from '../plugin/MarkdownDocumenterFeature';\nimport { DocumenterConfig } from './DocumenterConfig';\nimport { MarkdownDocumenterAccessor } from '../plugin/MarkdownDocumenterAccessor';\n\nexport interface IMarkdownDocumenterOptions {\n apiModel: ApiModel;\n documenterConfig: DocumenterConfig | undefined;\n outputFolder: string;\n}\n\n/**\n * Renders API documentation in the Markdown file format.\n * For more info: https://en.wikipedia.org/wiki/Markdown\n */\nexport class MarkdownDocumenter {\n private readonly _apiModel: ApiModel;\n private readonly _documenterConfig: DocumenterConfig | undefined;\n private readonly _tsdocConfiguration: TSDocConfiguration;\n private readonly _markdownEmitter: CustomMarkdownEmitter;\n private readonly _outputFolder: string;\n private readonly _pluginLoader: PluginLoader;\n\n public constructor(options: IMarkdownDocumenterOptions) {\n this._apiModel = options.apiModel;\n this._documenterConfig = options.documenterConfig;\n this._outputFolder = options.outputFolder;\n this._tsdocConfiguration = CustomDocNodes.configuration;\n this._markdownEmitter = new CustomMarkdownEmitter(this._apiModel);\n\n this._pluginLoader = new PluginLoader();\n }\n\n public generateFiles(): void {\n if (this._documenterConfig) {\n this._pluginLoader.load(this._documenterConfig, () => {\n return new MarkdownDocumenterFeatureContext({\n apiModel: this._apiModel,\n outputFolder: this._outputFolder,\n documenter: new MarkdownDocumenterAccessor({\n getLinkForApiItem: (apiItem: ApiItem) => {\n return this._getLinkFilenameForApiItem(apiItem);\n }\n })\n });\n });\n }\n\n console.log();\n this._deleteOldOutputFiles();\n\n this._writeApiItemPage(this._apiModel);\n\n if (this._pluginLoader.markdownDocumenterFeature) {\n this._pluginLoader.markdownDocumenterFeature.onFinished({});\n }\n }\n\n private _writeApiItemPage(apiItem: ApiItem): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n const output: DocSection = new DocSection({ configuration: this._tsdocConfiguration });\n\n this._writeBreadcrumb(output, apiItem);\n\n const scopedName: string = apiItem.getScopedNameWithinPackage();\n\n switch (apiItem.kind) {\n case ApiItemKind.Class:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} class` }));\n break;\n case ApiItemKind.Enum:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} enum` }));\n break;\n case ApiItemKind.Interface:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} interface` }));\n break;\n case ApiItemKind.Constructor:\n case ApiItemKind.ConstructSignature:\n output.appendNode(new DocHeading({ configuration, title: scopedName }));\n break;\n case ApiItemKind.Method:\n case ApiItemKind.MethodSignature:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} method` }));\n break;\n case ApiItemKind.Function:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} function` }));\n break;\n case ApiItemKind.Model:\n output.appendNode(new DocHeading({ configuration, title: `API Reference` }));\n break;\n case ApiItemKind.Namespace:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} namespace` }));\n break;\n case ApiItemKind.Package:\n console.log(`Writing ${apiItem.displayName} package`);\n const unscopedPackageName: string = PackageName.getUnscopedName(apiItem.displayName);\n output.appendNode(new DocHeading({ configuration, title: `${unscopedPackageName} package` }));\n break;\n case ApiItemKind.Property:\n case ApiItemKind.PropertySignature:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} property` }));\n break;\n case ApiItemKind.TypeAlias:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} type` }));\n break;\n case ApiItemKind.Variable:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} variable` }));\n break;\n default:\n throw new Error('Unsupported API item kind: ' + apiItem.kind);\n }\n\n if (ApiReleaseTagMixin.isBaseClassOf(apiItem)) {\n if (apiItem.releaseTag === ReleaseTag.Beta) {\n this._writeBetaWarning(output);\n }\n }\n\n const decoratorBlocks: DocBlock[] = [];\n\n if (apiItem instanceof ApiDocumentedItem) {\n const tsdocComment: DocComment | undefined = apiItem.tsdocComment;\n\n if (tsdocComment) {\n decoratorBlocks.push(\n ...tsdocComment.customBlocks.filter(\n (block) => block.blockTag.tagNameWithUpperCase === StandardTags.decorator.tagNameWithUpperCase\n )\n );\n\n if (tsdocComment.deprecatedBlock) {\n output.appendNode(\n new DocNoteBox({ configuration: this._tsdocConfiguration }, [\n new DocParagraph({ configuration: this._tsdocConfiguration }, [\n new DocPlainText({\n configuration: this._tsdocConfiguration,\n text: 'Warning: This API is now obsolete. '\n })\n ]),\n ...tsdocComment.deprecatedBlock.content.nodes\n ])\n );\n }\n\n this._appendSection(output, tsdocComment.summarySection);\n }\n }\n\n if (apiItem instanceof ApiDeclaredItem) {\n if (apiItem.excerpt.text.length > 0) {\n output.appendNode(\n new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Signature:' })\n ])\n ])\n );\n output.appendNode(\n new DocFencedCode({\n configuration,\n code: apiItem.getExcerptWithModifiers(),\n language: 'typescript'\n })\n );\n }\n\n this._writeHeritageTypes(output, apiItem);\n }\n\n if (decoratorBlocks.length > 0) {\n output.appendNode(\n new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Decorators:' })\n ])\n ])\n );\n for (const decoratorBlock of decoratorBlocks) {\n output.appendNodes(decoratorBlock.content.nodes);\n }\n }\n\n let appendRemarks: boolean = true;\n switch (apiItem.kind) {\n case ApiItemKind.Class:\n case ApiItemKind.Interface:\n case ApiItemKind.Namespace:\n case ApiItemKind.Package:\n this._writeRemarksSection(output, apiItem);\n appendRemarks = false;\n break;\n }\n\n switch (apiItem.kind) {\n case ApiItemKind.Class:\n this._writeClassTables(output, apiItem as ApiClass);\n break;\n case ApiItemKind.Enum:\n this._writeEnumTables(output, apiItem as ApiEnum);\n break;\n case ApiItemKind.Interface:\n this._writeInterfaceTables(output, apiItem as ApiInterface);\n break;\n case ApiItemKind.Constructor:\n case ApiItemKind.ConstructSignature:\n case ApiItemKind.Method:\n case ApiItemKind.MethodSignature:\n case ApiItemKind.Function:\n this._writeParameterTables(output, apiItem as ApiParameterListMixin);\n this._writeThrowsSection(output, apiItem);\n break;\n case ApiItemKind.Namespace:\n this._writePackageOrNamespaceTables(output, apiItem as ApiNamespace);\n break;\n case ApiItemKind.Model:\n this._writeModelTable(output, apiItem as ApiModel);\n break;\n case ApiItemKind.Package:\n this._writePackageOrNamespaceTables(output, apiItem as ApiPackage);\n break;\n case ApiItemKind.Property:\n case ApiItemKind.PropertySignature:\n break;\n case ApiItemKind.TypeAlias:\n break;\n case ApiItemKind.Variable:\n break;\n default:\n throw new Error('Unsupported API item kind: ' + apiItem.kind);\n }\n\n if (appendRemarks) {\n this._writeRemarksSection(output, apiItem);\n }\n\n const filename: string = path.join(this._outputFolder, this._getFilenameForApiItem(apiItem));\n const stringBuilder: StringBuilder = new StringBuilder();\n\n stringBuilder.append(\n '<!-- Do not edit this file. It is automatically generated by API Documenter. -->\\n\\n'\n );\n\n this._markdownEmitter.emit(stringBuilder, output, {\n contextApiItem: apiItem,\n onGetFilenameForApiItem: (apiItemForFilename: ApiItem) => {\n return this._getLinkFilenameForApiItem(apiItemForFilename);\n }\n });\n\n let pageContent: string = stringBuilder.toString();\n\n if (this._pluginLoader.markdownDocumenterFeature) {\n // Allow the plugin to customize the pageContent\n const eventArgs: IMarkdownDocumenterFeatureOnBeforeWritePageArgs = {\n apiItem: apiItem,\n outputFilename: filename,\n pageContent: pageContent\n };\n this._pluginLoader.markdownDocumenterFeature.onBeforeWritePage(eventArgs);\n pageContent = eventArgs.pageContent;\n }\n\n FileSystem.writeFile(filename, pageContent, {\n convertLineEndings: this._documenterConfig ? this._documenterConfig.newlineKind : NewlineKind.CrLf\n });\n }\n\n private _writeHeritageTypes(output: DocSection, apiItem: ApiDeclaredItem): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n if (apiItem instanceof ApiClass) {\n if (apiItem.extendsType) {\n const extendsParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Extends: ' })\n ])\n ]);\n this._appendExcerptWithHyperlinks(extendsParagraph, apiItem.extendsType.excerpt);\n output.appendNode(extendsParagraph);\n }\n if (apiItem.implementsTypes.length > 0) {\n const extendsParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Implements: ' })\n ])\n ]);\n let needsComma: boolean = false;\n for (const implementsType of apiItem.implementsTypes) {\n if (needsComma) {\n extendsParagraph.appendNode(new DocPlainText({ configuration, text: ', ' }));\n }\n this._appendExcerptWithHyperlinks(extendsParagraph, implementsType.excerpt);\n needsComma = true;\n }\n output.appendNode(extendsParagraph);\n }\n }\n\n if (apiItem instanceof ApiInterface) {\n if (apiItem.extendsTypes.length > 0) {\n const extendsParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Extends: ' })\n ])\n ]);\n let needsComma: boolean = false;\n for (const extendsType of apiItem.extendsTypes) {\n if (needsComma) {\n extendsParagraph.appendNode(new DocPlainText({ configuration, text: ', ' }));\n }\n this._appendExcerptWithHyperlinks(extendsParagraph, extendsType.excerpt);\n needsComma = true;\n }\n output.appendNode(extendsParagraph);\n }\n }\n\n if (apiItem instanceof ApiTypeAlias) {\n const refs: ExcerptToken[] = apiItem.excerptTokens.filter(\n (token) =>\n token.kind === ExcerptTokenKind.Reference &&\n token.canonicalReference &&\n this._apiModel.resolveDeclarationReference(token.canonicalReference, undefined).resolvedApiItem\n );\n if (refs.length > 0) {\n const referencesParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'References: ' })\n ])\n ]);\n let needsComma: boolean = false;\n const visited: Set<string> = new Set();\n for (const ref of refs) {\n if (visited.has(ref.text)) {\n continue;\n }\n visited.add(ref.text);\n\n if (needsComma) {\n referencesParagraph.appendNode(new DocPlainText({ configuration, text: ', ' }));\n }\n\n this._appendExcerptTokenWithHyperlinks(referencesParagraph, ref);\n needsComma = true;\n }\n output.appendNode(referencesParagraph);\n }\n }\n }\n\n private _writeRemarksSection(output: DocSection, apiItem: ApiItem): void {\n if (apiItem instanceof ApiDocumentedItem) {\n const tsdocComment: DocComment | undefined = apiItem.tsdocComment;\n\n if (tsdocComment) {\n // Write the @remarks block\n if (tsdocComment.remarksBlock) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Remarks' }));\n this._appendSection(output, tsdocComment.remarksBlock.content);\n }\n\n // Write the @example blocks\n const exampleBlocks: DocBlock[] = tsdocComment.customBlocks.filter(\n (x) => x.blockTag.tagNameWithUpperCase === StandardTags.example.tagNameWithUpperCase\n );\n\n let exampleNumber: number = 1;\n for (const exampleBlock of exampleBlocks) {\n const heading: string = exampleBlocks.length > 1 ? `Example ${exampleNumber}` : 'Example';\n\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: heading }));\n\n this._appendSection(output, exampleBlock.content);\n\n ++exampleNumber;\n }\n }\n }\n }\n\n private _writeThrowsSection(output: DocSection, apiItem: ApiItem): void {\n if (apiItem instanceof ApiDocumentedItem) {\n const tsdocComment: DocComment | undefined = apiItem.tsdocComment;\n\n if (tsdocComment) {\n // Write the @throws blocks\n const throwsBlocks: DocBlock[] = tsdocComment.customBlocks.filter(\n (x) => x.blockTag.tagNameWithUpperCase === StandardTags.throws.tagNameWithUpperCase\n );\n\n if (throwsBlocks.length > 0) {\n const heading: string = 'Exceptions';\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: heading }));\n\n for (const throwsBlock of throwsBlocks) {\n this._appendSection(output, throwsBlock.content);\n }\n }\n }\n }\n }\n\n /**\n * GENERATE PAGE: MODEL\n */\n private _writeModelTable(output: DocSection, apiModel: ApiModel): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const packagesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Package', 'Description']\n });\n\n for (const apiMember of apiModel.members) {\n const row: DocTableRow = new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createDescriptionCell(apiMember)\n ]);\n\n switch (apiMember.kind) {\n case ApiItemKind.Package:\n packagesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n\n if (packagesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Packages' }));\n output.appendNode(packagesTable);\n }\n }\n\n /**\n * GENERATE PAGE: PACKAGE or NAMESPACE\n */\n private _writePackageOrNamespaceTables(output: DocSection, apiContainer: ApiPackage | ApiNamespace): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const classesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Class', 'Description']\n });\n\n const enumerationsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Enumeration', 'Description']\n });\n\n const functionsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Function', 'Description']\n });\n\n const interfacesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Interface', 'Description']\n });\n\n const namespacesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Namespace', 'Description']\n });\n\n const variablesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Variable', 'Description']\n });\n\n const typeAliasesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Type Alias', 'Description']\n });\n\n const apiMembers: ReadonlyArray<ApiItem> =\n apiContainer.kind === ApiItemKind.Package\n ? (apiContainer as ApiPackage).entryPoints[0].members\n : (apiContainer as ApiNamespace).members;\n\n for (const apiMember of apiMembers) {\n const row: DocTableRow = new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createDescriptionCell(apiMember)\n ]);\n\n switch (apiMember.kind) {\n case ApiItemKind.Class:\n classesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Enum:\n enumerationsTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Interface:\n interfacesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Namespace:\n namespacesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Function:\n functionsTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.TypeAlias:\n typeAliasesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Variable:\n variablesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n\n if (classesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Classes' }));\n output.appendNode(classesTable);\n }\n\n if (enumerationsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Enumerations' }));\n output.appendNode(enumerationsTable);\n }\n if (functionsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Functions' }));\n output.appendNode(functionsTable);\n }\n\n if (interfacesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Interfaces' }));\n output.appendNode(interfacesTable);\n }\n\n if (namespacesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Namespaces' }));\n output.appendNode(namespacesTable);\n }\n\n if (variablesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Variables' }));\n output.appendNode(variablesTable);\n }\n\n if (typeAliasesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Type Aliases' }));\n output.appendNode(typeAliasesTable);\n }\n }\n\n /**\n * GENERATE PAGE: CLASS\n */\n private _writeClassTables(output: DocSection, apiClass: ApiClass): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const eventsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Modifiers', 'Type', 'Description']\n });\n\n const constructorsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Constructor', 'Modifiers', 'Description']\n });\n\n const propertiesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Modifiers', 'Type', 'Description']\n });\n\n const methodsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Method', 'Modifiers', 'Description']\n });\n\n for (const apiMember of apiClass.members) {\n switch (apiMember.kind) {\n case ApiItemKind.Constructor: {\n constructorsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n\n this._writeApiItemPage(apiMember);\n break;\n }\n case ApiItemKind.Method: {\n methodsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n\n this._writeApiItemPage(apiMember);\n break;\n }\n case ApiItemKind.Property: {\n if ((apiMember as ApiPropertyItem).isEventProperty) {\n eventsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n } else {\n propertiesTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n }\n\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n }\n\n if (eventsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Events' }));\n output.appendNode(eventsTable);\n }\n\n if (constructorsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Constructors' }));\n output.appendNode(constructorsTable);\n }\n\n if (propertiesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Properties' }));\n output.appendNode(propertiesTable);\n }\n\n if (methodsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Methods' }));\n output.appendNode(methodsTable);\n }\n }\n\n /**\n * GENERATE PAGE: ENUM\n */\n private _writeEnumTables(output: DocSection, apiEnum: ApiEnum): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const enumMembersTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Member', 'Value', 'Description']\n });\n\n for (const apiEnumMember of apiEnum.members) {\n enumMembersTable.addRow(\n new DocTableRow({ configuration }, [\n new DocTableCell({ configuration }, [\n new DocParagraph({ configuration }, [\n new DocPlainText({ configuration, text: Utilities.getConciseSignature(apiEnumMember) })\n ])\n ]),\n this._createInitializerCell(apiEnumMember),\n this._createDescriptionCell(apiEnumMember)\n ])\n );\n }\n\n if (enumMembersTable.rows.length > 0) {\n output.appendNode(\n new DocHeading({ configuration: this._tsdocConfiguration, title: 'Enumeration Members' })\n );\n output.appendNode(enumMembersTable);\n }\n }\n\n /**\n * GENERATE PAGE: INTERFACE\n */\n private _writeInterfaceTables(output: DocSection, apiClass: ApiInterface): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const eventsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Type', 'Description']\n });\n\n const propertiesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Type', 'Description']\n });\n\n const methodsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Method', 'Description']\n });\n\n for (const apiMember of apiClass.members) {\n switch (apiMember.kind) {\n case ApiItemKind.ConstructSignature:\n case ApiItemKind.MethodSignature: {\n methodsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n\n this._writeApiItemPage(apiMember);\n break;\n }\n case ApiItemKind.PropertySignature: {\n if ((apiMember as ApiPropertyItem).isEventProperty) {\n eventsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n } else {\n propertiesTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n }\n\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n }\n\n if (eventsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Events' }));\n output.appendNode(eventsTable);\n }\n\n if (propertiesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Properties' }));\n output.appendNode(propertiesTable);\n }\n\n if (methodsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Methods' }));\n output.appendNode(methodsTable);\n }\n }\n\n /**\n * GENERATE PAGE: FUNCTION-LIKE\n */\n private _writeParameterTables(output: DocSection, apiParameterListMixin: ApiParameterListMixin): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const parametersTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Parameter', 'Type', 'Description']\n });\n for (const apiParameter of apiParameterListMixin.parameters) {\n const parameterDescription: DocSection = new DocSection({ configuration });\n\n if (apiParameter.isOptional) {\n parameterDescription.appendNodesInParagraph([\n new DocEmphasisSpan({ configuration, italic: true }, [\n new DocPlainText({ configuration, text: '(Optional)' })\n ]),\n new DocPlainText({ configuration, text: ' ' })\n ]);\n }\n\n if (apiParameter.tsdocParamBlock) {\n this._appendAndMergeSection(parameterDescription, apiParameter.tsdocParamBlock.content);\n }\n\n parametersTable.addRow(\n new DocTableRow({ configuration }, [\n new DocTableCell({ configuration }, [\n new DocParagraph({ configuration }, [\n new DocPlainText({ configuration, text: apiParameter.name })\n ])\n ]),\n new DocTableCell({ configuration }, [\n this._createParagraphForTypeExcerpt(apiParameter.parameterTypeExcerpt)\n ]),\n new DocTableCell({ configuration }, parameterDescription.nodes)\n ])\n );\n }\n\n if (parametersTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Parameters' }));\n output.appendNode(parametersTable);\n }\n\n if (ApiReturnTypeMixin.isBaseClassOf(apiParameterListMixin)) {\n const returnTypeExcerpt: Excerpt = apiParameterListMixin.returnTypeExcerpt;\n output.appendNode(\n new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Returns:' })\n ])\n ])\n );\n\n output.appendNode(this._createParagraphForTypeExcerpt(returnTypeExcerpt));\n\n if (apiParameterListMixin instanceof ApiDocumentedItem) {\n if (apiParameterListMixin.tsdocComment && apiParameterListMixin.tsdocComment.returnsBlock) {\n this._appendSection(output, apiParameterListMixin.tsdocComment.returnsBlock.content);\n }\n }\n }\n }\n\n private _createParagraphForTypeExcerpt(excerpt: Excerpt): DocParagraph {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const paragraph: DocParagraph = new DocParagraph({ configuration });\n\n if (!excerpt.text.trim()) {\n paragraph.appendNode(new DocPlainText({ configuration, text: '(not declared)' }));\n } else {\n this._appendExcerptWithHyperlinks(paragraph, excerpt);\n }\n\n return paragraph;\n }\n\n private _appendExcerptWithHyperlinks(docNodeContainer: DocNodeContainer, excerpt: Excerpt): void {\n for (const token of excerpt.spannedTokens) {\n this._appendExcerptTokenWithHyperlinks(docNodeContainer, token);\n }\n }\n\n private _appendExcerptTokenWithHyperlinks(docNodeContainer: DocNodeContainer, token: ExcerptToken): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n // Markdown doesn't provide a standardized syntax for hyperlinks inside code spans, so we will render\n // the type expression as DocPlainText. Instead of creating multiple DocParagraphs, we can simply\n // discard any newlines and let the renderer do normal word-wrapping.\n const unwrappedTokenText: string = token.text.replace(/[\\r\\n]+/g, ' ');\n\n // If it's hyperlinkable, then append a DocLinkTag\n if (token.kind === ExcerptTokenKind.Reference && token.canonicalReference) {\n const apiItemResult: IResolveDeclarationReferenceResult = this._apiModel.resolveDeclarationReference(\n token.canonicalReference,\n undefined\n );\n\n if (apiItemResult.resolvedApiItem) {\n docNodeContainer.appendNode(\n new DocLinkTag({\n configuration,\n tagName: '@link',\n linkText: unwrappedTokenText,\n urlDestination: this._getLinkFilenameForApiItem(apiItemResult.resolvedApiItem)\n })\n );\n return;\n }\n }\n\n // Otherwise append non-hyperlinked text\n docNodeContainer.appendNode(new DocPlainText({ configuration, text: unwrappedTokenText }));\n }\n\n private _createTitleCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n let linkText: string = Utilities.getConciseSignature(apiItem);\n if (ApiOptionalMixin.isBaseClassOf(apiItem) && apiItem.isOptional) {\n linkText += '?';\n }\n\n return new DocTableCell({ configuration }, [\n new DocParagraph({ configuration }, [\n new DocLinkTag({\n configuration,\n tagName: '@link',\n linkText: linkText,\n urlDestination: this._getLinkFilenameForApiItem(apiItem)\n })\n ])\n ]);\n }\n\n /**\n * This generates a DocTableCell for an ApiItem including the summary section and \"(BETA)\" annotation.\n *\n * @remarks\n * We mostly assume that the input is an ApiDocumentedItem, but it's easier to perform this as a runtime\n * check than to have each caller perform a type cast.\n */\n private _createDescriptionCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (ApiReleaseTagMixin.isBaseClassOf(apiItem)) {\n if (apiItem.releaseTag === ReleaseTag.Beta) {\n section.appendNodesInParagraph([\n new DocEmphasisSpan({ configuration, bold: true, italic: true }, [\n new DocPlainText({ configuration, text: '(BETA)' })\n ]),\n new DocPlainText({ configuration, text: ' ' })\n ]);\n }\n }\n\n if (ApiOptionalMixin.isBaseClassOf(apiItem) && apiItem.isOptional) {\n section.appendNodesInParagraph([\n new DocEmphasisSpan({ configuration, italic: true }, [\n new DocPlainText({ configuration, text: '(Optional)' })\n ]),\n new DocPlainText({ configuration, text: ' ' })\n ]);\n }\n\n if (apiItem instanceof ApiDocumentedItem) {\n if (apiItem.tsdocComment !== undefined) {\n this._appendAndMergeSection(section, apiItem.tsdocComment.summarySection);\n }\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _createModifiersCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (ApiStaticMixin.isBaseClassOf(apiItem)) {\n if (apiItem.isStatic) {\n section.appendNodeInParagraph(new DocCodeSpan({ configuration, code: 'static' }));\n }\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _createPropertyTypeCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (apiItem instanceof ApiPropertyItem) {\n section.appendNode(this._createParagraphForTypeExcerpt(apiItem.propertyTypeExcerpt));\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _createInitializerCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (ApiInitializerMixin.isBaseClassOf(apiItem)) {\n if (apiItem.initializerExcerpt) {\n section.appendNodeInParagraph(\n new DocCodeSpan({ configuration, code: apiItem.initializerExcerpt.text })\n );\n }\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _writeBreadcrumb(output: DocSection, apiItem: ApiItem): void {\n output.appendNodeInParagraph(\n new DocLinkTag({\n configuration: this._tsdocConfiguration,\n tagName: '@link',\n linkText: 'Home',\n urlDestination: this._getLinkFilenameForApiItem(this._apiModel)\n })\n );\n\n for (const hierarchyItem of apiItem.getHierarchy()) {\n switch (hierarchyItem.kind) {\n case ApiItemKind.Model:\n case ApiItemKind.EntryPoint:\n // We don't show the model as part of the breadcrumb because it is the root-level container.\n // We don't show the entry point because today API Extractor doesn't support multiple entry points;\n // this may change in the future.\n break;\n default:\n output.appendNodesInParagraph([\n new DocPlainText({\n configuration: this._tsdocConfiguration,\n text: ' > '\n }),\n new DocLinkTag({\n configuration: this._tsdocConfiguration,\n tagName: '@link',\n linkText: hierarchyItem.displayName,\n urlDestination: this._getLinkFilenameForApiItem(hierarchyItem)\n })\n ]);\n }\n }\n }\n\n private _writeBetaWarning(output: DocSection): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n const betaWarning: string =\n 'This API is provided as a preview for developers and may change' +\n ' based on feedback that we receive. Do not use this API in a production environment.';\n output.appendNode(\n new DocNoteBox({ configuration }, [\n new DocParagraph({ configuration }, [new DocPlainText({ configuration, text: betaWarning })])\n ])\n );\n }\n\n private _appendSection(output: DocSection, docSection: DocSection): void {\n for (const node of docSection.nodes) {\n output.appendNode(node);\n }\n }\n\n private _appendAndMergeSection(output: DocSection, docSection: DocSection): void {\n let firstNode: boolean = true;\n for (const node of docSection.nodes) {\n if (firstNode) {\n if (node.kind === DocNodeKind.Paragraph) {\n output.appendNodesInParagraph(node.getChildNodes());\n firstNode = false;\n continue;\n }\n }\n firstNode = false;\n\n output.appendNode(node);\n }\n }\n\n private _getFilenameForApiItem(apiItem: ApiItem): string {\n if (apiItem.kind === ApiItemKind.Model) {\n return 'index.md';\n }\n\n let baseName: string = '';\n for (const hierarchyItem of apiItem.getHierarchy()) {\n // For overloaded methods, add a suffix such as \"MyClass.myMethod_2\".\n let qualifiedName: string = Utilities.getSafeFilenameForName(hierarchyItem.displayName);\n if (ApiParameterListMixin.isBaseClassOf(hierarchyItem)) {\n if (hierarchyItem.overloadIndex > 1) {\n // Subtract one for compatibility with earlier releases of API Documenter.\n // (This will get revamped when we fix GitHub issue #1308)\n qualifiedName += `_${hierarchyItem.overloadIndex - 1}`;\n }\n }\n\n switch (hierarchyItem.kind) {\n case ApiItemKind.Model:\n case ApiItemKind.EntryPoint:\n case ApiItemKind.EnumMember:\n break;\n case ApiItemKind.Package:\n baseName = Utilities.getSafeFilenameForName(PackageName.getUnscopedName(hierarchyItem.displayName));\n break;\n default:\n baseName += '.' + qualifiedName;\n }\n }\n return baseName + '.md';\n }\n\n private _getLinkFilenameForApiItem(apiItem: ApiItem): string {\n return './' + this._getFilenameForApiItem(apiItem);\n }\n\n private _deleteOldOutputFiles(): void {\n console.log('Deleting old output from ' + this._outputFolder);\n FileSystem.ensureEmptyFolder(this._outputFolder);\n }\n}\n"]}
1
+ {"version":3,"file":"MarkdownDocumenter.js","sourceRoot":"","sources":["../../src/documenters/MarkdownDocumenter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as path from 'path';\nimport { PackageName, FileSystem, NewlineKind } from '@rushstack/node-core-library';\nimport {\n DocSection,\n DocPlainText,\n DocLinkTag,\n TSDocConfiguration,\n StringBuilder,\n DocNodeKind,\n DocParagraph,\n DocCodeSpan,\n DocFencedCode,\n StandardTags,\n DocBlock,\n DocComment,\n DocNodeContainer\n} from '@microsoft/tsdoc';\nimport {\n ApiModel,\n ApiItem,\n ApiEnum,\n ApiPackage,\n ApiItemKind,\n ApiReleaseTagMixin,\n ApiDocumentedItem,\n ApiClass,\n ReleaseTag,\n ApiStaticMixin,\n ApiPropertyItem,\n ApiInterface,\n Excerpt,\n ApiParameterListMixin,\n ApiReturnTypeMixin,\n ApiDeclaredItem,\n ApiNamespace,\n ExcerptTokenKind,\n IResolveDeclarationReferenceResult,\n ApiTypeAlias,\n ExcerptToken,\n ApiOptionalMixin,\n ApiInitializerMixin,\n ApiProtectedMixin,\n ApiReadonlyMixin\n} from '@microsoft/api-extractor-model';\n\nimport { CustomDocNodes } from '../nodes/CustomDocNodeKind';\nimport { DocHeading } from '../nodes/DocHeading';\nimport { DocTable } from '../nodes/DocTable';\nimport { DocEmphasisSpan } from '../nodes/DocEmphasisSpan';\nimport { DocTableRow } from '../nodes/DocTableRow';\nimport { DocTableCell } from '../nodes/DocTableCell';\nimport { DocNoteBox } from '../nodes/DocNoteBox';\nimport { Utilities } from '../utils/Utilities';\nimport { CustomMarkdownEmitter } from '../markdown/CustomMarkdownEmitter';\nimport { PluginLoader } from '../plugin/PluginLoader';\nimport {\n IMarkdownDocumenterFeatureOnBeforeWritePageArgs,\n MarkdownDocumenterFeatureContext\n} from '../plugin/MarkdownDocumenterFeature';\nimport { DocumenterConfig } from './DocumenterConfig';\nimport { MarkdownDocumenterAccessor } from '../plugin/MarkdownDocumenterAccessor';\n\nexport interface IMarkdownDocumenterOptions {\n apiModel: ApiModel;\n documenterConfig: DocumenterConfig | undefined;\n outputFolder: string;\n}\n\n/**\n * Renders API documentation in the Markdown file format.\n * For more info: https://en.wikipedia.org/wiki/Markdown\n */\nexport class MarkdownDocumenter {\n private readonly _apiModel: ApiModel;\n private readonly _documenterConfig: DocumenterConfig | undefined;\n private readonly _tsdocConfiguration: TSDocConfiguration;\n private readonly _markdownEmitter: CustomMarkdownEmitter;\n private readonly _outputFolder: string;\n private readonly _pluginLoader: PluginLoader;\n\n public constructor(options: IMarkdownDocumenterOptions) {\n this._apiModel = options.apiModel;\n this._documenterConfig = options.documenterConfig;\n this._outputFolder = options.outputFolder;\n this._tsdocConfiguration = CustomDocNodes.configuration;\n this._markdownEmitter = new CustomMarkdownEmitter(this._apiModel);\n\n this._pluginLoader = new PluginLoader();\n }\n\n public generateFiles(): void {\n if (this._documenterConfig) {\n this._pluginLoader.load(this._documenterConfig, () => {\n return new MarkdownDocumenterFeatureContext({\n apiModel: this._apiModel,\n outputFolder: this._outputFolder,\n documenter: new MarkdownDocumenterAccessor({\n getLinkForApiItem: (apiItem: ApiItem) => {\n return this._getLinkFilenameForApiItem(apiItem);\n }\n })\n });\n });\n }\n\n console.log();\n this._deleteOldOutputFiles();\n\n this._writeApiItemPage(this._apiModel);\n\n if (this._pluginLoader.markdownDocumenterFeature) {\n this._pluginLoader.markdownDocumenterFeature.onFinished({});\n }\n }\n\n private _writeApiItemPage(apiItem: ApiItem): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n const output: DocSection = new DocSection({ configuration: this._tsdocConfiguration });\n\n this._writeBreadcrumb(output, apiItem);\n\n const scopedName: string = apiItem.getScopedNameWithinPackage();\n\n switch (apiItem.kind) {\n case ApiItemKind.Class:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} class` }));\n break;\n case ApiItemKind.Enum:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} enum` }));\n break;\n case ApiItemKind.Interface:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} interface` }));\n break;\n case ApiItemKind.Constructor:\n case ApiItemKind.ConstructSignature:\n output.appendNode(new DocHeading({ configuration, title: scopedName }));\n break;\n case ApiItemKind.Method:\n case ApiItemKind.MethodSignature:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} method` }));\n break;\n case ApiItemKind.Function:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} function` }));\n break;\n case ApiItemKind.Model:\n output.appendNode(new DocHeading({ configuration, title: `API Reference` }));\n break;\n case ApiItemKind.Namespace:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} namespace` }));\n break;\n case ApiItemKind.Package:\n console.log(`Writing ${apiItem.displayName} package`);\n const unscopedPackageName: string = PackageName.getUnscopedName(apiItem.displayName);\n output.appendNode(new DocHeading({ configuration, title: `${unscopedPackageName} package` }));\n break;\n case ApiItemKind.Property:\n case ApiItemKind.PropertySignature:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} property` }));\n break;\n case ApiItemKind.TypeAlias:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} type` }));\n break;\n case ApiItemKind.Variable:\n output.appendNode(new DocHeading({ configuration, title: `${scopedName} variable` }));\n break;\n default:\n throw new Error('Unsupported API item kind: ' + apiItem.kind);\n }\n\n if (ApiReleaseTagMixin.isBaseClassOf(apiItem)) {\n if (apiItem.releaseTag === ReleaseTag.Beta) {\n this._writeBetaWarning(output);\n }\n }\n\n const decoratorBlocks: DocBlock[] = [];\n\n if (apiItem instanceof ApiDocumentedItem) {\n const tsdocComment: DocComment | undefined = apiItem.tsdocComment;\n\n if (tsdocComment) {\n decoratorBlocks.push(\n ...tsdocComment.customBlocks.filter(\n (block) => block.blockTag.tagNameWithUpperCase === StandardTags.decorator.tagNameWithUpperCase\n )\n );\n\n if (tsdocComment.deprecatedBlock) {\n output.appendNode(\n new DocNoteBox({ configuration: this._tsdocConfiguration }, [\n new DocParagraph({ configuration: this._tsdocConfiguration }, [\n new DocPlainText({\n configuration: this._tsdocConfiguration,\n text: 'Warning: This API is now obsolete. '\n })\n ]),\n ...tsdocComment.deprecatedBlock.content.nodes\n ])\n );\n }\n\n this._appendSection(output, tsdocComment.summarySection);\n }\n }\n\n if (apiItem instanceof ApiDeclaredItem) {\n if (apiItem.excerpt.text.length > 0) {\n output.appendNode(\n new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Signature:' })\n ])\n ])\n );\n output.appendNode(\n new DocFencedCode({\n configuration,\n code: apiItem.getExcerptWithModifiers(),\n language: 'typescript'\n })\n );\n }\n\n this._writeHeritageTypes(output, apiItem);\n }\n\n if (decoratorBlocks.length > 0) {\n output.appendNode(\n new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Decorators:' })\n ])\n ])\n );\n for (const decoratorBlock of decoratorBlocks) {\n output.appendNodes(decoratorBlock.content.nodes);\n }\n }\n\n let appendRemarks: boolean = true;\n switch (apiItem.kind) {\n case ApiItemKind.Class:\n case ApiItemKind.Interface:\n case ApiItemKind.Namespace:\n case ApiItemKind.Package:\n this._writeRemarksSection(output, apiItem);\n appendRemarks = false;\n break;\n }\n\n switch (apiItem.kind) {\n case ApiItemKind.Class:\n this._writeClassTables(output, apiItem as ApiClass);\n break;\n case ApiItemKind.Enum:\n this._writeEnumTables(output, apiItem as ApiEnum);\n break;\n case ApiItemKind.Interface:\n this._writeInterfaceTables(output, apiItem as ApiInterface);\n break;\n case ApiItemKind.Constructor:\n case ApiItemKind.ConstructSignature:\n case ApiItemKind.Method:\n case ApiItemKind.MethodSignature:\n case ApiItemKind.Function:\n this._writeParameterTables(output, apiItem as ApiParameterListMixin);\n this._writeThrowsSection(output, apiItem);\n break;\n case ApiItemKind.Namespace:\n this._writePackageOrNamespaceTables(output, apiItem as ApiNamespace);\n break;\n case ApiItemKind.Model:\n this._writeModelTable(output, apiItem as ApiModel);\n break;\n case ApiItemKind.Package:\n this._writePackageOrNamespaceTables(output, apiItem as ApiPackage);\n break;\n case ApiItemKind.Property:\n case ApiItemKind.PropertySignature:\n break;\n case ApiItemKind.TypeAlias:\n break;\n case ApiItemKind.Variable:\n break;\n default:\n throw new Error('Unsupported API item kind: ' + apiItem.kind);\n }\n\n if (appendRemarks) {\n this._writeRemarksSection(output, apiItem);\n }\n\n const filename: string = path.join(this._outputFolder, this._getFilenameForApiItem(apiItem));\n const stringBuilder: StringBuilder = new StringBuilder();\n\n stringBuilder.append(\n '<!-- Do not edit this file. It is automatically generated by API Documenter. -->\\n\\n'\n );\n\n this._markdownEmitter.emit(stringBuilder, output, {\n contextApiItem: apiItem,\n onGetFilenameForApiItem: (apiItemForFilename: ApiItem) => {\n return this._getLinkFilenameForApiItem(apiItemForFilename);\n }\n });\n\n let pageContent: string = stringBuilder.toString();\n\n if (this._pluginLoader.markdownDocumenterFeature) {\n // Allow the plugin to customize the pageContent\n const eventArgs: IMarkdownDocumenterFeatureOnBeforeWritePageArgs = {\n apiItem: apiItem,\n outputFilename: filename,\n pageContent: pageContent\n };\n this._pluginLoader.markdownDocumenterFeature.onBeforeWritePage(eventArgs);\n pageContent = eventArgs.pageContent;\n }\n\n FileSystem.writeFile(filename, pageContent, {\n convertLineEndings: this._documenterConfig ? this._documenterConfig.newlineKind : NewlineKind.CrLf\n });\n }\n\n private _writeHeritageTypes(output: DocSection, apiItem: ApiDeclaredItem): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n if (apiItem instanceof ApiClass) {\n if (apiItem.extendsType) {\n const extendsParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Extends: ' })\n ])\n ]);\n this._appendExcerptWithHyperlinks(extendsParagraph, apiItem.extendsType.excerpt);\n output.appendNode(extendsParagraph);\n }\n if (apiItem.implementsTypes.length > 0) {\n const extendsParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Implements: ' })\n ])\n ]);\n let needsComma: boolean = false;\n for (const implementsType of apiItem.implementsTypes) {\n if (needsComma) {\n extendsParagraph.appendNode(new DocPlainText({ configuration, text: ', ' }));\n }\n this._appendExcerptWithHyperlinks(extendsParagraph, implementsType.excerpt);\n needsComma = true;\n }\n output.appendNode(extendsParagraph);\n }\n }\n\n if (apiItem instanceof ApiInterface) {\n if (apiItem.extendsTypes.length > 0) {\n const extendsParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Extends: ' })\n ])\n ]);\n let needsComma: boolean = false;\n for (const extendsType of apiItem.extendsTypes) {\n if (needsComma) {\n extendsParagraph.appendNode(new DocPlainText({ configuration, text: ', ' }));\n }\n this._appendExcerptWithHyperlinks(extendsParagraph, extendsType.excerpt);\n needsComma = true;\n }\n output.appendNode(extendsParagraph);\n }\n }\n\n if (apiItem instanceof ApiTypeAlias) {\n const refs: ExcerptToken[] = apiItem.excerptTokens.filter(\n (token) =>\n token.kind === ExcerptTokenKind.Reference &&\n token.canonicalReference &&\n this._apiModel.resolveDeclarationReference(token.canonicalReference, undefined).resolvedApiItem\n );\n if (refs.length > 0) {\n const referencesParagraph: DocParagraph = new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'References: ' })\n ])\n ]);\n let needsComma: boolean = false;\n const visited: Set<string> = new Set();\n for (const ref of refs) {\n if (visited.has(ref.text)) {\n continue;\n }\n visited.add(ref.text);\n\n if (needsComma) {\n referencesParagraph.appendNode(new DocPlainText({ configuration, text: ', ' }));\n }\n\n this._appendExcerptTokenWithHyperlinks(referencesParagraph, ref);\n needsComma = true;\n }\n output.appendNode(referencesParagraph);\n }\n }\n }\n\n private _writeRemarksSection(output: DocSection, apiItem: ApiItem): void {\n if (apiItem instanceof ApiDocumentedItem) {\n const tsdocComment: DocComment | undefined = apiItem.tsdocComment;\n\n if (tsdocComment) {\n // Write the @remarks block\n if (tsdocComment.remarksBlock) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Remarks' }));\n this._appendSection(output, tsdocComment.remarksBlock.content);\n }\n\n // Write the @example blocks\n const exampleBlocks: DocBlock[] = tsdocComment.customBlocks.filter(\n (x) => x.blockTag.tagNameWithUpperCase === StandardTags.example.tagNameWithUpperCase\n );\n\n let exampleNumber: number = 1;\n for (const exampleBlock of exampleBlocks) {\n const heading: string = exampleBlocks.length > 1 ? `Example ${exampleNumber}` : 'Example';\n\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: heading }));\n\n this._appendSection(output, exampleBlock.content);\n\n ++exampleNumber;\n }\n }\n }\n }\n\n private _writeThrowsSection(output: DocSection, apiItem: ApiItem): void {\n if (apiItem instanceof ApiDocumentedItem) {\n const tsdocComment: DocComment | undefined = apiItem.tsdocComment;\n\n if (tsdocComment) {\n // Write the @throws blocks\n const throwsBlocks: DocBlock[] = tsdocComment.customBlocks.filter(\n (x) => x.blockTag.tagNameWithUpperCase === StandardTags.throws.tagNameWithUpperCase\n );\n\n if (throwsBlocks.length > 0) {\n const heading: string = 'Exceptions';\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: heading }));\n\n for (const throwsBlock of throwsBlocks) {\n this._appendSection(output, throwsBlock.content);\n }\n }\n }\n }\n }\n\n /**\n * GENERATE PAGE: MODEL\n */\n private _writeModelTable(output: DocSection, apiModel: ApiModel): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const packagesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Package', 'Description']\n });\n\n for (const apiMember of apiModel.members) {\n const row: DocTableRow = new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createDescriptionCell(apiMember)\n ]);\n\n switch (apiMember.kind) {\n case ApiItemKind.Package:\n packagesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n\n if (packagesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Packages' }));\n output.appendNode(packagesTable);\n }\n }\n\n /**\n * GENERATE PAGE: PACKAGE or NAMESPACE\n */\n private _writePackageOrNamespaceTables(output: DocSection, apiContainer: ApiPackage | ApiNamespace): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const classesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Class', 'Description']\n });\n\n const enumerationsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Enumeration', 'Description']\n });\n\n const functionsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Function', 'Description']\n });\n\n const interfacesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Interface', 'Description']\n });\n\n const namespacesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Namespace', 'Description']\n });\n\n const variablesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Variable', 'Description']\n });\n\n const typeAliasesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Type Alias', 'Description']\n });\n\n const apiMembers: ReadonlyArray<ApiItem> =\n apiContainer.kind === ApiItemKind.Package\n ? (apiContainer as ApiPackage).entryPoints[0].members\n : (apiContainer as ApiNamespace).members;\n\n for (const apiMember of apiMembers) {\n const row: DocTableRow = new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createDescriptionCell(apiMember)\n ]);\n\n switch (apiMember.kind) {\n case ApiItemKind.Class:\n classesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Enum:\n enumerationsTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Interface:\n interfacesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Namespace:\n namespacesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Function:\n functionsTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.TypeAlias:\n typeAliasesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n\n case ApiItemKind.Variable:\n variablesTable.addRow(row);\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n\n if (classesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Classes' }));\n output.appendNode(classesTable);\n }\n\n if (enumerationsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Enumerations' }));\n output.appendNode(enumerationsTable);\n }\n if (functionsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Functions' }));\n output.appendNode(functionsTable);\n }\n\n if (interfacesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Interfaces' }));\n output.appendNode(interfacesTable);\n }\n\n if (namespacesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Namespaces' }));\n output.appendNode(namespacesTable);\n }\n\n if (variablesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Variables' }));\n output.appendNode(variablesTable);\n }\n\n if (typeAliasesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Type Aliases' }));\n output.appendNode(typeAliasesTable);\n }\n }\n\n /**\n * GENERATE PAGE: CLASS\n */\n private _writeClassTables(output: DocSection, apiClass: ApiClass): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const eventsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Modifiers', 'Type', 'Description']\n });\n\n const constructorsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Constructor', 'Modifiers', 'Description']\n });\n\n const propertiesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Modifiers', 'Type', 'Description']\n });\n\n const methodsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Method', 'Modifiers', 'Description']\n });\n\n for (const apiMember of apiClass.members) {\n switch (apiMember.kind) {\n case ApiItemKind.Constructor: {\n constructorsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n\n this._writeApiItemPage(apiMember);\n break;\n }\n case ApiItemKind.Method: {\n methodsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n\n this._writeApiItemPage(apiMember);\n break;\n }\n case ApiItemKind.Property: {\n if ((apiMember as ApiPropertyItem).isEventProperty) {\n eventsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n } else {\n propertiesTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n }\n\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n }\n\n if (eventsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Events' }));\n output.appendNode(eventsTable);\n }\n\n if (constructorsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Constructors' }));\n output.appendNode(constructorsTable);\n }\n\n if (propertiesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Properties' }));\n output.appendNode(propertiesTable);\n }\n\n if (methodsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Methods' }));\n output.appendNode(methodsTable);\n }\n }\n\n /**\n * GENERATE PAGE: ENUM\n */\n private _writeEnumTables(output: DocSection, apiEnum: ApiEnum): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const enumMembersTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Member', 'Value', 'Description']\n });\n\n for (const apiEnumMember of apiEnum.members) {\n enumMembersTable.addRow(\n new DocTableRow({ configuration }, [\n new DocTableCell({ configuration }, [\n new DocParagraph({ configuration }, [\n new DocPlainText({ configuration, text: Utilities.getConciseSignature(apiEnumMember) })\n ])\n ]),\n this._createInitializerCell(apiEnumMember),\n this._createDescriptionCell(apiEnumMember)\n ])\n );\n }\n\n if (enumMembersTable.rows.length > 0) {\n output.appendNode(\n new DocHeading({ configuration: this._tsdocConfiguration, title: 'Enumeration Members' })\n );\n output.appendNode(enumMembersTable);\n }\n }\n\n /**\n * GENERATE PAGE: INTERFACE\n */\n private _writeInterfaceTables(output: DocSection, apiClass: ApiInterface): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const eventsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Modifiers', 'Type', 'Description']\n });\n\n const propertiesTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Property', 'Modifiers', 'Type', 'Description']\n });\n\n const methodsTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Method', 'Description']\n });\n\n for (const apiMember of apiClass.members) {\n switch (apiMember.kind) {\n case ApiItemKind.ConstructSignature:\n case ApiItemKind.MethodSignature: {\n methodsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n\n this._writeApiItemPage(apiMember);\n break;\n }\n case ApiItemKind.PropertySignature: {\n if ((apiMember as ApiPropertyItem).isEventProperty) {\n eventsTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n } else {\n propertiesTable.addRow(\n new DocTableRow({ configuration }, [\n this._createTitleCell(apiMember),\n this._createModifiersCell(apiMember),\n this._createPropertyTypeCell(apiMember),\n this._createDescriptionCell(apiMember)\n ])\n );\n }\n\n this._writeApiItemPage(apiMember);\n break;\n }\n }\n }\n\n if (eventsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Events' }));\n output.appendNode(eventsTable);\n }\n\n if (propertiesTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Properties' }));\n output.appendNode(propertiesTable);\n }\n\n if (methodsTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Methods' }));\n output.appendNode(methodsTable);\n }\n }\n\n /**\n * GENERATE PAGE: FUNCTION-LIKE\n */\n private _writeParameterTables(output: DocSection, apiParameterListMixin: ApiParameterListMixin): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const parametersTable: DocTable = new DocTable({\n configuration,\n headerTitles: ['Parameter', 'Type', 'Description']\n });\n for (const apiParameter of apiParameterListMixin.parameters) {\n const parameterDescription: DocSection = new DocSection({ configuration });\n\n if (apiParameter.isOptional) {\n parameterDescription.appendNodesInParagraph([\n new DocEmphasisSpan({ configuration, italic: true }, [\n new DocPlainText({ configuration, text: '(Optional)' })\n ]),\n new DocPlainText({ configuration, text: ' ' })\n ]);\n }\n\n if (apiParameter.tsdocParamBlock) {\n this._appendAndMergeSection(parameterDescription, apiParameter.tsdocParamBlock.content);\n }\n\n parametersTable.addRow(\n new DocTableRow({ configuration }, [\n new DocTableCell({ configuration }, [\n new DocParagraph({ configuration }, [\n new DocPlainText({ configuration, text: apiParameter.name })\n ])\n ]),\n new DocTableCell({ configuration }, [\n this._createParagraphForTypeExcerpt(apiParameter.parameterTypeExcerpt)\n ]),\n new DocTableCell({ configuration }, parameterDescription.nodes)\n ])\n );\n }\n\n if (parametersTable.rows.length > 0) {\n output.appendNode(new DocHeading({ configuration: this._tsdocConfiguration, title: 'Parameters' }));\n output.appendNode(parametersTable);\n }\n\n if (ApiReturnTypeMixin.isBaseClassOf(apiParameterListMixin)) {\n const returnTypeExcerpt: Excerpt = apiParameterListMixin.returnTypeExcerpt;\n output.appendNode(\n new DocParagraph({ configuration }, [\n new DocEmphasisSpan({ configuration, bold: true }, [\n new DocPlainText({ configuration, text: 'Returns:' })\n ])\n ])\n );\n\n output.appendNode(this._createParagraphForTypeExcerpt(returnTypeExcerpt));\n\n if (apiParameterListMixin instanceof ApiDocumentedItem) {\n if (apiParameterListMixin.tsdocComment && apiParameterListMixin.tsdocComment.returnsBlock) {\n this._appendSection(output, apiParameterListMixin.tsdocComment.returnsBlock.content);\n }\n }\n }\n }\n\n private _createParagraphForTypeExcerpt(excerpt: Excerpt): DocParagraph {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const paragraph: DocParagraph = new DocParagraph({ configuration });\n\n if (!excerpt.text.trim()) {\n paragraph.appendNode(new DocPlainText({ configuration, text: '(not declared)' }));\n } else {\n this._appendExcerptWithHyperlinks(paragraph, excerpt);\n }\n\n return paragraph;\n }\n\n private _appendExcerptWithHyperlinks(docNodeContainer: DocNodeContainer, excerpt: Excerpt): void {\n for (const token of excerpt.spannedTokens) {\n this._appendExcerptTokenWithHyperlinks(docNodeContainer, token);\n }\n }\n\n private _appendExcerptTokenWithHyperlinks(docNodeContainer: DocNodeContainer, token: ExcerptToken): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n // Markdown doesn't provide a standardized syntax for hyperlinks inside code spans, so we will render\n // the type expression as DocPlainText. Instead of creating multiple DocParagraphs, we can simply\n // discard any newlines and let the renderer do normal word-wrapping.\n const unwrappedTokenText: string = token.text.replace(/[\\r\\n]+/g, ' ');\n\n // If it's hyperlinkable, then append a DocLinkTag\n if (token.kind === ExcerptTokenKind.Reference && token.canonicalReference) {\n const apiItemResult: IResolveDeclarationReferenceResult = this._apiModel.resolveDeclarationReference(\n token.canonicalReference,\n undefined\n );\n\n if (apiItemResult.resolvedApiItem) {\n docNodeContainer.appendNode(\n new DocLinkTag({\n configuration,\n tagName: '@link',\n linkText: unwrappedTokenText,\n urlDestination: this._getLinkFilenameForApiItem(apiItemResult.resolvedApiItem)\n })\n );\n return;\n }\n }\n\n // Otherwise append non-hyperlinked text\n docNodeContainer.appendNode(new DocPlainText({ configuration, text: unwrappedTokenText }));\n }\n\n private _createTitleCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n let linkText: string = Utilities.getConciseSignature(apiItem);\n if (ApiOptionalMixin.isBaseClassOf(apiItem) && apiItem.isOptional) {\n linkText += '?';\n }\n\n return new DocTableCell({ configuration }, [\n new DocParagraph({ configuration }, [\n new DocLinkTag({\n configuration,\n tagName: '@link',\n linkText: linkText,\n urlDestination: this._getLinkFilenameForApiItem(apiItem)\n })\n ])\n ]);\n }\n\n /**\n * This generates a DocTableCell for an ApiItem including the summary section and \"(BETA)\" annotation.\n *\n * @remarks\n * We mostly assume that the input is an ApiDocumentedItem, but it's easier to perform this as a runtime\n * check than to have each caller perform a type cast.\n */\n private _createDescriptionCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (ApiReleaseTagMixin.isBaseClassOf(apiItem)) {\n if (apiItem.releaseTag === ReleaseTag.Beta) {\n section.appendNodesInParagraph([\n new DocEmphasisSpan({ configuration, bold: true, italic: true }, [\n new DocPlainText({ configuration, text: '(BETA)' })\n ]),\n new DocPlainText({ configuration, text: ' ' })\n ]);\n }\n }\n\n if (ApiOptionalMixin.isBaseClassOf(apiItem) && apiItem.isOptional) {\n section.appendNodesInParagraph([\n new DocEmphasisSpan({ configuration, italic: true }, [\n new DocPlainText({ configuration, text: '(Optional)' })\n ]),\n new DocPlainText({ configuration, text: ' ' })\n ]);\n }\n\n if (apiItem instanceof ApiDocumentedItem) {\n if (apiItem.tsdocComment !== undefined) {\n this._appendAndMergeSection(section, apiItem.tsdocComment.summarySection);\n }\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _createModifiersCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (ApiProtectedMixin.isBaseClassOf(apiItem)) {\n if (apiItem.isProtected) {\n section.appendNode(\n new DocParagraph({ configuration }, [new DocCodeSpan({ configuration, code: 'protected' })])\n );\n }\n }\n\n if (ApiReadonlyMixin.isBaseClassOf(apiItem)) {\n if (apiItem.isReadonly) {\n section.appendNode(\n new DocParagraph({ configuration }, [new DocCodeSpan({ configuration, code: 'readonly' })])\n );\n }\n }\n\n if (ApiStaticMixin.isBaseClassOf(apiItem)) {\n if (apiItem.isStatic) {\n section.appendNode(\n new DocParagraph({ configuration }, [new DocCodeSpan({ configuration, code: 'static' })])\n );\n }\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _createPropertyTypeCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (apiItem instanceof ApiPropertyItem) {\n section.appendNode(this._createParagraphForTypeExcerpt(apiItem.propertyTypeExcerpt));\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _createInitializerCell(apiItem: ApiItem): DocTableCell {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n\n const section: DocSection = new DocSection({ configuration });\n\n if (ApiInitializerMixin.isBaseClassOf(apiItem)) {\n if (apiItem.initializerExcerpt) {\n section.appendNodeInParagraph(\n new DocCodeSpan({ configuration, code: apiItem.initializerExcerpt.text })\n );\n }\n }\n\n return new DocTableCell({ configuration }, section.nodes);\n }\n\n private _writeBreadcrumb(output: DocSection, apiItem: ApiItem): void {\n output.appendNodeInParagraph(\n new DocLinkTag({\n configuration: this._tsdocConfiguration,\n tagName: '@link',\n linkText: 'Home',\n urlDestination: this._getLinkFilenameForApiItem(this._apiModel)\n })\n );\n\n for (const hierarchyItem of apiItem.getHierarchy()) {\n switch (hierarchyItem.kind) {\n case ApiItemKind.Model:\n case ApiItemKind.EntryPoint:\n // We don't show the model as part of the breadcrumb because it is the root-level container.\n // We don't show the entry point because today API Extractor doesn't support multiple entry points;\n // this may change in the future.\n break;\n default:\n output.appendNodesInParagraph([\n new DocPlainText({\n configuration: this._tsdocConfiguration,\n text: ' > '\n }),\n new DocLinkTag({\n configuration: this._tsdocConfiguration,\n tagName: '@link',\n linkText: hierarchyItem.displayName,\n urlDestination: this._getLinkFilenameForApiItem(hierarchyItem)\n })\n ]);\n }\n }\n }\n\n private _writeBetaWarning(output: DocSection): void {\n const configuration: TSDocConfiguration = this._tsdocConfiguration;\n const betaWarning: string =\n 'This API is provided as a preview for developers and may change' +\n ' based on feedback that we receive. Do not use this API in a production environment.';\n output.appendNode(\n new DocNoteBox({ configuration }, [\n new DocParagraph({ configuration }, [new DocPlainText({ configuration, text: betaWarning })])\n ])\n );\n }\n\n private _appendSection(output: DocSection, docSection: DocSection): void {\n for (const node of docSection.nodes) {\n output.appendNode(node);\n }\n }\n\n private _appendAndMergeSection(output: DocSection, docSection: DocSection): void {\n let firstNode: boolean = true;\n for (const node of docSection.nodes) {\n if (firstNode) {\n if (node.kind === DocNodeKind.Paragraph) {\n output.appendNodesInParagraph(node.getChildNodes());\n firstNode = false;\n continue;\n }\n }\n firstNode = false;\n\n output.appendNode(node);\n }\n }\n\n private _getFilenameForApiItem(apiItem: ApiItem): string {\n if (apiItem.kind === ApiItemKind.Model) {\n return 'index.md';\n }\n\n let baseName: string = '';\n for (const hierarchyItem of apiItem.getHierarchy()) {\n // For overloaded methods, add a suffix such as \"MyClass.myMethod_2\".\n let qualifiedName: string = Utilities.getSafeFilenameForName(hierarchyItem.displayName);\n if (ApiParameterListMixin.isBaseClassOf(hierarchyItem)) {\n if (hierarchyItem.overloadIndex > 1) {\n // Subtract one for compatibility with earlier releases of API Documenter.\n // (This will get revamped when we fix GitHub issue #1308)\n qualifiedName += `_${hierarchyItem.overloadIndex - 1}`;\n }\n }\n\n switch (hierarchyItem.kind) {\n case ApiItemKind.Model:\n case ApiItemKind.EntryPoint:\n case ApiItemKind.EnumMember:\n break;\n case ApiItemKind.Package:\n baseName = Utilities.getSafeFilenameForName(PackageName.getUnscopedName(hierarchyItem.displayName));\n break;\n default:\n baseName += '.' + qualifiedName;\n }\n }\n return baseName + '.md';\n }\n\n private _getLinkFilenameForApiItem(apiItem: ApiItem): string {\n return './' + this._getFilenameForApiItem(apiItem);\n }\n\n private _deleteOldOutputFiles(): void {\n console.log('Deleting old output from ' + this._outputFolder);\n FileSystem.ensureEmptyFolder(this._outputFolder);\n }\n}\n"]}
@@ -111,7 +111,7 @@ class CustomMarkdownEmitter extends MarkdownEmitter_1.MarkdownEmitter {
111
111
  break;
112
112
  }
113
113
  default:
114
- super.writeNode(docNode, context, false);
114
+ super.writeNode(docNode, context, docNodeSiblings);
115
115
  }
116
116
  }
117
117
  /** @override */
@@ -1 +1 @@
1
- {"version":3,"file":"CustomMarkdownEmitter.js","sourceRoot":"","sources":["../../src/markdown/CustomMarkdownEmitter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport colors from 'colors';\n\nimport { DocNode, DocLinkTag, StringBuilder } from '@microsoft/tsdoc';\nimport { ApiModel, IResolveDeclarationReferenceResult, ApiItem } from '@microsoft/api-extractor-model';\n\nimport { CustomDocNodeKind } from '../nodes/CustomDocNodeKind';\nimport { DocHeading } from '../nodes/DocHeading';\nimport { DocNoteBox } from '../nodes/DocNoteBox';\nimport { DocTable } from '../nodes/DocTable';\nimport { DocTableCell } from '../nodes/DocTableCell';\nimport { DocEmphasisSpan } from '../nodes/DocEmphasisSpan';\nimport { MarkdownEmitter, IMarkdownEmitterContext, IMarkdownEmitterOptions } from './MarkdownEmitter';\nimport { IndentedWriter } from '../utils/IndentedWriter';\n\nexport interface ICustomMarkdownEmitterOptions extends IMarkdownEmitterOptions {\n contextApiItem: ApiItem | undefined;\n\n onGetFilenameForApiItem: (apiItem: ApiItem) => string | undefined;\n}\n\nexport class CustomMarkdownEmitter extends MarkdownEmitter {\n private _apiModel: ApiModel;\n\n public constructor(apiModel: ApiModel) {\n super();\n\n this._apiModel = apiModel;\n }\n\n public emit(\n stringBuilder: StringBuilder,\n docNode: DocNode,\n options: ICustomMarkdownEmitterOptions\n ): string {\n return super.emit(stringBuilder, docNode, options);\n }\n\n /** @override */\n protected writeNode(docNode: DocNode, context: IMarkdownEmitterContext, docNodeSiblings: boolean): void {\n const writer: IndentedWriter = context.writer;\n\n switch (docNode.kind) {\n case CustomDocNodeKind.Heading: {\n const docHeading: DocHeading = docNode as DocHeading;\n writer.ensureSkippedLine();\n\n let prefix: string;\n switch (docHeading.level) {\n case 1:\n prefix = '##';\n break;\n case 2:\n prefix = '###';\n break;\n case 3:\n prefix = '###';\n break;\n default:\n prefix = '####';\n }\n\n writer.writeLine(prefix + ' ' + this.getEscapedText(docHeading.title));\n writer.writeLine();\n break;\n }\n case CustomDocNodeKind.NoteBox: {\n const docNoteBox: DocNoteBox = docNode as DocNoteBox;\n writer.ensureNewLine();\n\n writer.increaseIndent('> ');\n\n this.writeNode(docNoteBox.content, context, false);\n writer.ensureNewLine();\n\n writer.decreaseIndent();\n\n writer.writeLine();\n break;\n }\n case CustomDocNodeKind.Table: {\n const docTable: DocTable = docNode as DocTable;\n // GitHub's markdown renderer chokes on tables that don't have a blank line above them,\n // whereas VS Code's renderer is totally fine with it.\n writer.ensureSkippedLine();\n\n context.insideTable = true;\n\n // Markdown table rows can have inconsistent cell counts. Size the table based on the longest row.\n let columnCount: number = 0;\n if (docTable.header) {\n columnCount = docTable.header.cells.length;\n }\n for (const row of docTable.rows) {\n if (row.cells.length > columnCount) {\n columnCount = row.cells.length;\n }\n }\n\n // write the table header (which is required by Markdown)\n writer.write('| ');\n for (let i: number = 0; i < columnCount; ++i) {\n writer.write(' ');\n if (docTable.header) {\n const cell: DocTableCell | undefined = docTable.header.cells[i];\n if (cell) {\n this.writeNode(cell.content, context, false);\n }\n }\n writer.write(' |');\n }\n writer.writeLine();\n\n // write the divider\n writer.write('| ');\n for (let i: number = 0; i < columnCount; ++i) {\n writer.write(' --- |');\n }\n writer.writeLine();\n\n for (const row of docTable.rows) {\n writer.write('| ');\n for (const cell of row.cells) {\n writer.write(' ');\n this.writeNode(cell.content, context, false);\n writer.write(' |');\n }\n writer.writeLine();\n }\n writer.writeLine();\n\n context.insideTable = false;\n\n break;\n }\n case CustomDocNodeKind.EmphasisSpan: {\n const docEmphasisSpan: DocEmphasisSpan = docNode as DocEmphasisSpan;\n const oldBold: boolean = context.boldRequested;\n const oldItalic: boolean = context.italicRequested;\n context.boldRequested = docEmphasisSpan.bold;\n context.italicRequested = docEmphasisSpan.italic;\n this.writeNodes(docEmphasisSpan.nodes, context);\n context.boldRequested = oldBold;\n context.italicRequested = oldItalic;\n break;\n }\n default:\n super.writeNode(docNode, context, false);\n }\n }\n\n /** @override */\n protected writeLinkTagWithCodeDestination(\n docLinkTag: DocLinkTag,\n context: IMarkdownEmitterContext<ICustomMarkdownEmitterOptions>\n ): void {\n const options: ICustomMarkdownEmitterOptions = context.options;\n\n const result: IResolveDeclarationReferenceResult = this._apiModel.resolveDeclarationReference(\n docLinkTag.codeDestination!,\n options.contextApiItem\n );\n\n if (result.resolvedApiItem) {\n const filename: string | undefined = options.onGetFilenameForApiItem(result.resolvedApiItem);\n\n if (filename) {\n let linkText: string = docLinkTag.linkText || '';\n if (linkText.length === 0) {\n // Generate a name such as Namespace1.Namespace2.MyClass.myMethod()\n linkText = result.resolvedApiItem.getScopedNameWithinPackage();\n }\n if (linkText.length > 0) {\n const encodedLinkText: string = this.getEscapedText(linkText.replace(/\\s+/g, ' '));\n\n context.writer.write('[');\n context.writer.write(encodedLinkText);\n context.writer.write(`](${filename!})`);\n } else {\n console.log(colors.yellow('WARNING: Unable to determine link text'));\n }\n }\n } else if (result.errorMessage) {\n console.log(\n colors.yellow(\n `WARNING: Unable to resolve reference \"${docLinkTag.codeDestination!.emitAsTsdoc()}\": ` +\n result.errorMessage\n )\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"CustomMarkdownEmitter.js","sourceRoot":"","sources":["../../src/markdown/CustomMarkdownEmitter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport colors from 'colors';\n\nimport { DocNode, DocLinkTag, StringBuilder } from '@microsoft/tsdoc';\nimport { ApiModel, IResolveDeclarationReferenceResult, ApiItem } from '@microsoft/api-extractor-model';\n\nimport { CustomDocNodeKind } from '../nodes/CustomDocNodeKind';\nimport { DocHeading } from '../nodes/DocHeading';\nimport { DocNoteBox } from '../nodes/DocNoteBox';\nimport { DocTable } from '../nodes/DocTable';\nimport { DocTableCell } from '../nodes/DocTableCell';\nimport { DocEmphasisSpan } from '../nodes/DocEmphasisSpan';\nimport { MarkdownEmitter, IMarkdownEmitterContext, IMarkdownEmitterOptions } from './MarkdownEmitter';\nimport { IndentedWriter } from '../utils/IndentedWriter';\n\nexport interface ICustomMarkdownEmitterOptions extends IMarkdownEmitterOptions {\n contextApiItem: ApiItem | undefined;\n\n onGetFilenameForApiItem: (apiItem: ApiItem) => string | undefined;\n}\n\nexport class CustomMarkdownEmitter extends MarkdownEmitter {\n private _apiModel: ApiModel;\n\n public constructor(apiModel: ApiModel) {\n super();\n\n this._apiModel = apiModel;\n }\n\n public emit(\n stringBuilder: StringBuilder,\n docNode: DocNode,\n options: ICustomMarkdownEmitterOptions\n ): string {\n return super.emit(stringBuilder, docNode, options);\n }\n\n /** @override */\n protected writeNode(docNode: DocNode, context: IMarkdownEmitterContext, docNodeSiblings: boolean): void {\n const writer: IndentedWriter = context.writer;\n\n switch (docNode.kind) {\n case CustomDocNodeKind.Heading: {\n const docHeading: DocHeading = docNode as DocHeading;\n writer.ensureSkippedLine();\n\n let prefix: string;\n switch (docHeading.level) {\n case 1:\n prefix = '##';\n break;\n case 2:\n prefix = '###';\n break;\n case 3:\n prefix = '###';\n break;\n default:\n prefix = '####';\n }\n\n writer.writeLine(prefix + ' ' + this.getEscapedText(docHeading.title));\n writer.writeLine();\n break;\n }\n case CustomDocNodeKind.NoteBox: {\n const docNoteBox: DocNoteBox = docNode as DocNoteBox;\n writer.ensureNewLine();\n\n writer.increaseIndent('> ');\n\n this.writeNode(docNoteBox.content, context, false);\n writer.ensureNewLine();\n\n writer.decreaseIndent();\n\n writer.writeLine();\n break;\n }\n case CustomDocNodeKind.Table: {\n const docTable: DocTable = docNode as DocTable;\n // GitHub's markdown renderer chokes on tables that don't have a blank line above them,\n // whereas VS Code's renderer is totally fine with it.\n writer.ensureSkippedLine();\n\n context.insideTable = true;\n\n // Markdown table rows can have inconsistent cell counts. Size the table based on the longest row.\n let columnCount: number = 0;\n if (docTable.header) {\n columnCount = docTable.header.cells.length;\n }\n for (const row of docTable.rows) {\n if (row.cells.length > columnCount) {\n columnCount = row.cells.length;\n }\n }\n\n // write the table header (which is required by Markdown)\n writer.write('| ');\n for (let i: number = 0; i < columnCount; ++i) {\n writer.write(' ');\n if (docTable.header) {\n const cell: DocTableCell | undefined = docTable.header.cells[i];\n if (cell) {\n this.writeNode(cell.content, context, false);\n }\n }\n writer.write(' |');\n }\n writer.writeLine();\n\n // write the divider\n writer.write('| ');\n for (let i: number = 0; i < columnCount; ++i) {\n writer.write(' --- |');\n }\n writer.writeLine();\n\n for (const row of docTable.rows) {\n writer.write('| ');\n for (const cell of row.cells) {\n writer.write(' ');\n this.writeNode(cell.content, context, false);\n writer.write(' |');\n }\n writer.writeLine();\n }\n writer.writeLine();\n\n context.insideTable = false;\n\n break;\n }\n case CustomDocNodeKind.EmphasisSpan: {\n const docEmphasisSpan: DocEmphasisSpan = docNode as DocEmphasisSpan;\n const oldBold: boolean = context.boldRequested;\n const oldItalic: boolean = context.italicRequested;\n context.boldRequested = docEmphasisSpan.bold;\n context.italicRequested = docEmphasisSpan.italic;\n this.writeNodes(docEmphasisSpan.nodes, context);\n context.boldRequested = oldBold;\n context.italicRequested = oldItalic;\n break;\n }\n default:\n super.writeNode(docNode, context, docNodeSiblings);\n }\n }\n\n /** @override */\n protected writeLinkTagWithCodeDestination(\n docLinkTag: DocLinkTag,\n context: IMarkdownEmitterContext<ICustomMarkdownEmitterOptions>\n ): void {\n const options: ICustomMarkdownEmitterOptions = context.options;\n\n const result: IResolveDeclarationReferenceResult = this._apiModel.resolveDeclarationReference(\n docLinkTag.codeDestination!,\n options.contextApiItem\n );\n\n if (result.resolvedApiItem) {\n const filename: string | undefined = options.onGetFilenameForApiItem(result.resolvedApiItem);\n\n if (filename) {\n let linkText: string = docLinkTag.linkText || '';\n if (linkText.length === 0) {\n // Generate a name such as Namespace1.Namespace2.MyClass.myMethod()\n linkText = result.resolvedApiItem.getScopedNameWithinPackage();\n }\n if (linkText.length > 0) {\n const encodedLinkText: string = this.getEscapedText(linkText.replace(/\\s+/g, ' '));\n\n context.writer.write('[');\n context.writer.write(encodedLinkText);\n context.writer.write(`](${filename!})`);\n } else {\n console.log(colors.yellow('WARNING: Unable to determine link text'));\n }\n }\n } else if (result.errorMessage) {\n console.log(\n colors.yellow(\n `WARNING: Unable to resolve reference \"${docLinkTag.codeDestination!.emitAsTsdoc()}\": ` +\n result.errorMessage\n )\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEmitter.d.ts","sourceRoot":"","sources":["../../src/markdown/MarkdownEmitter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,OAAO,EAEP,aAAa,EAKb,UAAU,EAQX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,WAAW,uBAAuB;CAAG;AAE3C,MAAM,WAAW,uBAAuB,CAAC,QAAQ,GAAG,uBAAuB;IACzE,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IAErB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IAEzB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IAEvB,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,eAAe;IACnB,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,GAAG,MAAM;IAuBrG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW9C,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASnD;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAgHvG,eAAe;IACf,SAAS,CAAC,+BAA+B,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAKzG,eAAe;IACf,SAAS,CAAC,8BAA8B,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAWxG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IA+C9E,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;CAK/F"}
1
+ {"version":3,"file":"MarkdownEmitter.d.ts","sourceRoot":"","sources":["../../src/markdown/MarkdownEmitter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,OAAO,EAEP,aAAa,EAKb,UAAU,EAQX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,WAAW,uBAAuB;CAAG;AAE3C,MAAM,WAAW,uBAAuB,CAAC,QAAQ,GAAG,uBAAuB;IACzE,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IAErB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IAEzB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IAEvB,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,eAAe;IACnB,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,GAAG,MAAM;IAuBrG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW9C,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASnD;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAoHvG,eAAe;IACf,SAAS,CAAC,+BAA+B,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAKzG,eAAe;IACf,SAAS,CAAC,8BAA8B,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAWxG,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IA+C9E,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;CAK/F"}
@@ -104,9 +104,13 @@ class MarkdownEmitter {
104
104
  const trimmedParagraph = tsdoc_1.DocNodeTransforms.trimSpacesInParagraph(docParagraph);
105
105
  if (context.insideTable) {
106
106
  if (docNodeSiblings) {
107
- writer.write('<p>');
108
- this.writeNodes(trimmedParagraph.nodes, context);
109
- writer.write('</p>');
107
+ // This tentative write is necessary to avoid writing empty paragraph tags (i.e. `<p></p>`). At the
108
+ // time this code runs, we do not know whether the `writeNodes` call below will actually write
109
+ // anything. Thus, we want to only write a `<p>` tag (as well as eventually a corresponding
110
+ // `</p>` tag) if something ends up being written within the tags.
111
+ writer.writeTentative('<p>', '</p>', () => {
112
+ this.writeNodes(trimmedParagraph.nodes, context);
113
+ });
110
114
  }
111
115
  else {
112
116
  // Special case: If we are the only element inside this table cell, then we can omit the <p></p> container.
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEmitter.js","sourceRoot":"","sources":["../../src/markdown/MarkdownEmitter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport {\n DocNode,\n DocNodeKind,\n StringBuilder,\n DocPlainText,\n DocHtmlStartTag,\n DocHtmlEndTag,\n DocCodeSpan,\n DocLinkTag,\n DocParagraph,\n DocFencedCode,\n DocSection,\n DocNodeTransforms,\n DocEscapedText,\n DocErrorText,\n DocBlockTag\n} from '@microsoft/tsdoc';\nimport { InternalError } from '@rushstack/node-core-library';\n\nimport { IndentedWriter } from '../utils/IndentedWriter';\n\nexport interface IMarkdownEmitterOptions {}\n\nexport interface IMarkdownEmitterContext<TOptions = IMarkdownEmitterOptions> {\n writer: IndentedWriter;\n insideTable: boolean;\n\n boldRequested: boolean;\n italicRequested: boolean;\n\n writingBold: boolean;\n writingItalic: boolean;\n\n options: TOptions;\n}\n\n/**\n * Renders MarkupElement content in the Markdown file format.\n * For more info: https://en.wikipedia.org/wiki/Markdown\n */\nexport class MarkdownEmitter {\n public emit(stringBuilder: StringBuilder, docNode: DocNode, options: IMarkdownEmitterOptions): string {\n const writer: IndentedWriter = new IndentedWriter(stringBuilder);\n\n const context: IMarkdownEmitterContext = {\n writer,\n insideTable: false,\n\n boldRequested: false,\n italicRequested: false,\n\n writingBold: false,\n writingItalic: false,\n\n options\n };\n\n this.writeNode(docNode, context, false);\n\n writer.ensureNewLine(); // finish the last line\n\n return writer.toString();\n }\n\n protected getEscapedText(text: string): string {\n const textWithBackslashes: string = text\n .replace(/\\\\/g, '\\\\\\\\') // first replace the escape character\n .replace(/[*#[\\]_|`~]/g, (x) => '\\\\' + x) // then escape any special characters\n .replace(/---/g, '\\\\-\\\\-\\\\-') // hyphens only if it's 3 or more\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n return textWithBackslashes;\n }\n\n protected getTableEscapedText(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\\|/g, '&#124;');\n }\n\n /**\n * @virtual\n */\n protected writeNode(docNode: DocNode, context: IMarkdownEmitterContext, docNodeSiblings: boolean): void {\n const writer: IndentedWriter = context.writer;\n\n switch (docNode.kind) {\n case DocNodeKind.PlainText: {\n const docPlainText: DocPlainText = docNode as DocPlainText;\n this.writePlainText(docPlainText.text, context);\n break;\n }\n case DocNodeKind.HtmlStartTag:\n case DocNodeKind.HtmlEndTag: {\n const docHtmlTag: DocHtmlStartTag | DocHtmlEndTag = docNode as DocHtmlStartTag | DocHtmlEndTag;\n // write the HTML element verbatim into the output\n writer.write(docHtmlTag.emitAsHtml());\n break;\n }\n case DocNodeKind.CodeSpan: {\n const docCodeSpan: DocCodeSpan = docNode as DocCodeSpan;\n if (context.insideTable) {\n writer.write('<code>');\n } else {\n writer.write('`');\n }\n if (context.insideTable) {\n const code: string = this.getTableEscapedText(docCodeSpan.code);\n const parts: string[] = code.split(/\\r?\\n/g);\n writer.write(parts.join('</code><br/><code>'));\n } else {\n writer.write(docCodeSpan.code);\n }\n if (context.insideTable) {\n writer.write('</code>');\n } else {\n writer.write('`');\n }\n break;\n }\n case DocNodeKind.LinkTag: {\n const docLinkTag: DocLinkTag = docNode as DocLinkTag;\n if (docLinkTag.codeDestination) {\n this.writeLinkTagWithCodeDestination(docLinkTag, context);\n } else if (docLinkTag.urlDestination) {\n this.writeLinkTagWithUrlDestination(docLinkTag, context);\n } else if (docLinkTag.linkText) {\n this.writePlainText(docLinkTag.linkText, context);\n }\n break;\n }\n case DocNodeKind.Paragraph: {\n const docParagraph: DocParagraph = docNode as DocParagraph;\n const trimmedParagraph: DocParagraph = DocNodeTransforms.trimSpacesInParagraph(docParagraph);\n if (context.insideTable) {\n if (docNodeSiblings) {\n writer.write('<p>');\n this.writeNodes(trimmedParagraph.nodes, context);\n writer.write('</p>');\n } else {\n // Special case: If we are the only element inside this table cell, then we can omit the <p></p> container.\n this.writeNodes(trimmedParagraph.nodes, context);\n }\n } else {\n this.writeNodes(trimmedParagraph.nodes, context);\n writer.ensureNewLine();\n writer.writeLine();\n }\n break;\n }\n case DocNodeKind.FencedCode: {\n const docFencedCode: DocFencedCode = docNode as DocFencedCode;\n writer.ensureNewLine();\n writer.write('```');\n writer.write(docFencedCode.language);\n writer.writeLine();\n writer.write(docFencedCode.code);\n writer.ensureNewLine();\n writer.writeLine('```');\n break;\n }\n case DocNodeKind.Section: {\n const docSection: DocSection = docNode as DocSection;\n this.writeNodes(docSection.nodes, context);\n break;\n }\n case DocNodeKind.SoftBreak: {\n if (!/^\\s?$/.test(writer.peekLastCharacter())) {\n writer.write(' ');\n }\n break;\n }\n case DocNodeKind.EscapedText: {\n const docEscapedText: DocEscapedText = docNode as DocEscapedText;\n this.writePlainText(docEscapedText.decodedText, context);\n break;\n }\n case DocNodeKind.ErrorText: {\n const docErrorText: DocErrorText = docNode as DocErrorText;\n this.writePlainText(docErrorText.text, context);\n break;\n }\n case DocNodeKind.InlineTag: {\n break;\n }\n case DocNodeKind.BlockTag: {\n const tagNode: DocBlockTag = docNode as DocBlockTag;\n console.warn('Unsupported block tag: ' + tagNode.tagName);\n break;\n }\n default:\n throw new InternalError('Unsupported DocNodeKind kind: ' + docNode.kind);\n }\n }\n\n /** @virtual */\n protected writeLinkTagWithCodeDestination(docLinkTag: DocLinkTag, context: IMarkdownEmitterContext): void {\n // The subclass needs to implement this to support code destinations\n throw new InternalError('writeLinkTagWithCodeDestination()');\n }\n\n /** @virtual */\n protected writeLinkTagWithUrlDestination(docLinkTag: DocLinkTag, context: IMarkdownEmitterContext): void {\n const linkText: string =\n docLinkTag.linkText !== undefined ? docLinkTag.linkText : docLinkTag.urlDestination!;\n\n const encodedLinkText: string = this.getEscapedText(linkText.replace(/\\s+/g, ' '));\n\n context.writer.write('[');\n context.writer.write(encodedLinkText);\n context.writer.write(`](${docLinkTag.urlDestination!})`);\n }\n\n protected writePlainText(text: string, context: IMarkdownEmitterContext): void {\n const writer: IndentedWriter = context.writer;\n\n // split out the [ leading whitespace, content, trailing whitespace ]\n const parts: string[] = text.match(/^(\\s*)(.*?)(\\s*)$/) || [];\n\n writer.write(parts[1]); // write leading whitespace\n\n const middle: string = parts[2];\n\n if (middle !== '') {\n switch (writer.peekLastCharacter()) {\n case '':\n case '\\n':\n case ' ':\n case '[':\n case '>':\n // okay to put a symbol\n break;\n default:\n // This is no problem: \"**one** *two* **three**\"\n // But this is trouble: \"**one***two***three**\"\n // The most general solution: \"**one**<!-- -->*two*<!-- -->**three**\"\n writer.write('<!-- -->');\n break;\n }\n\n if (context.boldRequested) {\n writer.write('<b>');\n }\n if (context.italicRequested) {\n writer.write('<i>');\n }\n\n writer.write(this.getEscapedText(middle));\n\n if (context.italicRequested) {\n writer.write('</i>');\n }\n if (context.boldRequested) {\n writer.write('</b>');\n }\n }\n\n writer.write(parts[3]); // write trailing whitespace\n }\n\n protected writeNodes(docNodes: ReadonlyArray<DocNode>, context: IMarkdownEmitterContext): void {\n for (const docNode of docNodes) {\n this.writeNode(docNode, context, docNodes.length > 1);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"MarkdownEmitter.js","sourceRoot":"","sources":["../../src/markdown/MarkdownEmitter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,4CAgB0B;AAC1B,oEAA6D;AAE7D,4DAAyD;AAiBzD;;;GAGG;AACH,MAAa,eAAe;IACnB,IAAI,CAAC,aAA4B,EAAE,OAAgB,EAAE,OAAgC;QAC1F,MAAM,MAAM,GAAmB,IAAI,+BAAc,CAAC,aAAa,CAAC,CAAC;QAEjE,MAAM,OAAO,GAA4B;YACvC,MAAM;YACN,WAAW,EAAE,KAAK;YAElB,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,KAAK;YAEtB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;YAEpB,OAAO;SACR,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAExC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,uBAAuB;QAE/C,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAES,cAAc,CAAC,IAAY;QACnC,MAAM,mBAAmB,GAAW,IAAI;aACrC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,qCAAqC;aAC5D,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,qCAAqC;aAC9E,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,iCAAiC;aAC9D,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAES,mBAAmB,CAAC,IAAY;QACxC,OAAO,IAAI;aACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;aACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACO,SAAS,CAAC,OAAgB,EAAE,OAAgC,EAAE,eAAwB;QAC9F,MAAM,MAAM,GAAmB,OAAO,CAAC,MAAM,CAAC;QAE9C,QAAQ,OAAO,CAAC,IAAI,EAAE;YACpB,KAAK,mBAAW,CAAC,SAAS,CAAC,CAAC;gBAC1B,MAAM,YAAY,GAAiB,OAAuB,CAAC;gBAC3D,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,YAAY,CAAC;YAC9B,KAAK,mBAAW,CAAC,UAAU,CAAC,CAAC;gBAC3B,MAAM,UAAU,GAAoC,OAA0C,CAAC;gBAC/F,kDAAkD;gBAClD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;gBACtC,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,QAAQ,CAAC,CAAC;gBACzB,MAAM,WAAW,GAAgB,OAAsB,CAAC;gBACxD,IAAI,OAAO,CAAC,WAAW,EAAE;oBACvB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;iBACxB;qBAAM;oBACL,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBACnB;gBACD,IAAI,OAAO,CAAC,WAAW,EAAE;oBACvB,MAAM,IAAI,GAAW,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAChE,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC7C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;iBAChD;qBAAM;oBACL,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAChC;gBACD,IAAI,OAAO,CAAC,WAAW,EAAE;oBACvB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;iBACzB;qBAAM;oBACL,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBACnB;gBACD,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,OAAO,CAAC,CAAC;gBACxB,MAAM,UAAU,GAAe,OAAqB,CAAC;gBACrD,IAAI,UAAU,CAAC,eAAe,EAAE;oBAC9B,IAAI,CAAC,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;iBAC3D;qBAAM,IAAI,UAAU,CAAC,cAAc,EAAE;oBACpC,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;iBAC1D;qBAAM,IAAI,UAAU,CAAC,QAAQ,EAAE;oBAC9B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;iBACnD;gBACD,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,SAAS,CAAC,CAAC;gBAC1B,MAAM,YAAY,GAAiB,OAAuB,CAAC;gBAC3D,MAAM,gBAAgB,GAAiB,yBAAiB,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBAC7F,IAAI,OAAO,CAAC,WAAW,EAAE;oBACvB,IAAI,eAAe,EAAE;wBACnB,mGAAmG;wBACnG,8FAA8F;wBAC9F,2FAA2F;wBAC3F,kEAAkE;wBAClE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;4BACxC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;wBACnD,CAAC,CAAC,CAAC;qBACJ;yBAAM;wBACL,4GAA4G;wBAC5G,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;qBAClD;iBACF;qBAAM;oBACL,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBACjD,MAAM,CAAC,aAAa,EAAE,CAAC;oBACvB,MAAM,CAAC,SAAS,EAAE,CAAC;iBACpB;gBACD,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,UAAU,CAAC,CAAC;gBAC3B,MAAM,aAAa,GAAkB,OAAwB,CAAC;gBAC9D,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACxB,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,OAAO,CAAC,CAAC;gBACxB,MAAM,UAAU,GAAe,OAAqB,CAAC;gBACrD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC3C,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE;oBAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBACnB;gBACD,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,WAAW,CAAC,CAAC;gBAC5B,MAAM,cAAc,GAAmB,OAAyB,CAAC;gBACjE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,SAAS,CAAC,CAAC;gBAC1B,MAAM,YAAY,GAAiB,OAAuB,CAAC;gBAC3D,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,SAAS,CAAC,CAAC;gBAC1B,MAAM;aACP;YACD,KAAK,mBAAW,CAAC,QAAQ,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAgB,OAAsB,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC1D,MAAM;aACP;YACD;gBACE,MAAM,IAAI,iCAAa,CAAC,gCAAgC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5E;IACH,CAAC;IAED,eAAe;IACL,+BAA+B,CAAC,UAAsB,EAAE,OAAgC;QAChG,oEAAoE;QACpE,MAAM,IAAI,iCAAa,CAAC,mCAAmC,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe;IACL,8BAA8B,CAAC,UAAsB,EAAE,OAAgC;QAC/F,MAAM,QAAQ,GACZ,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,cAAe,CAAC;QAEvF,MAAM,eAAe,GAAW,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QAEnF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,cAAe,GAAG,CAAC,CAAC;IAC3D,CAAC;IAES,cAAc,CAAC,IAAY,EAAE,OAAgC;QACrE,MAAM,MAAM,GAAmB,OAAO,CAAC,MAAM,CAAC;QAE9C,qEAAqE;QACrE,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAE9D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;QAEnD,MAAM,MAAM,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,QAAQ,MAAM,CAAC,iBAAiB,EAAE,EAAE;gBAClC,KAAK,EAAE,CAAC;gBACR,KAAK,IAAI,CAAC;gBACV,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACN,uBAAuB;oBACvB,MAAM;gBACR;oBACE,uDAAuD;oBACvD,qDAAqD;oBACrD,qEAAqE;oBACrE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACzB,MAAM;aACT;YAED,IAAI,OAAO,CAAC,aAAa,EAAE;gBACzB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACrB;YACD,IAAI,OAAO,CAAC,eAAe,EAAE;gBAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACrB;YAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1C,IAAI,OAAO,CAAC,eAAe,EAAE;gBAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACtB;YACD,IAAI,OAAO,CAAC,aAAa,EAAE;gBACzB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACtB;SACF;QAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;IACtD,CAAC;IAES,UAAU,CAAC,QAAgC,EAAE,OAAgC;QACrF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACvD;IACH,CAAC;CACF;AAzOD,0CAyOC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport {\n DocNode,\n DocNodeKind,\n StringBuilder,\n DocPlainText,\n DocHtmlStartTag,\n DocHtmlEndTag,\n DocCodeSpan,\n DocLinkTag,\n DocParagraph,\n DocFencedCode,\n DocSection,\n DocNodeTransforms,\n DocEscapedText,\n DocErrorText,\n DocBlockTag\n} from '@microsoft/tsdoc';\nimport { InternalError } from '@rushstack/node-core-library';\n\nimport { IndentedWriter } from '../utils/IndentedWriter';\n\nexport interface IMarkdownEmitterOptions {}\n\nexport interface IMarkdownEmitterContext<TOptions = IMarkdownEmitterOptions> {\n writer: IndentedWriter;\n insideTable: boolean;\n\n boldRequested: boolean;\n italicRequested: boolean;\n\n writingBold: boolean;\n writingItalic: boolean;\n\n options: TOptions;\n}\n\n/**\n * Renders MarkupElement content in the Markdown file format.\n * For more info: https://en.wikipedia.org/wiki/Markdown\n */\nexport class MarkdownEmitter {\n public emit(stringBuilder: StringBuilder, docNode: DocNode, options: IMarkdownEmitterOptions): string {\n const writer: IndentedWriter = new IndentedWriter(stringBuilder);\n\n const context: IMarkdownEmitterContext = {\n writer,\n insideTable: false,\n\n boldRequested: false,\n italicRequested: false,\n\n writingBold: false,\n writingItalic: false,\n\n options\n };\n\n this.writeNode(docNode, context, false);\n\n writer.ensureNewLine(); // finish the last line\n\n return writer.toString();\n }\n\n protected getEscapedText(text: string): string {\n const textWithBackslashes: string = text\n .replace(/\\\\/g, '\\\\\\\\') // first replace the escape character\n .replace(/[*#[\\]_|`~]/g, (x) => '\\\\' + x) // then escape any special characters\n .replace(/---/g, '\\\\-\\\\-\\\\-') // hyphens only if it's 3 or more\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n return textWithBackslashes;\n }\n\n protected getTableEscapedText(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\\|/g, '&#124;');\n }\n\n /**\n * @virtual\n */\n protected writeNode(docNode: DocNode, context: IMarkdownEmitterContext, docNodeSiblings: boolean): void {\n const writer: IndentedWriter = context.writer;\n\n switch (docNode.kind) {\n case DocNodeKind.PlainText: {\n const docPlainText: DocPlainText = docNode as DocPlainText;\n this.writePlainText(docPlainText.text, context);\n break;\n }\n case DocNodeKind.HtmlStartTag:\n case DocNodeKind.HtmlEndTag: {\n const docHtmlTag: DocHtmlStartTag | DocHtmlEndTag = docNode as DocHtmlStartTag | DocHtmlEndTag;\n // write the HTML element verbatim into the output\n writer.write(docHtmlTag.emitAsHtml());\n break;\n }\n case DocNodeKind.CodeSpan: {\n const docCodeSpan: DocCodeSpan = docNode as DocCodeSpan;\n if (context.insideTable) {\n writer.write('<code>');\n } else {\n writer.write('`');\n }\n if (context.insideTable) {\n const code: string = this.getTableEscapedText(docCodeSpan.code);\n const parts: string[] = code.split(/\\r?\\n/g);\n writer.write(parts.join('</code><br/><code>'));\n } else {\n writer.write(docCodeSpan.code);\n }\n if (context.insideTable) {\n writer.write('</code>');\n } else {\n writer.write('`');\n }\n break;\n }\n case DocNodeKind.LinkTag: {\n const docLinkTag: DocLinkTag = docNode as DocLinkTag;\n if (docLinkTag.codeDestination) {\n this.writeLinkTagWithCodeDestination(docLinkTag, context);\n } else if (docLinkTag.urlDestination) {\n this.writeLinkTagWithUrlDestination(docLinkTag, context);\n } else if (docLinkTag.linkText) {\n this.writePlainText(docLinkTag.linkText, context);\n }\n break;\n }\n case DocNodeKind.Paragraph: {\n const docParagraph: DocParagraph = docNode as DocParagraph;\n const trimmedParagraph: DocParagraph = DocNodeTransforms.trimSpacesInParagraph(docParagraph);\n if (context.insideTable) {\n if (docNodeSiblings) {\n // This tentative write is necessary to avoid writing empty paragraph tags (i.e. `<p></p>`). At the\n // time this code runs, we do not know whether the `writeNodes` call below will actually write\n // anything. Thus, we want to only write a `<p>` tag (as well as eventually a corresponding\n // `</p>` tag) if something ends up being written within the tags.\n writer.writeTentative('<p>', '</p>', () => {\n this.writeNodes(trimmedParagraph.nodes, context);\n });\n } else {\n // Special case: If we are the only element inside this table cell, then we can omit the <p></p> container.\n this.writeNodes(trimmedParagraph.nodes, context);\n }\n } else {\n this.writeNodes(trimmedParagraph.nodes, context);\n writer.ensureNewLine();\n writer.writeLine();\n }\n break;\n }\n case DocNodeKind.FencedCode: {\n const docFencedCode: DocFencedCode = docNode as DocFencedCode;\n writer.ensureNewLine();\n writer.write('```');\n writer.write(docFencedCode.language);\n writer.writeLine();\n writer.write(docFencedCode.code);\n writer.ensureNewLine();\n writer.writeLine('```');\n break;\n }\n case DocNodeKind.Section: {\n const docSection: DocSection = docNode as DocSection;\n this.writeNodes(docSection.nodes, context);\n break;\n }\n case DocNodeKind.SoftBreak: {\n if (!/^\\s?$/.test(writer.peekLastCharacter())) {\n writer.write(' ');\n }\n break;\n }\n case DocNodeKind.EscapedText: {\n const docEscapedText: DocEscapedText = docNode as DocEscapedText;\n this.writePlainText(docEscapedText.decodedText, context);\n break;\n }\n case DocNodeKind.ErrorText: {\n const docErrorText: DocErrorText = docNode as DocErrorText;\n this.writePlainText(docErrorText.text, context);\n break;\n }\n case DocNodeKind.InlineTag: {\n break;\n }\n case DocNodeKind.BlockTag: {\n const tagNode: DocBlockTag = docNode as DocBlockTag;\n console.warn('Unsupported block tag: ' + tagNode.tagName);\n break;\n }\n default:\n throw new InternalError('Unsupported DocNodeKind kind: ' + docNode.kind);\n }\n }\n\n /** @virtual */\n protected writeLinkTagWithCodeDestination(docLinkTag: DocLinkTag, context: IMarkdownEmitterContext): void {\n // The subclass needs to implement this to support code destinations\n throw new InternalError('writeLinkTagWithCodeDestination()');\n }\n\n /** @virtual */\n protected writeLinkTagWithUrlDestination(docLinkTag: DocLinkTag, context: IMarkdownEmitterContext): void {\n const linkText: string =\n docLinkTag.linkText !== undefined ? docLinkTag.linkText : docLinkTag.urlDestination!;\n\n const encodedLinkText: string = this.getEscapedText(linkText.replace(/\\s+/g, ' '));\n\n context.writer.write('[');\n context.writer.write(encodedLinkText);\n context.writer.write(`](${docLinkTag.urlDestination!})`);\n }\n\n protected writePlainText(text: string, context: IMarkdownEmitterContext): void {\n const writer: IndentedWriter = context.writer;\n\n // split out the [ leading whitespace, content, trailing whitespace ]\n const parts: string[] = text.match(/^(\\s*)(.*?)(\\s*)$/) || [];\n\n writer.write(parts[1]); // write leading whitespace\n\n const middle: string = parts[2];\n\n if (middle !== '') {\n switch (writer.peekLastCharacter()) {\n case '':\n case '\\n':\n case ' ':\n case '[':\n case '>':\n // okay to put a symbol\n break;\n default:\n // This is no problem: \"**one** *two* **three**\"\n // But this is trouble: \"**one***two***three**\"\n // The most general solution: \"**one**<!-- -->*two*<!-- -->**three**\"\n writer.write('<!-- -->');\n break;\n }\n\n if (context.boldRequested) {\n writer.write('<b>');\n }\n if (context.italicRequested) {\n writer.write('<i>');\n }\n\n writer.write(this.getEscapedText(middle));\n\n if (context.italicRequested) {\n writer.write('</i>');\n }\n if (context.boldRequested) {\n writer.write('</b>');\n }\n }\n\n writer.write(parts[3]); // write trailing whitespace\n }\n\n protected writeNodes(docNodes: ReadonlyArray<DocNode>, context: IMarkdownEmitterContext): void {\n for (const docNode of docNodes) {\n this.writeNode(docNode, context, docNodes.length > 1);\n }\n }\n}\n"]}
@@ -38,6 +38,8 @@ export declare class IndentedWriter {
38
38
  private _atStartOfLine;
39
39
  private readonly _indentStack;
40
40
  private _indentText;
41
+ private _beforeStack;
42
+ private _isWritingBeforeStack;
41
43
  constructor(builder?: IStringBuilder);
42
44
  /**
43
45
  * Retrieves the output that was built so far.
@@ -79,6 +81,13 @@ export declare class IndentedWriter {
79
81
  * have been written yet.
80
82
  */
81
83
  peekSecondLastCharacter(): string;
84
+ /**
85
+ * Writes `before` and `after` messages if and only if `mayWrite` writes anything.
86
+ *
87
+ * If `mayWrite` writes "CONTENT", this method will write "<before>CONTENT<after>".
88
+ * If `mayWrite` writes nothing, this method will write nothing.
89
+ */
90
+ writeTentative(before: string, after: string, mayWrite: () => void): void;
82
91
  /**
83
92
  * Writes some text to the internal string buffer, applying indentation according
84
93
  * to the current indentation level. If the string contains multiple newlines,
@@ -96,6 +105,11 @@ export declare class IndentedWriter {
96
105
  private _writeLinePart;
97
106
  private _writeNewLine;
98
107
  private _write;
108
+ /**
109
+ * Writes all messages in our before stack, processing them in FIFO order. This stack is
110
+ * populated by the `writeTentative` method.
111
+ */
112
+ private _writeBeforeStack;
99
113
  private _updateIndentText;
100
114
  }
101
115
  //# sourceMappingURL=IndentedWriter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IndentedWriter.d.ts","sourceRoot":"","sources":["../../src/utils/IndentedWriter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAc;IACzB;;;OAGG;IACI,mBAAmB,EAAE,MAAM,CAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,WAAW,CAAS;gBAET,OAAO,CAAC,EAAE,cAAc;IAW3C;;OAEG;IACI,OAAO,IAAI,MAAM;IAIjB,QAAQ,IAAI,MAAM;IAIzB;;;;;;OAMG;IACI,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlD;;;OAGG;IACI,cAAc,IAAI,IAAI;IAK7B;;;OAGG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAMlE;;OAEG;IACI,aAAa,IAAI,IAAI;IAO5B;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAWhC;;OAEG;IACI,iBAAiB,IAAI,MAAM;IAOlC;;;OAGG;IACI,uBAAuB,IAAI,MAAM;IAYxC;;;;OAIG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAyBnC;;;OAGG;IACI,SAAS,CAAC,OAAO,GAAE,MAAW,GAAG,IAAI;IAO5C;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,iBAAiB;CAG1B"}
1
+ {"version":3,"file":"IndentedWriter.d.ts","sourceRoot":"","sources":["../../src/utils/IndentedWriter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAc;IACzB;;;OAGG;IACI,mBAAmB,EAAE,MAAM,CAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,qBAAqB,CAAU;gBAEpB,OAAO,CAAC,EAAE,cAAc;IAc3C;;OAEG;IACI,OAAO,IAAI,MAAM;IAIjB,QAAQ,IAAI,MAAM;IAIzB;;;;;;OAMG;IACI,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlD;;;OAGG;IACI,cAAc,IAAI,IAAI;IAK7B;;;OAGG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAMlE;;OAEG;IACI,aAAa,IAAI,IAAI;IAO5B;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAWhC;;OAEG;IACI,iBAAiB,IAAI,MAAM;IAOlC;;;OAGG;IACI,uBAAuB,IAAI,MAAM;IAYxC;;;;;OAKG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAkBhF;;;;OAIG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA6BnC;;;OAGG;IACI,SAAS,CAAC,OAAO,GAAE,MAAW,GAAG,IAAI;IAU5C;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,MAAM;IAMd;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,iBAAiB;CAG1B"}
@@ -44,6 +44,8 @@ class IndentedWriter {
44
44
  this._atStartOfLine = true;
45
45
  this._indentStack = [];
46
46
  this._indentText = '';
47
+ this._beforeStack = [];
48
+ this._isWritingBeforeStack = false;
47
49
  }
48
50
  /**
49
51
  * Retrieves the output that was built so far.
@@ -127,6 +129,28 @@ class IndentedWriter {
127
129
  }
128
130
  return '';
129
131
  }
132
+ /**
133
+ * Writes `before` and `after` messages if and only if `mayWrite` writes anything.
134
+ *
135
+ * If `mayWrite` writes "CONTENT", this method will write "<before>CONTENT<after>".
136
+ * If `mayWrite` writes nothing, this method will write nothing.
137
+ */
138
+ writeTentative(before, after, mayWrite) {
139
+ this._beforeStack.push(before);
140
+ // If this function writes anything, then _all_ messages in the "before stack" will also be
141
+ // written. This means that the stack will be empty (as when we write a message from the stack,
142
+ // we remove it from the stack).
143
+ mayWrite();
144
+ // If the stack is not empty, it means that `mayWrite` didn't write anything. Pop the last-
145
+ // added message from the stack, we'll never write it. Otherwise, if the stack is empty, then
146
+ // write the "after" message.
147
+ if (this._beforeStack.length > 0) {
148
+ this._beforeStack.pop();
149
+ }
150
+ else {
151
+ this.write(after);
152
+ }
153
+ }
130
154
  /**
131
155
  * Writes some text to the internal string buffer, applying indentation according
132
156
  * to the current indentation level. If the string contains multiple newlines,
@@ -136,6 +160,9 @@ class IndentedWriter {
136
160
  if (message.length === 0) {
137
161
  return;
138
162
  }
163
+ if (!this._isWritingBeforeStack) {
164
+ this._writeBeforeStack();
165
+ }
139
166
  // If there are no newline characters, then append the string verbatim
140
167
  if (!/[\r\n]/.test(message)) {
141
168
  this._writeLinePart(message);
@@ -163,6 +190,9 @@ class IndentedWriter {
163
190
  if (message.length > 0) {
164
191
  this.write(message);
165
192
  }
193
+ else if (!this._isWritingBeforeStack) {
194
+ this._writeBeforeStack();
195
+ }
166
196
  this._writeNewLine();
167
197
  }
168
198
  /**
@@ -189,6 +219,18 @@ class IndentedWriter {
189
219
  this._latestChunk = s;
190
220
  this._builder.append(s);
191
221
  }
222
+ /**
223
+ * Writes all messages in our before stack, processing them in FIFO order. This stack is
224
+ * populated by the `writeTentative` method.
225
+ */
226
+ _writeBeforeStack() {
227
+ this._isWritingBeforeStack = true;
228
+ for (const message of this._beforeStack) {
229
+ this.write(message);
230
+ }
231
+ this._isWritingBeforeStack = false;
232
+ this._beforeStack = [];
233
+ }
192
234
  _updateIndentText() {
193
235
  this._indentText = this._indentStack.join('');
194
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IndentedWriter.js","sourceRoot":"","sources":["../../src/utils/IndentedWriter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { StringBuilder, IStringBuilder } from '@rushstack/node-core-library';\n\n/**\n * A utility for writing indented text.\n *\n * @remarks\n *\n * Note that the indentation is inserted at the last possible opportunity.\n * For example, this code...\n *\n * ```ts\n * writer.write('begin\\n');\n * writer.increaseIndent();\n * writer.write('one\\ntwo\\n');\n * writer.decreaseIndent();\n * writer.increaseIndent();\n * writer.decreaseIndent();\n * writer.write('end');\n * ```\n *\n * ...would produce this output:\n *\n * ```\n * begin\n * one\n * two\n * end\n * ```\n */\nexport class IndentedWriter {\n /**\n * The text characters used to create one level of indentation.\n * Two spaces by default.\n */\n public defaultIndentPrefix: string = ' ';\n\n private readonly _builder: IStringBuilder;\n\n private _latestChunk: string | undefined;\n private _previousChunk: string | undefined;\n private _atStartOfLine: boolean;\n\n private readonly _indentStack: string[];\n private _indentText: string;\n\n public constructor(builder?: IStringBuilder) {\n this._builder = builder === undefined ? new StringBuilder() : builder;\n\n this._latestChunk = undefined;\n this._previousChunk = undefined;\n this._atStartOfLine = true;\n\n this._indentStack = [];\n this._indentText = '';\n }\n\n /**\n * Retrieves the output that was built so far.\n */\n public getText(): string {\n return this._builder.toString();\n }\n\n public toString(): string {\n return this.getText();\n }\n\n /**\n * Increases the indentation. Normally the indentation is two spaces,\n * however an arbitrary prefix can optional be specified. (For example,\n * the prefix could be \"// \" to indent and comment simultaneously.)\n * Each call to IndentedWriter.increaseIndent() must be followed by a\n * corresponding call to IndentedWriter.decreaseIndent().\n */\n public increaseIndent(indentPrefix?: string): void {\n this._indentStack.push(indentPrefix !== undefined ? indentPrefix : this.defaultIndentPrefix);\n this._updateIndentText();\n }\n\n /**\n * Decreases the indentation, reverting the effect of the corresponding call\n * to IndentedWriter.increaseIndent().\n */\n public decreaseIndent(): void {\n this._indentStack.pop();\n this._updateIndentText();\n }\n\n /**\n * A shorthand for ensuring that increaseIndent()/decreaseIndent() occur\n * in pairs.\n */\n public indentScope(scope: () => void, indentPrefix?: string): void {\n this.increaseIndent(indentPrefix);\n scope();\n this.decreaseIndent();\n }\n\n /**\n * Adds a newline if the file pointer is not already at the start of the line (or start of the stream).\n */\n public ensureNewLine(): void {\n const lastCharacter: string = this.peekLastCharacter();\n if (lastCharacter !== '\\n' && lastCharacter !== '') {\n this._writeNewLine();\n }\n }\n\n /**\n * Adds up to two newlines to ensure that there is a blank line above the current line.\n */\n public ensureSkippedLine(): void {\n if (this.peekLastCharacter() !== '\\n') {\n this._writeNewLine();\n }\n\n const secondLastCharacter: string = this.peekSecondLastCharacter();\n if (secondLastCharacter !== '\\n' && secondLastCharacter !== '') {\n this._writeNewLine();\n }\n }\n\n /**\n * Returns the last character that was written, or an empty string if no characters have been written yet.\n */\n public peekLastCharacter(): string {\n if (this._latestChunk !== undefined) {\n return this._latestChunk.substr(-1, 1);\n }\n return '';\n }\n\n /**\n * Returns the second to last character that was written, or an empty string if less than one characters\n * have been written yet.\n */\n public peekSecondLastCharacter(): string {\n if (this._latestChunk !== undefined) {\n if (this._latestChunk.length > 1) {\n return this._latestChunk.substr(-2, 1);\n }\n if (this._previousChunk !== undefined) {\n return this._previousChunk.substr(-1, 1);\n }\n }\n return '';\n }\n\n /**\n * Writes some text to the internal string buffer, applying indentation according\n * to the current indentation level. If the string contains multiple newlines,\n * each line will be indented separately.\n */\n public write(message: string): void {\n if (message.length === 0) {\n return;\n }\n\n // If there are no newline characters, then append the string verbatim\n if (!/[\\r\\n]/.test(message)) {\n this._writeLinePart(message);\n return;\n }\n\n // Otherwise split the lines and write each one individually\n let first: boolean = true;\n for (const linePart of message.split('\\n')) {\n if (!first) {\n this._writeNewLine();\n } else {\n first = false;\n }\n if (linePart) {\n this._writeLinePart(linePart.replace(/[\\r]/g, ''));\n }\n }\n }\n\n /**\n * A shorthand for writing an optional message, followed by a newline.\n * Indentation is applied following the semantics of IndentedWriter.write().\n */\n public writeLine(message: string = ''): void {\n if (message.length > 0) {\n this.write(message);\n }\n this._writeNewLine();\n }\n\n /**\n * Writes a string that does not contain any newline characters.\n */\n private _writeLinePart(message: string): void {\n if (message.length > 0) {\n if (this._atStartOfLine && this._indentText.length > 0) {\n this._write(this._indentText);\n }\n this._write(message);\n this._atStartOfLine = false;\n }\n }\n\n private _writeNewLine(): void {\n if (this._atStartOfLine && this._indentText.length > 0) {\n this._write(this._indentText);\n }\n\n this._write('\\n');\n this._atStartOfLine = true;\n }\n\n private _write(s: string): void {\n this._previousChunk = this._latestChunk;\n this._latestChunk = s;\n this._builder.append(s);\n }\n\n private _updateIndentText(): void {\n this._indentText = this._indentStack.join('');\n }\n}\n"]}
1
+ {"version":3,"file":"IndentedWriter.js","sourceRoot":"","sources":["../../src/utils/IndentedWriter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { StringBuilder, IStringBuilder } from '@rushstack/node-core-library';\n\n/**\n * A utility for writing indented text.\n *\n * @remarks\n *\n * Note that the indentation is inserted at the last possible opportunity.\n * For example, this code...\n *\n * ```ts\n * writer.write('begin\\n');\n * writer.increaseIndent();\n * writer.write('one\\ntwo\\n');\n * writer.decreaseIndent();\n * writer.increaseIndent();\n * writer.decreaseIndent();\n * writer.write('end');\n * ```\n *\n * ...would produce this output:\n *\n * ```\n * begin\n * one\n * two\n * end\n * ```\n */\nexport class IndentedWriter {\n /**\n * The text characters used to create one level of indentation.\n * Two spaces by default.\n */\n public defaultIndentPrefix: string = ' ';\n\n private readonly _builder: IStringBuilder;\n\n private _latestChunk: string | undefined;\n private _previousChunk: string | undefined;\n private _atStartOfLine: boolean;\n\n private readonly _indentStack: string[];\n private _indentText: string;\n\n private _beforeStack: string[];\n private _isWritingBeforeStack: boolean;\n\n public constructor(builder?: IStringBuilder) {\n this._builder = builder === undefined ? new StringBuilder() : builder;\n\n this._latestChunk = undefined;\n this._previousChunk = undefined;\n this._atStartOfLine = true;\n\n this._indentStack = [];\n this._indentText = '';\n\n this._beforeStack = [];\n this._isWritingBeforeStack = false;\n }\n\n /**\n * Retrieves the output that was built so far.\n */\n public getText(): string {\n return this._builder.toString();\n }\n\n public toString(): string {\n return this.getText();\n }\n\n /**\n * Increases the indentation. Normally the indentation is two spaces,\n * however an arbitrary prefix can optional be specified. (For example,\n * the prefix could be \"// \" to indent and comment simultaneously.)\n * Each call to IndentedWriter.increaseIndent() must be followed by a\n * corresponding call to IndentedWriter.decreaseIndent().\n */\n public increaseIndent(indentPrefix?: string): void {\n this._indentStack.push(indentPrefix !== undefined ? indentPrefix : this.defaultIndentPrefix);\n this._updateIndentText();\n }\n\n /**\n * Decreases the indentation, reverting the effect of the corresponding call\n * to IndentedWriter.increaseIndent().\n */\n public decreaseIndent(): void {\n this._indentStack.pop();\n this._updateIndentText();\n }\n\n /**\n * A shorthand for ensuring that increaseIndent()/decreaseIndent() occur\n * in pairs.\n */\n public indentScope(scope: () => void, indentPrefix?: string): void {\n this.increaseIndent(indentPrefix);\n scope();\n this.decreaseIndent();\n }\n\n /**\n * Adds a newline if the file pointer is not already at the start of the line (or start of the stream).\n */\n public ensureNewLine(): void {\n const lastCharacter: string = this.peekLastCharacter();\n if (lastCharacter !== '\\n' && lastCharacter !== '') {\n this._writeNewLine();\n }\n }\n\n /**\n * Adds up to two newlines to ensure that there is a blank line above the current line.\n */\n public ensureSkippedLine(): void {\n if (this.peekLastCharacter() !== '\\n') {\n this._writeNewLine();\n }\n\n const secondLastCharacter: string = this.peekSecondLastCharacter();\n if (secondLastCharacter !== '\\n' && secondLastCharacter !== '') {\n this._writeNewLine();\n }\n }\n\n /**\n * Returns the last character that was written, or an empty string if no characters have been written yet.\n */\n public peekLastCharacter(): string {\n if (this._latestChunk !== undefined) {\n return this._latestChunk.substr(-1, 1);\n }\n return '';\n }\n\n /**\n * Returns the second to last character that was written, or an empty string if less than one characters\n * have been written yet.\n */\n public peekSecondLastCharacter(): string {\n if (this._latestChunk !== undefined) {\n if (this._latestChunk.length > 1) {\n return this._latestChunk.substr(-2, 1);\n }\n if (this._previousChunk !== undefined) {\n return this._previousChunk.substr(-1, 1);\n }\n }\n return '';\n }\n\n /**\n * Writes `before` and `after` messages if and only if `mayWrite` writes anything.\n *\n * If `mayWrite` writes \"CONTENT\", this method will write \"<before>CONTENT<after>\".\n * If `mayWrite` writes nothing, this method will write nothing.\n */\n public writeTentative(before: string, after: string, mayWrite: () => void): void {\n this._beforeStack.push(before);\n\n // If this function writes anything, then _all_ messages in the \"before stack\" will also be\n // written. This means that the stack will be empty (as when we write a message from the stack,\n // we remove it from the stack).\n mayWrite();\n\n // If the stack is not empty, it means that `mayWrite` didn't write anything. Pop the last-\n // added message from the stack, we'll never write it. Otherwise, if the stack is empty, then\n // write the \"after\" message.\n if (this._beforeStack.length > 0) {\n this._beforeStack.pop();\n } else {\n this.write(after);\n }\n }\n\n /**\n * Writes some text to the internal string buffer, applying indentation according\n * to the current indentation level. If the string contains multiple newlines,\n * each line will be indented separately.\n */\n public write(message: string): void {\n if (message.length === 0) {\n return;\n }\n\n if (!this._isWritingBeforeStack) {\n this._writeBeforeStack();\n }\n\n // If there are no newline characters, then append the string verbatim\n if (!/[\\r\\n]/.test(message)) {\n this._writeLinePart(message);\n return;\n }\n\n // Otherwise split the lines and write each one individually\n let first: boolean = true;\n for (const linePart of message.split('\\n')) {\n if (!first) {\n this._writeNewLine();\n } else {\n first = false;\n }\n if (linePart) {\n this._writeLinePart(linePart.replace(/[\\r]/g, ''));\n }\n }\n }\n\n /**\n * A shorthand for writing an optional message, followed by a newline.\n * Indentation is applied following the semantics of IndentedWriter.write().\n */\n public writeLine(message: string = ''): void {\n if (message.length > 0) {\n this.write(message);\n } else if (!this._isWritingBeforeStack) {\n this._writeBeforeStack();\n }\n\n this._writeNewLine();\n }\n\n /**\n * Writes a string that does not contain any newline characters.\n */\n private _writeLinePart(message: string): void {\n if (message.length > 0) {\n if (this._atStartOfLine && this._indentText.length > 0) {\n this._write(this._indentText);\n }\n this._write(message);\n this._atStartOfLine = false;\n }\n }\n\n private _writeNewLine(): void {\n if (this._atStartOfLine && this._indentText.length > 0) {\n this._write(this._indentText);\n }\n\n this._write('\\n');\n this._atStartOfLine = true;\n }\n\n private _write(s: string): void {\n this._previousChunk = this._latestChunk;\n this._latestChunk = s;\n this._builder.append(s);\n }\n\n /**\n * Writes all messages in our before stack, processing them in FIFO order. This stack is\n * populated by the `writeTentative` method.\n */\n private _writeBeforeStack(): void {\n this._isWritingBeforeStack = true;\n\n for (const message of this._beforeStack) {\n this.write(message);\n }\n\n this._isWritingBeforeStack = false;\n this._beforeStack = [];\n }\n\n private _updateIndentText(): void {\n this._indentText = this._indentStack.join('');\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/api-documenter",
3
- "version": "7.17.26",
3
+ "version": "7.18.0",
4
4
  "description": "Read JSON files from api-extractor, generate documentation pages",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,7 +15,7 @@
15
15
  "main": "lib/index.js",
16
16
  "typings": "dist/rollup.d.ts",
17
17
  "dependencies": {
18
- "@microsoft/api-extractor-model": "7.20.3",
18
+ "@microsoft/api-extractor-model": "7.21.0",
19
19
  "@microsoft/tsdoc": "0.14.1",
20
20
  "@rushstack/node-core-library": "3.49.0",
21
21
  "@rushstack/ts-command-line": "4.12.1",
@@ -25,8 +25,8 @@
25
25
  },
26
26
  "devDependencies": {
27
27
  "@rushstack/eslint-config": "2.6.2",
28
- "@rushstack/heft": "0.46.0",
29
- "@rushstack/heft-node-rig": "1.9.16",
28
+ "@rushstack/heft": "0.46.1",
29
+ "@rushstack/heft-node-rig": "1.9.17",
30
30
  "@types/heft-jest": "1.0.1",
31
31
  "@types/js-yaml": "3.12.1",
32
32
  "@types/node": "12.20.24",