@microsoft/api-documenter 7.23.38 → 7.24.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.
- package/lib/markdown/CustomMarkdownEmitter.d.ts.map +1 -1
- package/lib/markdown/CustomMarkdownEmitter.js +22 -17
- package/lib/markdown/CustomMarkdownEmitter.js.map +1 -1
- package/lib/markdown/MarkdownEmitter.d.ts +0 -1
- package/lib/markdown/MarkdownEmitter.d.ts.map +1 -1
- package/lib/markdown/MarkdownEmitter.js +6 -41
- package/lib/markdown/MarkdownEmitter.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomMarkdownEmitter.d.ts","sourceRoot":"","sources":["../../src/markdown/CustomMarkdownEmitter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAsC,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAS5G,OAAO,EACL,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;IAC5E,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;IAEpC,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CACnE;AAED,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,OAAO,CAAC,SAAS,CAAW;gBAET,QAAQ,EAAE,QAAQ;IAM9B,IAAI,CACT,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,6BAA6B,GACrC,MAAM;IAIT,gBAAgB;IAChB,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"CustomMarkdownEmitter.d.ts","sourceRoot":"","sources":["../../src/markdown/CustomMarkdownEmitter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAsC,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAS5G,OAAO,EACL,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;IAC5E,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;IAEpC,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CACnE;AAED,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,OAAO,CAAC,SAAS,CAAW;gBAET,QAAQ,EAAE,QAAQ;IAM9B,IAAI,CACT,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,6BAA6B,GACrC,MAAM;IAIT,gBAAgB;IAChB,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAkHvG,gBAAgB;IAChB,SAAS,CAAC,+BAA+B,CACvC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,uBAAuB,CAAC,6BAA6B,CAAC,GAC9D,IAAI;CAoCR"}
|
|
@@ -53,7 +53,6 @@ class CustomMarkdownEmitter extends MarkdownEmitter_1.MarkdownEmitter {
|
|
|
53
53
|
// GitHub's markdown renderer chokes on tables that don't have a blank line above them,
|
|
54
54
|
// whereas VS Code's renderer is totally fine with it.
|
|
55
55
|
writer.ensureSkippedLine();
|
|
56
|
-
context.insideTable = true;
|
|
57
56
|
// Markdown table rows can have inconsistent cell counts. Size the table based on the longest row.
|
|
58
57
|
let columnCount = 0;
|
|
59
58
|
if (docTable.header) {
|
|
@@ -64,36 +63,42 @@ class CustomMarkdownEmitter extends MarkdownEmitter_1.MarkdownEmitter {
|
|
|
64
63
|
columnCount = row.cells.length;
|
|
65
64
|
}
|
|
66
65
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
writer.write('<table>');
|
|
67
|
+
if (docTable.header) {
|
|
68
|
+
writer.write('<thead><tr>');
|
|
69
|
+
for (let i = 0; i < columnCount; ++i) {
|
|
70
|
+
writer.write('<th>');
|
|
71
|
+
writer.ensureNewLine();
|
|
72
|
+
writer.writeLine();
|
|
72
73
|
const cell = docTable.header.cells[i];
|
|
73
74
|
if (cell) {
|
|
74
75
|
this.writeNode(cell.content, context, false);
|
|
75
76
|
}
|
|
77
|
+
writer.ensureNewLine();
|
|
78
|
+
writer.writeLine();
|
|
79
|
+
writer.write('</th>');
|
|
76
80
|
}
|
|
77
|
-
writer.write('
|
|
78
|
-
}
|
|
79
|
-
writer.writeLine();
|
|
80
|
-
// write the divider
|
|
81
|
-
writer.write('| ');
|
|
82
|
-
for (let i = 0; i < columnCount; ++i) {
|
|
83
|
-
writer.write(' --- |');
|
|
81
|
+
writer.write('</tr></thead>');
|
|
84
82
|
}
|
|
85
83
|
writer.writeLine();
|
|
84
|
+
writer.write('<tbody>');
|
|
86
85
|
for (const row of docTable.rows) {
|
|
87
|
-
writer.write('
|
|
86
|
+
writer.write('<tr>');
|
|
88
87
|
for (const cell of row.cells) {
|
|
89
|
-
writer.write('
|
|
88
|
+
writer.write('<td>');
|
|
89
|
+
writer.ensureNewLine();
|
|
90
|
+
writer.writeLine();
|
|
90
91
|
this.writeNode(cell.content, context, false);
|
|
91
|
-
writer.
|
|
92
|
+
writer.ensureNewLine();
|
|
93
|
+
writer.writeLine();
|
|
94
|
+
writer.write('</td>');
|
|
92
95
|
}
|
|
96
|
+
writer.write('</tr>');
|
|
93
97
|
writer.writeLine();
|
|
94
98
|
}
|
|
99
|
+
writer.write('</tbody>');
|
|
100
|
+
writer.write('</table>');
|
|
95
101
|
writer.writeLine();
|
|
96
|
-
context.insideTable = false;
|
|
97
102
|
break;
|
|
98
103
|
}
|
|
99
104
|
case "EmphasisSpan" /* CustomDocNodeKind.EmphasisSpan */: {
|
|
@@ -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 type { DocNode, DocLinkTag, StringBuilder } from '@microsoft/tsdoc';\nimport type { ApiModel, IResolveDeclarationReferenceResult, ApiItem } from '@microsoft/api-extractor-model';\nimport { Colorize } from '@rushstack/terminal';\n\nimport { CustomDocNodeKind } from '../nodes/CustomDocNodeKind';\nimport type { DocHeading } from '../nodes/DocHeading';\nimport type { DocNoteBox } from '../nodes/DocNoteBox';\nimport type { DocTable } from '../nodes/DocTable';\nimport type { DocTableCell } from '../nodes/DocTableCell';\nimport type { DocEmphasisSpan } from '../nodes/DocEmphasisSpan';\nimport {\n MarkdownEmitter,\n type IMarkdownEmitterContext,\n type IMarkdownEmitterOptions\n} from './MarkdownEmitter';\nimport type { 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(Colorize.yellow('WARNING: Unable to determine link text'));\n }\n }\n } else if (result.errorMessage) {\n console.log(\n Colorize.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 type { DocNode, DocLinkTag, StringBuilder } from '@microsoft/tsdoc';\nimport type { ApiModel, IResolveDeclarationReferenceResult, ApiItem } from '@microsoft/api-extractor-model';\nimport { Colorize } from '@rushstack/terminal';\n\nimport { CustomDocNodeKind } from '../nodes/CustomDocNodeKind';\nimport type { DocHeading } from '../nodes/DocHeading';\nimport type { DocNoteBox } from '../nodes/DocNoteBox';\nimport type { DocTable } from '../nodes/DocTable';\nimport type { DocTableCell } from '../nodes/DocTableCell';\nimport type { DocEmphasisSpan } from '../nodes/DocEmphasisSpan';\nimport {\n MarkdownEmitter,\n type IMarkdownEmitterContext,\n type IMarkdownEmitterOptions\n} from './MarkdownEmitter';\nimport type { 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 // 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 writer.write('<table>');\n if (docTable.header) {\n writer.write('<thead><tr>');\n for (let i: number = 0; i < columnCount; ++i) {\n writer.write('<th>');\n writer.ensureNewLine();\n writer.writeLine();\n const cell: DocTableCell | undefined = docTable.header.cells[i];\n if (cell) {\n this.writeNode(cell.content, context, false);\n }\n writer.ensureNewLine();\n writer.writeLine();\n writer.write('</th>');\n }\n writer.write('</tr></thead>');\n }\n writer.writeLine();\n\n writer.write('<tbody>');\n for (const row of docTable.rows) {\n writer.write('<tr>');\n for (const cell of row.cells) {\n writer.write('<td>');\n writer.ensureNewLine();\n writer.writeLine();\n this.writeNode(cell.content, context, false);\n writer.ensureNewLine();\n writer.writeLine();\n writer.write('</td>');\n }\n writer.write('</tr>');\n writer.writeLine();\n }\n writer.write('</tbody>');\n writer.write('</table>');\n writer.writeLine();\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(Colorize.yellow('WARNING: Unable to determine link text'));\n }\n }\n } else if (result.errorMessage) {\n console.log(\n Colorize.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,KAAK,OAAO,EAEZ,KAAK,aAAa,EAKlB,KAAK,UAAU,EAQhB,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;
|
|
1
|
+
{"version":3,"file":"MarkdownEmitter.d.ts","sourceRoot":"","sources":["../../src/markdown/MarkdownEmitter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,aAAa,EAKlB,KAAK,UAAU,EAQhB,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;IAEvB,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;IAsBrG,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;IAwFvG,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"}
|
|
@@ -15,7 +15,6 @@ class MarkdownEmitter {
|
|
|
15
15
|
const writer = new IndentedWriter_1.IndentedWriter(stringBuilder);
|
|
16
16
|
const context = {
|
|
17
17
|
writer,
|
|
18
|
-
insideTable: false,
|
|
19
18
|
boldRequested: false,
|
|
20
19
|
italicRequested: false,
|
|
21
20
|
writingBold: false,
|
|
@@ -64,26 +63,9 @@ class MarkdownEmitter {
|
|
|
64
63
|
}
|
|
65
64
|
case tsdoc_1.DocNodeKind.CodeSpan: {
|
|
66
65
|
const docCodeSpan = docNode;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
else {
|
|
71
|
-
writer.write('`');
|
|
72
|
-
}
|
|
73
|
-
if (context.insideTable) {
|
|
74
|
-
const code = this.getTableEscapedText(docCodeSpan.code);
|
|
75
|
-
const parts = code.split(/\r?\n/g);
|
|
76
|
-
writer.write(parts.join('</code><br/><code>'));
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
writer.write(docCodeSpan.code);
|
|
80
|
-
}
|
|
81
|
-
if (context.insideTable) {
|
|
82
|
-
writer.write('</code>');
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
writer.write('`');
|
|
86
|
-
}
|
|
66
|
+
writer.write('`');
|
|
67
|
+
writer.write(docCodeSpan.code);
|
|
68
|
+
writer.write('`');
|
|
87
69
|
break;
|
|
88
70
|
}
|
|
89
71
|
case tsdoc_1.DocNodeKind.LinkTag: {
|
|
@@ -102,26 +84,9 @@ class MarkdownEmitter {
|
|
|
102
84
|
case tsdoc_1.DocNodeKind.Paragraph: {
|
|
103
85
|
const docParagraph = docNode;
|
|
104
86
|
const trimmedParagraph = tsdoc_1.DocNodeTransforms.trimSpacesInParagraph(docParagraph);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
});
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
// Special case: If we are the only element inside this table cell, then we can omit the <p></p> container.
|
|
117
|
-
this.writeNodes(trimmedParagraph.nodes, context);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this.writeNodes(trimmedParagraph.nodes, context);
|
|
122
|
-
writer.ensureNewLine();
|
|
123
|
-
writer.writeLine();
|
|
124
|
-
}
|
|
87
|
+
this.writeNodes(trimmedParagraph.nodes, context);
|
|
88
|
+
writer.ensureNewLine();
|
|
89
|
+
writer.writeLine();
|
|
125
90
|
break;
|
|
126
91
|
}
|
|
127
92
|
case tsdoc_1.DocNodeKind.FencedCode: {
|
|
@@ -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 type DocNode,\n DocNodeKind,\n type StringBuilder,\n type DocPlainText,\n type DocHtmlStartTag,\n type DocHtmlEndTag,\n type DocCodeSpan,\n type DocLinkTag,\n type DocParagraph,\n type DocFencedCode,\n type DocSection,\n DocNodeTransforms,\n type DocEscapedText,\n type DocErrorText,\n type 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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n return textWithBackslashes;\n }\n\n protected getTableEscapedText(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\\|/g, '|');\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('**');\n }\n if (context.italicRequested) {\n writer.write('_');\n }\n\n writer.write(this.getEscapedText(middle));\n\n if (context.italicRequested) {\n writer.write('_');\n }\n if (context.boldRequested) {\n writer.write('**');\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":"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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 type DocNode,\n DocNodeKind,\n type StringBuilder,\n type DocPlainText,\n type DocHtmlStartTag,\n type DocHtmlEndTag,\n type DocCodeSpan,\n type DocLinkTag,\n type DocParagraph,\n type DocFencedCode,\n type DocSection,\n DocNodeTransforms,\n type DocEscapedText,\n type DocErrorText,\n type 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\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\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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n return textWithBackslashes;\n }\n\n protected getTableEscapedText(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\\|/g, '|');\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 writer.write('`');\n writer.write(docCodeSpan.code);\n writer.write('`');\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\n this.writeNodes(trimmedParagraph.nodes, context);\n writer.ensureNewLine();\n writer.writeLine();\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('**');\n }\n if (context.italicRequested) {\n writer.write('_');\n }\n\n writer.write(this.getEscapedText(middle));\n\n if (context.italicRequested) {\n writer.write('_');\n }\n if (context.boldRequested) {\n writer.write('**');\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/api-documenter",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.24.0",
|
|
4
4
|
"description": "Read JSON files from api-extractor, generate documentation pages",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,16 +18,16 @@
|
|
|
18
18
|
"@microsoft/tsdoc": "0.14.2",
|
|
19
19
|
"js-yaml": "~3.13.1",
|
|
20
20
|
"resolve": "~1.22.1",
|
|
21
|
-
"@microsoft/api-extractor-model": "7.28.13",
|
|
22
21
|
"@rushstack/node-core-library": "4.0.2",
|
|
23
|
-
"@
|
|
24
|
-
"@rushstack/ts-command-line": "4.19.1"
|
|
22
|
+
"@microsoft/api-extractor-model": "7.28.13",
|
|
23
|
+
"@rushstack/ts-command-line": "4.19.1",
|
|
24
|
+
"@rushstack/terminal": "0.10.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/js-yaml": "3.12.1",
|
|
28
28
|
"@types/resolve": "1.20.2",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
29
|
+
"@rushstack/heft": "0.66.1",
|
|
30
|
+
"local-node-rig": "1.0.0"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "heft build --clean",
|