This commit is contained in:
2024-02-07 01:33:07 -05:00
commit c1af19d441
4088 changed files with 1260170 additions and 0 deletions

View File

@ -0,0 +1 @@
{"version":3,"file":"DocNodeTransforms.test.js","sourceRoot":"","sources":["../../src/__tests__/DocNodeTransforms.test.ts"],"names":[],"mappings":";;AAAA,wBAAgD;AAChD,+DAA8D;AAC9D,kCAA8D;AAC9D,qEAAoE;AAEpE,IAAI,CAAC,iCAAiC,EAAE;IACtC,IAAM,MAAM,GAAW;QACrB,KAAK;QACL,IAAI;QACJ,yBAAyB;QACzB,+BAA+B;QAC/B,4BAA4B;QAC5B,eAAe;QACf,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAM,WAAW,GAAgB,IAAI,eAAW,EAAE,CAAC;IACnD,IAAM,aAAa,GAAkB,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACrE,IAAM,SAAS,GAAY,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,SAAS,CAAC,CAAC;IACtD,IAAM,SAAS,GAAiB,SAAyB,CAAC;IAC1D,IAAM,oBAAoB,GAAiB,qCAAiB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC9F,MAAM,CAAC,yBAAW,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;AACjF,CAAC,CAAC,CAAC","sourcesContent":["import { ParserContext, TSDocParser } from '..';\r\nimport { TestHelpers } from '../parser/__tests__/TestHelpers';\r\nimport { DocParagraph, DocNode, DocNodeKind } from '../nodes';\r\nimport { DocNodeTransforms } from '../transforms/DocNodeTransforms';\r\n\r\ntest('01 trimSpacesInParagraphNodes()', () => {\r\n const buffer: string = [\r\n '/**',\r\n ' *',\r\n ' * This \\t is the',\r\n ' * first {@mylink}sentence.',\r\n ' * This is another',\r\n ' *sentence. ',\r\n ' */'\r\n ].join('\\n');\r\n\r\n const tsdocParser: TSDocParser = new TSDocParser();\r\n const parserContext: ParserContext = tsdocParser.parseString(buffer);\r\n const firstNode: DocNode = parserContext.docComment.summarySection.nodes[0];\r\n expect(firstNode.kind).toEqual(DocNodeKind.Paragraph);\r\n const paragraph: DocParagraph = firstNode as DocParagraph;\r\n const transformedParagraph: DocParagraph = DocNodeTransforms.trimSpacesInParagraph(paragraph);\r\n expect(TestHelpers.getDocNodeSnapshot(transformedParagraph)).toMatchSnapshot();\r\n});\r\n"]}

View File

@ -0,0 +1 @@
{"version":3,"file":"ParagraphSplitter.test.js","sourceRoot":"","sources":["../../src/__tests__/ParagraphSplitter.test.ts"],"names":[],"mappings":";;AAAA,+DAA8D;AAC9D,iEAAgE;AAChE,kCAA6F;AAC7F,0EAAyE;AAEzE,IAAI,CAAC,8BAA8B,EAAE;IACnC,yBAAW,CAAC,+BAA+B,CACzC;QACE,KAAK;QACL,QAAQ;QACR,gBAAgB;QAChB,qBAAqB;QACrB,YAAY;QACZ,MAAM;QACN,YAAY;QACZ,kCAAkC;QAClC,IAAI;QACJ,iCAAiC;QACjC,IAAI;QACJ,OAAO;QACP,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wCAAwC,EAAE;IAC7C,yBAAW,CAAC,+BAA+B,CACzC,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClG,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+BAA+B,EAAE;IACpC,yBAAW,CAAC,+BAA+B,CACzC,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE;IAC/C,IAAM,aAAa,GAAuB,IAAI,uCAAkB,EAAE,CAAC;IAEnE,IAAM,UAAU,GAAe,IAAI,kBAAU,CAAC,EAAE,aAAa,eAAA,EAAE,EAAE;QAC/D,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,EAAE;YAClC,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YACtD,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC;YACnC,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAChD,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC;YACnC,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAClD,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAChD,IAAI,mBAAW,CAAC,EAAE,aAAa,eAAA,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACtD,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YACtD,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC;YACnC,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC;YACnC,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SACxD,CAAC;QACF,+CAA+C;QAC/C,IAAI,oBAAY,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC;KACpC,CAAC,CAAC;IAEH,qCAAiB,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,CAAC,yBAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;AACvE,CAAC,CAAC,CAAC","sourcesContent":["import { TestHelpers } from '../parser/__tests__/TestHelpers';\r\nimport { ParagraphSplitter } from '../parser/ParagraphSplitter';\r\nimport { DocSection, DocPlainText, DocSoftBreak, DocParagraph, DocBlockTag } from '../index';\r\nimport { TSDocConfiguration } from '../configuration/TSDocConfiguration';\r\n\r\ntest('01 Basic paragraph splitting', () => {\r\n TestHelpers.parseAndMatchDocCommentSnapshot(\r\n [\r\n '/**',\r\n ' * ',\r\n ' * This is the',\r\n ' * first paragraph.',\r\n ' * \\t ',\r\n ' * ',\r\n ' * \\t ',\r\n ' * This is the second paragraph.',\r\n ' *',\r\n ' * This is the third paragraph.',\r\n ' *',\r\n ' * ',\r\n ' */'\r\n ].join('\\n')\r\n );\r\n});\r\n\r\ntest('02 Basic paragraph splitting in blocks', () => {\r\n TestHelpers.parseAndMatchDocCommentSnapshot(\r\n ['/**', ' * P1', ' * @remarks P2', ' *', ' * P3 @deprecated P4', ' *', ' * P5', ' */'].join('\\n')\r\n );\r\n});\r\n\r\ntest('03 Degenerate comment framing', () => {\r\n TestHelpers.parseAndMatchDocCommentSnapshot(\r\n ['/** line 1', ' * line 2', '', ' * @public line 3*/'].join('\\n')\r\n );\r\n});\r\n\r\ntest('04 Degenerate manually constructed nodes', () => {\r\n const configuration: TSDocConfiguration = new TSDocConfiguration();\r\n\r\n const docSection: DocSection = new DocSection({ configuration }, [\r\n new DocParagraph({ configuration }, [\r\n new DocPlainText({ configuration, text: ' para 1 ' }),\r\n new DocSoftBreak({ configuration }),\r\n new DocPlainText({ configuration, text: ' ' }),\r\n new DocSoftBreak({ configuration }),\r\n new DocPlainText({ configuration, text: ' \\t ' }),\r\n new DocPlainText({ configuration, text: ' ' }),\r\n new DocBlockTag({ configuration, tagName: '@public' }),\r\n new DocPlainText({ configuration, text: ' para 2 ' }),\r\n new DocSoftBreak({ configuration }),\r\n new DocSoftBreak({ configuration }),\r\n new DocPlainText({ configuration, text: ' para 3 ' })\r\n ]),\r\n // Currently we do not discard empty paragraphs\r\n new DocParagraph({ configuration })\r\n ]);\r\n\r\n ParagraphSplitter.splitParagraphsForSection(docSection);\r\n expect(TestHelpers.getDocNodeSnapshot(docSection)).toMatchSnapshot();\r\n});\r\n"]}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,200 @@
/**
* Represents a reference to a declaration.
* @beta
*/
export declare class DeclarationReference {
private _source;
private _navigation;
private _symbol;
constructor(source?: ModuleSource | GlobalSource, navigation?: Navigation.Locals | Navigation.Exports, symbol?: SymbolReference);
get source(): ModuleSource | GlobalSource | undefined;
get navigation(): Navigation.Locals | Navigation.Exports | undefined;
get symbol(): SymbolReference | undefined;
get isEmpty(): boolean;
static parse(text: string): DeclarationReference;
static parseComponent(text: string): Component;
/**
* Determines whether the provided string is a well-formed symbol navigation component string.
*/
static isWellFormedComponentString(text: string): boolean;
/**
* Escapes a string for use as a symbol navigation component. If the string contains any of `!.#~:,"{}()@` or starts
* with `[`, it is enclosed in quotes.
*/
static escapeComponentString(text: string): string;
/**
* Unescapes a string used as a symbol navigation component.
*/
static unescapeComponentString(text: string): string;
/**
* Determines whether the provided string is a well-formed module source string. The string may not
* have a trailing `!` character.
*/
static isWellFormedModuleSourceString(text: string): boolean;
/**
* Escapes a string for use as a module source. If the string contains any of `!"` it is enclosed in quotes.
*/
static escapeModuleSourceString(text: string): string;
/**
* Unescapes a string used as a module source. The string may not have a trailing `!` character.
*/
static unescapeModuleSourceString(text: string): string;
static empty(): DeclarationReference;
static package(packageName: string, importPath?: string): DeclarationReference;
static module(path: string, userEscaped?: boolean): DeclarationReference;
static global(): DeclarationReference;
static from(base: DeclarationReference | undefined): DeclarationReference;
withSource(source: ModuleSource | GlobalSource | undefined): DeclarationReference;
withNavigation(navigation: Navigation.Locals | Navigation.Exports | undefined): DeclarationReference;
withSymbol(symbol: SymbolReference | undefined): DeclarationReference;
withComponentPath(componentPath: ComponentPath): DeclarationReference;
withMeaning(meaning: Meaning | undefined): DeclarationReference;
withOverloadIndex(overloadIndex: number | undefined): DeclarationReference;
addNavigationStep(navigation: Navigation, component: ComponentLike): DeclarationReference;
toString(): string;
}
/**
* Indicates the symbol table from which to resolve the next symbol component.
* @beta
*/
export declare const enum Navigation {
Exports = ".",
Members = "#",
Locals = "~"
}
/**
* Represents a module.
* @beta
*/
export declare class ModuleSource {
readonly escapedPath: string;
private _path;
private _pathComponents;
constructor(path: string, userEscaped?: boolean);
get path(): string;
get packageName(): string;
get scopeName(): string;
get unscopedPackageName(): string;
get importPath(): string;
static fromScopedPackage(scopeName: string | undefined, unscopedPackageName: string, importPath?: string): ModuleSource;
static fromPackage(packageName: string, importPath?: string): ModuleSource;
private static _fromPackageName;
toString(): string;
private _getOrParsePathComponents;
}
/**
* Represents the global scope.
* @beta
*/
export declare class GlobalSource {
static readonly instance: GlobalSource;
private constructor();
toString(): string;
}
/**
* @beta
*/
export declare type Component = ComponentString | ComponentReference;
/**
* @beta
*/
export declare namespace Component {
function from(value: ComponentLike): Component;
}
/**
* @beta
*/
export declare type ComponentLike = Component | DeclarationReference | string;
/**
* @beta
*/
export declare class ComponentString {
readonly text: string;
constructor(text: string, userEscaped?: boolean);
toString(): string;
}
/**
* @beta
*/
export declare class ComponentReference {
readonly reference: DeclarationReference;
constructor(reference: DeclarationReference);
static parse(text: string): ComponentReference;
withReference(reference: DeclarationReference): ComponentReference;
toString(): string;
}
/**
* @beta
*/
export declare type ComponentPath = ComponentRoot | ComponentNavigation;
/**
* @beta
*/
export declare abstract class ComponentPathBase {
readonly component: Component;
constructor(component: Component);
addNavigationStep(this: ComponentPath, navigation: Navigation, component: ComponentLike): ComponentPath;
abstract toString(): string;
}
/**
* @beta
*/
export declare class ComponentRoot extends ComponentPathBase {
withComponent(component: ComponentLike): ComponentRoot;
toString(): string;
}
/**
* @beta
*/
export declare class ComponentNavigation extends ComponentPathBase {
readonly parent: ComponentPath;
readonly navigation: Navigation;
constructor(parent: ComponentPath, navigation: Navigation, component: Component);
withParent(parent: ComponentPath): ComponentNavigation;
withNavigation(navigation: Navigation): ComponentNavigation;
withComponent(component: ComponentLike): ComponentNavigation;
toString(): string;
}
/**
* @beta
*/
export declare const enum Meaning {
Class = "class",
Interface = "interface",
TypeAlias = "type",
Enum = "enum",
Namespace = "namespace",
Function = "function",
Variable = "var",
Constructor = "constructor",
Member = "member",
Event = "event",
CallSignature = "call",
ConstructSignature = "new",
IndexSignature = "index",
ComplexType = "complex"
}
/**
* @beta
*/
export interface ISymbolReferenceOptions {
meaning?: Meaning;
overloadIndex?: number;
}
/**
* Represents a reference to a TypeScript symbol.
* @beta
*/
export declare class SymbolReference {
readonly componentPath: ComponentPath | undefined;
readonly meaning: Meaning | undefined;
readonly overloadIndex: number | undefined;
constructor(component: ComponentPath | undefined, { meaning, overloadIndex }?: ISymbolReferenceOptions);
static empty(): SymbolReference;
withComponentPath(componentPath: ComponentPath | undefined): SymbolReference;
withMeaning(meaning: Meaning | undefined): SymbolReference;
withOverloadIndex(overloadIndex: number | undefined): SymbolReference;
addNavigationStep(navigation: Navigation, component: ComponentLike): SymbolReference;
toString(): string;
}
//# sourceMappingURL=DeclarationReference.d.ts.map

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=DeclarationReference.test.d.ts.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,99 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocNodeManager = void 0;
var StringChecks_1 = require("../parser/StringChecks");
/**
* Part of the {@link TSDocConfiguration} object.
*
* @remarks
* If you define your own custom subclasses of `DocNode`, they must be registered with the `DocNodeManager`.
* Use {@link DocNodeManager.registerAllowableChildren} to specify which {@link DocNodeContainer} subclasses
* are allowed to contain your nodes.
*/
var DocNodeManager = /** @class */ (function () {
function DocNodeManager() {
this._docNodeDefinitionsByKind = new Map();
this._docNodeDefinitionsByConstructor = new Map();
}
/**
* Registers a list of {@link IDocNodeDefinition} objects to be used with the associated
* {@link TSDocConfiguration} object.
*/
DocNodeManager.prototype.registerDocNodes = function (packageName, definitions) {
var packageNameError = StringChecks_1.StringChecks.explainIfInvalidPackageName(packageName);
if (packageNameError) {
throw new Error('Invalid NPM package name: ' + packageNameError);
}
for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {
var definition = definitions_1[_i];
if (!DocNodeManager._nodeKindRegExp.test(definition.docNodeKind)) {
throw new Error("The DocNode kind " + JSON.stringify(definition.docNodeKind) + " is not a valid identifier." +
" It must start with an underscore or letter, and be comprised of letters, numbers, and underscores");
}
var existingDefinition = this._docNodeDefinitionsByKind.get(definition.docNodeKind);
if (existingDefinition !== undefined) {
throw new Error("The DocNode kind \"" + definition.docNodeKind + "\" was already registered" +
(" by " + existingDefinition.packageName));
}
existingDefinition = this._docNodeDefinitionsByConstructor.get(definition.constructor);
if (existingDefinition !== undefined) {
throw new Error("This DocNode constructor was already registered by " + existingDefinition.packageName +
(" as " + existingDefinition.docNodeKind));
}
var newDefinition = {
docNodeKind: definition.docNodeKind,
constructor: definition.constructor,
packageName: packageName,
allowedChildKinds: new Set()
};
this._docNodeDefinitionsByKind.set(definition.docNodeKind, newDefinition);
this._docNodeDefinitionsByConstructor.set(definition.constructor, newDefinition);
}
};
/**
* Reports an error if the specified DocNode kind has not been registered.
*/
DocNodeManager.prototype.throwIfNotRegisteredKind = function (docNodeKind) {
if (!this._docNodeDefinitionsByKind.has(docNodeKind)) {
throw new Error("The DocNode kind \"" + docNodeKind + "\" was not registered with this TSDocConfiguration");
}
};
/**
* For the given parent DocNode kind, registers the specified DocNode kinds as being allowable children of
* the parent.
*
* @remarks
* To prevent mistakes, `DocNodeContainer` will report an error if you try to add node that was not registered
* as an allowable child of the container.
*/
DocNodeManager.prototype.registerAllowableChildren = function (parentKind, childKinds) {
var parentDefinition = this._getDefinition(parentKind);
for (var _i = 0, childKinds_1 = childKinds; _i < childKinds_1.length; _i++) {
var childKind = childKinds_1[_i];
this._getDefinition(childKind);
parentDefinition.allowedChildKinds.add(childKind);
}
};
/**
* Returns true if the specified DocNode kind has been registered as an allowable child of the specified
* parent DocNode kind.
*/
DocNodeManager.prototype.isAllowedChild = function (parentKind, childKind) {
var parentDefinition = this._getDefinition(parentKind);
return parentDefinition.allowedChildKinds.has(childKind);
};
DocNodeManager.prototype._getDefinition = function (docNodeKind) {
var definition = this._docNodeDefinitionsByKind.get(docNodeKind);
if (definition === undefined) {
throw new Error("The DocNode kind \"" + docNodeKind + "\" was not registered with this TSDocConfiguration");
}
return definition;
};
// Matches an ASCII TypeScript-style identifier.
//
// Example: "_myIdentifier99"
DocNodeManager._nodeKindRegExp = /^[_a-z][_a-z0-9]*$/i;
return DocNodeManager;
}());
exports.DocNodeManager = DocNodeManager;
//# sourceMappingURL=DocNodeManager.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,251 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TSDocConfiguration = void 0;
var StandardTags_1 = require("../details/StandardTags");
var TSDocValidationConfiguration_1 = require("./TSDocValidationConfiguration");
var DocNodeManager_1 = require("./DocNodeManager");
var BuiltInDocNodes_1 = require("../nodes/BuiltInDocNodes");
var TSDocMessageId_1 = require("../parser/TSDocMessageId");
/**
* Configuration for the TSDocParser.
*/
var TSDocConfiguration = /** @class */ (function () {
function TSDocConfiguration() {
this._tagDefinitions = [];
this._tagDefinitionsByName = new Map();
this._supportedTagDefinitions = new Set();
this._validation = new TSDocValidationConfiguration_1.TSDocValidationConfiguration();
this._docNodeManager = new DocNodeManager_1.DocNodeManager();
this._supportedHtmlElements = new Set();
this.clear(false);
// Register the built-in node kinds
BuiltInDocNodes_1.BuiltInDocNodes.register(this);
}
/**
* Resets the `TSDocConfiguration` object to its initial empty state.
* @param noStandardTags - The `TSDocConfiguration` constructor normally adds definitions for the
* standard TSDoc tags. Set `noStandardTags` to true for a completely empty `tagDefinitions` collection.
*/
TSDocConfiguration.prototype.clear = function (noStandardTags) {
if (noStandardTags === void 0) { noStandardTags = false; }
this._tagDefinitions.length = 0;
this._tagDefinitionsByName.clear();
this._supportedTagDefinitions.clear();
this._validation.ignoreUndefinedTags = false;
this._validation.reportUnsupportedTags = false;
this._validation.reportUnsupportedHtmlElements = false;
this._supportedHtmlElements.clear();
if (!noStandardTags) {
// Define all the standard tags
this.addTagDefinitions(StandardTags_1.StandardTags.allDefinitions);
}
};
Object.defineProperty(TSDocConfiguration.prototype, "tagDefinitions", {
/**
* The TSDoc tags that are defined in this configuration.
*
* @remarks
* The subset of "supported" tags is tracked by {@link TSDocConfiguration.supportedTagDefinitions}.
*/
get: function () {
return this._tagDefinitions;
},
enumerable: false,
configurable: true
});
Object.defineProperty(TSDocConfiguration.prototype, "supportedTagDefinitions", {
/**
* Returns the subset of {@link TSDocConfiguration.tagDefinitions}
* that are supported in this configuration.
*
* @remarks
* This property is only used when
* {@link TSDocValidationConfiguration.reportUnsupportedTags} is enabled.
*/
get: function () {
var _this = this;
return this.tagDefinitions.filter(function (x) { return _this.isTagSupported(x); });
},
enumerable: false,
configurable: true
});
Object.defineProperty(TSDocConfiguration.prototype, "validation", {
/**
* Enable/disable validation checks performed by the parser.
*/
get: function () {
return this._validation;
},
enumerable: false,
configurable: true
});
Object.defineProperty(TSDocConfiguration.prototype, "supportedHtmlElements", {
/**
* The HTML element names that are supported in this configuration. Used in conjunction with the `reportUnsupportedHtmlElements` setting.
*/
get: function () {
return Array.from(this._supportedHtmlElements.values());
},
enumerable: false,
configurable: true
});
Object.defineProperty(TSDocConfiguration.prototype, "docNodeManager", {
/**
* Register custom DocNode subclasses.
*/
get: function () {
return this._docNodeManager;
},
enumerable: false,
configurable: true
});
/**
* Return the tag that was defined with the specified name, or undefined
* if not found.
*/
TSDocConfiguration.prototype.tryGetTagDefinition = function (tagName) {
return this._tagDefinitionsByName.get(tagName.toUpperCase());
};
/**
* Return the tag that was defined with the specified name, or undefined
* if not found.
*/
TSDocConfiguration.prototype.tryGetTagDefinitionWithUpperCase = function (alreadyUpperCaseTagName) {
return this._tagDefinitionsByName.get(alreadyUpperCaseTagName);
};
/**
* Define a new TSDoc tag to be recognized by the TSDocParser, and mark it as unsupported.
* Use {@link TSDocConfiguration.setSupportForTag} to mark it as supported.
*
* @remarks
* If a tag is "defined" this means that the parser recognizes it and understands its syntax.
* Whereas if a tag is "supported", this means it is defined AND the application implements the tag.
*/
TSDocConfiguration.prototype.addTagDefinition = function (tagDefinition) {
var existingDefinition = this._tagDefinitionsByName.get(tagDefinition.tagNameWithUpperCase);
if (existingDefinition === tagDefinition) {
return;
}
if (existingDefinition) {
throw new Error("A tag is already defined using the name " + existingDefinition.tagName);
}
this._tagDefinitions.push(tagDefinition);
this._tagDefinitionsByName.set(tagDefinition.tagNameWithUpperCase, tagDefinition);
};
/**
* Calls {@link TSDocConfiguration.addTagDefinition} for a list of definitions,
* and optionally marks them as supported.
* @param tagDefinitions - the definitions to be added
* @param supported - if specified, calls the {@link TSDocConfiguration.setSupportForTag}
* method to mark the definitions as supported or unsupported
*/
TSDocConfiguration.prototype.addTagDefinitions = function (tagDefinitions, supported) {
for (var _i = 0, tagDefinitions_1 = tagDefinitions; _i < tagDefinitions_1.length; _i++) {
var tagDefinition = tagDefinitions_1[_i];
this.addTagDefinition(tagDefinition);
if (supported !== undefined) {
this.setSupportForTag(tagDefinition, supported);
}
}
};
/**
* Returns true if the tag is supported in this configuration.
*/
TSDocConfiguration.prototype.isTagSupported = function (tagDefinition) {
this._requireTagToBeDefined(tagDefinition);
return this._supportedTagDefinitions.has(tagDefinition);
};
/**
* Specifies whether the tag definition is supported in this configuration.
* The parser may issue warnings for unsupported tags.
*
* @remarks
* If a tag is "defined" this means that the parser recognizes it and understands its syntax.
* Whereas if a tag is "supported", this means it is defined AND the application implements the tag.
*
* This function automatically sets {@link TSDocValidationConfiguration.reportUnsupportedTags}
* to true.
*/
TSDocConfiguration.prototype.setSupportForTag = function (tagDefinition, supported) {
this._requireTagToBeDefined(tagDefinition);
if (supported) {
this._supportedTagDefinitions.add(tagDefinition);
}
else {
this._supportedTagDefinitions.delete(tagDefinition);
}
this.validation.reportUnsupportedTags = true;
};
/**
* Specifies whether the tag definition is supported in this configuration.
* This operation sets {@link TSDocValidationConfiguration.reportUnsupportedTags} to `true`.
*
* @remarks
* The parser may issue warnings for unsupported tags.
* If a tag is "defined" this means that the parser recognizes it and understands its syntax.
* Whereas if a tag is "supported", this means it is defined AND the application implements the tag.
*/
TSDocConfiguration.prototype.setSupportForTags = function (tagDefinitions, supported) {
for (var _i = 0, tagDefinitions_2 = tagDefinitions; _i < tagDefinitions_2.length; _i++) {
var tagDefinition = tagDefinitions_2[_i];
this.setSupportForTag(tagDefinition, supported);
}
};
/**
* Assigns the `supportedHtmlElements` property, replacing any previous elements.
* This operation sets {@link TSDocValidationConfiguration.reportUnsupportedHtmlElements} to `true`.
*/
TSDocConfiguration.prototype.setSupportedHtmlElements = function (htmlTags) {
this._supportedHtmlElements.clear();
this._validation.reportUnsupportedHtmlElements = true;
for (var _i = 0, htmlTags_1 = htmlTags; _i < htmlTags_1.length; _i++) {
var htmlTag = htmlTags_1[_i];
this._supportedHtmlElements.add(htmlTag);
}
};
/**
* Returns true if the html element is supported in this configuration.
*/
TSDocConfiguration.prototype.isHtmlElementSupported = function (htmlTag) {
return this._supportedHtmlElements.has(htmlTag);
};
/**
* Returns true if the specified {@link TSDocMessageId} string is implemented by this release of the TSDoc parser.
* This can be used to detect misspelled identifiers.
*
* @privateRemarks
*
* Why this API is associated with TSDocConfiguration: In the future, if we enable support for custom extensions
* of the TSDoc parser, we may provide a way to register custom message identifiers.
*/
TSDocConfiguration.prototype.isKnownMessageId = function (messageId) {
return TSDocMessageId_1.allTsdocMessageIdsSet.has(messageId);
};
Object.defineProperty(TSDocConfiguration.prototype, "allTsdocMessageIds", {
/**
* Returns the list of {@link TSDocMessageId} strings that are implemented by this release of the TSDoc parser.
*
* @privateRemarks
*
* Why this API is associated with TSDocConfiguration: In the future, if we enable support for custom extensions
* of the TSDoc parser, we may provide a way to register custom message identifiers.
*/
get: function () {
return TSDocMessageId_1.allTsdocMessageIds;
},
enumerable: false,
configurable: true
});
TSDocConfiguration.prototype._requireTagToBeDefined = function (tagDefinition) {
var matching = this._tagDefinitionsByName.get(tagDefinition.tagNameWithUpperCase);
if (matching) {
if (matching === tagDefinition) {
return;
}
}
throw new Error('The specified TSDocTagDefinition is not defined for this TSDocConfiguration');
};
return TSDocConfiguration;
}());
exports.TSDocConfiguration = TSDocConfiguration;
//# sourceMappingURL=TSDocConfiguration.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,48 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TSDocTagDefinition = exports.TSDocTagSyntaxKind = void 0;
var StringChecks_1 = require("../parser/StringChecks");
var Standardization_1 = require("../details/Standardization");
/**
* Determines the type of syntax for a TSDocTagDefinition
*/
var TSDocTagSyntaxKind;
(function (TSDocTagSyntaxKind) {
/**
* The tag is intended to be an inline tag. For example: `{@link}`.
*/
TSDocTagSyntaxKind[TSDocTagSyntaxKind["InlineTag"] = 0] = "InlineTag";
/**
* The tag is intended to be a block tag that starts a new documentation
* section. For example: `@remarks`
*/
TSDocTagSyntaxKind[TSDocTagSyntaxKind["BlockTag"] = 1] = "BlockTag";
/**
* The tag is intended to be a modifier tag whose presence indicates
* an aspect of the associated API item. For example: `@internal`
*/
TSDocTagSyntaxKind[TSDocTagSyntaxKind["ModifierTag"] = 2] = "ModifierTag";
})(TSDocTagSyntaxKind = exports.TSDocTagSyntaxKind || (exports.TSDocTagSyntaxKind = {}));
/**
* Defines a TSDoc tag that will be understood by the TSDocParser.
*/
var TSDocTagDefinition = /** @class */ (function () {
function TSDocTagDefinition(parameters) {
StringChecks_1.StringChecks.validateTSDocTagName(parameters.tagName);
this.tagName = parameters.tagName;
this.tagNameWithUpperCase = parameters.tagName.toUpperCase();
this.syntaxKind = parameters.syntaxKind;
this.standardization =
parameters.standardization || Standardization_1.Standardization.None;
this.allowMultiple = !!parameters.allowMultiple;
}
/**
* Throws an exception if `tagName` is not a valid TSDoc tag name.
*/
TSDocTagDefinition.validateTSDocTagName = function (tagName) {
StringChecks_1.StringChecks.validateTSDocTagName(tagName);
};
return TSDocTagDefinition;
}());
exports.TSDocTagDefinition = TSDocTagDefinition;
//# sourceMappingURL=TSDocTagDefinition.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"TSDocTagDefinition.js","sourceRoot":"","sources":["../../src/configuration/TSDocTagDefinition.ts"],"names":[],"mappings":";;;AAAA,uDAAsD;AACtD,8DAA6D;AAE7D;;GAEG;AACH,IAAY,kBAiBX;AAjBD,WAAY,kBAAkB;IAC5B;;OAEG;IACH,qEAAS,CAAA;IAET;;;OAGG;IACH,mEAAQ,CAAA;IAER;;;OAGG;IACH,yEAAW,CAAA;AACb,CAAC,EAjBW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAiB7B;AAkBD;;GAEG;AACH;IA8BE,4BAAmB,UAAyC;QAC1D,2BAAY,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,eAAe;YACjB,UAAoD,CAAC,eAAe,IAAI,iCAAe,CAAC,IAAI,CAAC;QAChG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC;IAClD,CAAC;IAED;;OAEG;IACW,uCAAoB,GAAlC,UAAmC,OAAe;QAChD,2BAAY,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACH,yBAAC;AAAD,CAAC,AA9CD,IA8CC;AA9CY,gDAAkB","sourcesContent":["import { StringChecks } from '../parser/StringChecks';\r\nimport { Standardization } from '../details/Standardization';\r\n\r\n/**\r\n * Determines the type of syntax for a TSDocTagDefinition\r\n */\r\nexport enum TSDocTagSyntaxKind {\r\n /**\r\n * The tag is intended to be an inline tag. For example: `{@link}`.\r\n */\r\n InlineTag,\r\n\r\n /**\r\n * The tag is intended to be a block tag that starts a new documentation\r\n * section. For example: `@remarks`\r\n */\r\n BlockTag,\r\n\r\n /**\r\n * The tag is intended to be a modifier tag whose presence indicates\r\n * an aspect of the associated API item. For example: `@internal`\r\n */\r\n ModifierTag\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link TSDocTagDefinition}\r\n */\r\nexport interface ITSDocTagDefinitionParameters {\r\n tagName: string;\r\n syntaxKind: TSDocTagSyntaxKind;\r\n allowMultiple?: boolean;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport interface ITSDocTagDefinitionInternalParameters extends ITSDocTagDefinitionParameters {\r\n standardization: Standardization;\r\n}\r\n\r\n/**\r\n * Defines a TSDoc tag that will be understood by the TSDocParser.\r\n */\r\nexport class TSDocTagDefinition {\r\n /**\r\n * The TSDoc tag name. TSDoc tag names start with an at-sign (`@`) followed\r\n * by ASCII letters using \"camelCase\" capitalization.\r\n */\r\n public readonly tagName: string;\r\n\r\n /**\r\n * The TSDoc tag name in all capitals, which is used for performing\r\n * case-insensitive comparisons or lookups.\r\n */\r\n public readonly tagNameWithUpperCase: string;\r\n\r\n /**\r\n * Specifies the expected syntax for this tag.\r\n */\r\n public readonly syntaxKind: TSDocTagSyntaxKind;\r\n\r\n /**\r\n * Indicates the level of support expected from documentation tools that implement\r\n * the standard.\r\n */\r\n public readonly standardization: Standardization;\r\n\r\n /**\r\n * If true, then this TSDoc tag may appear multiple times in a doc comment.\r\n * By default, a tag may only appear once.\r\n */\r\n public readonly allowMultiple: boolean;\r\n\r\n public constructor(parameters: ITSDocTagDefinitionParameters) {\r\n StringChecks.validateTSDocTagName(parameters.tagName);\r\n this.tagName = parameters.tagName;\r\n this.tagNameWithUpperCase = parameters.tagName.toUpperCase();\r\n this.syntaxKind = parameters.syntaxKind;\r\n this.standardization =\r\n (parameters as ITSDocTagDefinitionInternalParameters).standardization || Standardization.None;\r\n this.allowMultiple = !!parameters.allowMultiple;\r\n }\r\n\r\n /**\r\n * Throws an exception if `tagName` is not a valid TSDoc tag name.\r\n */\r\n public static validateTSDocTagName(tagName: string): void {\r\n StringChecks.validateTSDocTagName(tagName);\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,50 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TSDocValidationConfiguration = void 0;
/**
* Part of the {@link TSDocConfiguration} object.
*/
var TSDocValidationConfiguration = /** @class */ (function () {
function TSDocValidationConfiguration() {
/**
* Set `ignoreUndefinedTags` to true to silently ignore unrecognized tags,
* instead of reporting a warning.
*
* @remarks
* Normally the parser will issue errors when it encounters tag names that do not
* have a corresponding definition in {@link TSDocConfiguration.tagDefinitions}.
* This helps to catch common mistakes such as a misspelled tag.
*
* @defaultValue `false`
*/
this.ignoreUndefinedTags = false;
/**
* Set `reportUnsupportedTags` to true to issue a warning for tags that are not
* supported by your tool.
*
* @remarks
* The TSDoc standard defines may tags. By default it assumes that if your tool does
* not implement one of these tags, then it will simply ignore it. But sometimes this
* may be misleading for developers. (For example, they might write an `@example` block
* and then be surprised if it doesn't appear in the documentation output.).
*
* For a better experience, you can tell the parser which tags you support, and then it
* will issue warnings wherever unsupported tags are used. This is done using
* {@link TSDocConfiguration.setSupportForTag}. Note that calling that function
* automatically sets `reportUnsupportedTags` to true.
*
* @defaultValue `false`
*/
this.reportUnsupportedTags = false;
/**
* Set `reportUnsupportedHtmlElements` to true to issue a warning for HTML elements which
* are not defined in your TSDoc configuration's `supportedHtmlElements` field.
*
* @defaultValue `false`
*/
this.reportUnsupportedHtmlElements = false;
}
return TSDocValidationConfiguration;
}());
exports.TSDocValidationConfiguration = TSDocValidationConfiguration;
//# sourceMappingURL=TSDocValidationConfiguration.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"TSDocValidationConfiguration.js","sourceRoot":"","sources":["../../src/configuration/TSDocValidationConfiguration.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH;IAAA;QACE;;;;;;;;;;WAUG;QACI,wBAAmB,GAAY,KAAK,CAAC;QAE5C;;;;;;;;;;;;;;;;WAgBG;QACI,0BAAqB,GAAY,KAAK,CAAC;QAE9C;;;;;WAKG;QACI,kCAA6B,GAAY,KAAK,CAAC;IACxD,CAAC;IAAD,mCAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,oEAA4B","sourcesContent":["/**\r\n * Part of the {@link TSDocConfiguration} object.\r\n */\r\nexport class TSDocValidationConfiguration {\r\n /**\r\n * Set `ignoreUndefinedTags` to true to silently ignore unrecognized tags,\r\n * instead of reporting a warning.\r\n *\r\n * @remarks\r\n * Normally the parser will issue errors when it encounters tag names that do not\r\n * have a corresponding definition in {@link TSDocConfiguration.tagDefinitions}.\r\n * This helps to catch common mistakes such as a misspelled tag.\r\n *\r\n * @defaultValue `false`\r\n */\r\n public ignoreUndefinedTags: boolean = false;\r\n\r\n /**\r\n * Set `reportUnsupportedTags` to true to issue a warning for tags that are not\r\n * supported by your tool.\r\n *\r\n * @remarks\r\n * The TSDoc standard defines may tags. By default it assumes that if your tool does\r\n * not implement one of these tags, then it will simply ignore it. But sometimes this\r\n * may be misleading for developers. (For example, they might write an `@example` block\r\n * and then be surprised if it doesn't appear in the documentation output.).\r\n *\r\n * For a better experience, you can tell the parser which tags you support, and then it\r\n * will issue warnings wherever unsupported tags are used. This is done using\r\n * {@link TSDocConfiguration.setSupportForTag}. Note that calling that function\r\n * automatically sets `reportUnsupportedTags` to true.\r\n *\r\n * @defaultValue `false`\r\n */\r\n public reportUnsupportedTags: boolean = false;\r\n\r\n /**\r\n * Set `reportUnsupportedHtmlElements` to true to issue a warning for HTML elements which\r\n * are not defined in your TSDoc configuration's `supportedHtmlElements` field.\r\n *\r\n * @defaultValue `false`\r\n */\r\n public reportUnsupportedHtmlElements: boolean = false;\r\n}\r\n"]}

View File

@ -0,0 +1,75 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModifierTagSet = void 0;
var TSDocTagDefinition_1 = require("../configuration/TSDocTagDefinition");
/**
* Represents a set of modifier tags that were extracted from a doc comment.
*
* @remarks
* TSDoc modifier tags are block tags that do not have any associated rich text content.
* Instead, their presence or absence acts as an on/off switch, indicating some aspect
* of the underlying API item. For example, the `@internal` modifier indicates that a
* signature is internal (i.e. not part of the public API contract).
*/
var ModifierTagSet = /** @class */ (function () {
function ModifierTagSet() {
this._nodes = [];
// NOTE: To implement case insensitivity, the keys in this set are always upper-case.
// This convention makes the normalization more obvious (and as a general practice handles
// the Turkish "i" character correctly).
this._nodesByName = new Map();
}
Object.defineProperty(ModifierTagSet.prototype, "nodes", {
/**
* The original block tag nodes that defined the modifiers in this set, excluding duplicates.
*/
get: function () {
return this._nodes;
},
enumerable: false,
configurable: true
});
/**
* Returns true if the set contains a DocBlockTag with the specified tag name.
* Note that synonyms are not considered. The comparison is case-insensitive.
* @param modifierTagName - The name of the tag, including the `@` prefix For example, `@internal`
*/
ModifierTagSet.prototype.hasTagName = function (modifierTagName) {
return this._nodesByName.has(modifierTagName.toUpperCase());
};
/**
* Returns true if the set contains a DocBlockTag matching the specified tag definition.
* Note that synonyms are not considered. The comparison is case-insensitive.
* The TSDocTagDefinition must be a modifier tag.
* @param tagName - The name of the tag, including the `@` prefix For example, `@internal`
*/
ModifierTagSet.prototype.hasTag = function (modifierTagDefinition) {
return !!this.tryGetTag(modifierTagDefinition);
};
/**
* Returns a DocBlockTag matching the specified tag definition, or undefined if no such
* tag was added to the set. If there were multiple instances, returned object will be
* the first one to be added.
*/
ModifierTagSet.prototype.tryGetTag = function (modifierTagDefinition) {
if (modifierTagDefinition.syntaxKind !== TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag) {
throw new Error('The tag definition is not a modifier tag');
}
return this._nodesByName.get(modifierTagDefinition.tagNameWithUpperCase);
};
/**
* Adds a new modifier tag to the set. If a tag already exists with the same name,
* then no change is made, and the return value is false.
*/
ModifierTagSet.prototype.addTag = function (blockTag) {
if (this._nodesByName.has(blockTag.tagNameWithUpperCase)) {
return false;
}
this._nodesByName.set(blockTag.tagNameWithUpperCase, blockTag);
this._nodes.push(blockTag);
return true;
};
return ModifierTagSet;
}());
exports.ModifierTagSet = ModifierTagSet;
//# sourceMappingURL=ModifierTagSet.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"ModifierTagSet.js","sourceRoot":"","sources":["../../src/details/ModifierTagSet.ts"],"names":[],"mappings":";;;AACA,0EAA6F;AAE7F;;;;;;;;GAQG;AACH;IAAA;QACmB,WAAM,GAAkB,EAAE,CAAC;QAE5C,qFAAqF;QACrF,0FAA0F;QAC1F,wCAAwC;QACvB,iBAAY,GAA6B,IAAI,GAAG,EAAuB,CAAC;IAsD3F,CAAC;IAjDC,sBAAW,iCAAK;QAHhB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;;;OAAA;IAED;;;;OAIG;IACI,mCAAU,GAAjB,UAAkB,eAAuB;QACvC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;OAKG;IACI,+BAAM,GAAb,UAAc,qBAAyC;QACrD,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACI,kCAAS,GAAhB,UAAiB,qBAAyC;QACxD,IAAI,qBAAqB,CAAC,UAAU,KAAK,uCAAkB,CAAC,WAAW,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;SAC7D;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACI,+BAAM,GAAb,UAAc,QAAqB;QACjC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;YACxD,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IACH,qBAAC;AAAD,CAAC,AA5DD,IA4DC;AA5DY,wCAAc","sourcesContent":["import { DocBlockTag } from '../nodes/DocBlockTag';\r\nimport { TSDocTagDefinition, TSDocTagSyntaxKind } from '../configuration/TSDocTagDefinition';\r\n\r\n/**\r\n * Represents a set of modifier tags that were extracted from a doc comment.\r\n *\r\n * @remarks\r\n * TSDoc modifier tags are block tags that do not have any associated rich text content.\r\n * Instead, their presence or absence acts as an on/off switch, indicating some aspect\r\n * of the underlying API item. For example, the `@internal` modifier indicates that a\r\n * signature is internal (i.e. not part of the public API contract).\r\n */\r\nexport class ModifierTagSet {\r\n private readonly _nodes: DocBlockTag[] = [];\r\n\r\n // NOTE: To implement case insensitivity, the keys in this set are always upper-case.\r\n // This convention makes the normalization more obvious (and as a general practice handles\r\n // the Turkish \"i\" character correctly).\r\n private readonly _nodesByName: Map<string, DocBlockTag> = new Map<string, DocBlockTag>();\r\n\r\n /**\r\n * The original block tag nodes that defined the modifiers in this set, excluding duplicates.\r\n */\r\n public get nodes(): ReadonlyArray<DocBlockTag> {\r\n return this._nodes;\r\n }\r\n\r\n /**\r\n * Returns true if the set contains a DocBlockTag with the specified tag name.\r\n * Note that synonyms are not considered. The comparison is case-insensitive.\r\n * @param modifierTagName - The name of the tag, including the `@` prefix For example, `@internal`\r\n */\r\n public hasTagName(modifierTagName: string): boolean {\r\n return this._nodesByName.has(modifierTagName.toUpperCase());\r\n }\r\n\r\n /**\r\n * Returns true if the set contains a DocBlockTag matching the specified tag definition.\r\n * Note that synonyms are not considered. The comparison is case-insensitive.\r\n * The TSDocTagDefinition must be a modifier tag.\r\n * @param tagName - The name of the tag, including the `@` prefix For example, `@internal`\r\n */\r\n public hasTag(modifierTagDefinition: TSDocTagDefinition): boolean {\r\n return !!this.tryGetTag(modifierTagDefinition);\r\n }\r\n\r\n /**\r\n * Returns a DocBlockTag matching the specified tag definition, or undefined if no such\r\n * tag was added to the set. If there were multiple instances, returned object will be\r\n * the first one to be added.\r\n */\r\n public tryGetTag(modifierTagDefinition: TSDocTagDefinition): DocBlockTag | undefined {\r\n if (modifierTagDefinition.syntaxKind !== TSDocTagSyntaxKind.ModifierTag) {\r\n throw new Error('The tag definition is not a modifier tag');\r\n }\r\n return this._nodesByName.get(modifierTagDefinition.tagNameWithUpperCase);\r\n }\r\n\r\n /**\r\n * Adds a new modifier tag to the set. If a tag already exists with the same name,\r\n * then no change is made, and the return value is false.\r\n */\r\n public addTag(blockTag: DocBlockTag): boolean {\r\n if (this._nodesByName.has(blockTag.tagNameWithUpperCase)) {\r\n return false;\r\n }\r\n\r\n this._nodesByName.set(blockTag.tagNameWithUpperCase, blockTag);\r\n this._nodes.push(blockTag);\r\n\r\n return true;\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,97 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.StandardModifierTagSet = void 0;
var ModifierTagSet_1 = require("./ModifierTagSet");
var StandardTags_1 = require("./StandardTags");
/**
* Extends the ModifierTagSet base class with getters for modifiers that
* are part of the standardized core tags for TSDoc.
*/
var StandardModifierTagSet = /** @class */ (function (_super) {
__extends(StandardModifierTagSet, _super);
function StandardModifierTagSet() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* Returns true if the `@alpha` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isAlpha = function () {
return this.hasTag(StandardTags_1.StandardTags.alpha);
};
/**
* Returns true if the `@beta` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isBeta = function () {
return this.hasTag(StandardTags_1.StandardTags.beta);
};
/**
* Returns true if the `@eventProperty` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isEventProperty = function () {
return this.hasTag(StandardTags_1.StandardTags.eventProperty);
};
/**
* Returns true if the `@experimental` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isExperimental = function () {
return this.hasTag(StandardTags_1.StandardTags.experimental);
};
/**
* Returns true if the `@internal` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isInternal = function () {
return this.hasTag(StandardTags_1.StandardTags.internal);
};
/**
* Returns true if the `@override` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isOverride = function () {
return this.hasTag(StandardTags_1.StandardTags.override);
};
/**
* Returns true if the `@packageDocumentation` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isPackageDocumentation = function () {
return this.hasTag(StandardTags_1.StandardTags.packageDocumentation);
};
/**
* Returns true if the `@public` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isPublic = function () {
return this.hasTag(StandardTags_1.StandardTags.public);
};
/**
* Returns true if the `@readonly` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isReadonly = function () {
return this.hasTag(StandardTags_1.StandardTags.readonly);
};
/**
* Returns true if the `@sealed` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isSealed = function () {
return this.hasTag(StandardTags_1.StandardTags.sealed);
};
/**
* Returns true if the `@virtual` modifier tag was specified.
*/
StandardModifierTagSet.prototype.isVirtual = function () {
return this.hasTag(StandardTags_1.StandardTags.virtual);
};
return StandardModifierTagSet;
}(ModifierTagSet_1.ModifierTagSet));
exports.StandardModifierTagSet = StandardModifierTagSet;
//# sourceMappingURL=StandardModifierTagSet.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"StandardModifierTagSet.js","sourceRoot":"","sources":["../../src/details/StandardModifierTagSet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAkD;AAClD,+CAA8C;AAE9C;;;GAGG;AACH;IAA4C,0CAAc;IAA1D;;IA6EA,CAAC;IA5EC;;OAEG;IACI,wCAAO,GAAd;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,uCAAM,GAAb;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,gDAAe,GAAtB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,+CAAc,GAArB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,2CAAU,GAAjB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,2CAAU,GAAjB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,uDAAsB,GAA7B;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACI,yCAAQ,GAAf;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,2CAAU,GAAjB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,yCAAQ,GAAf;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,0CAAS,GAAhB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IACH,6BAAC;AAAD,CAAC,AA7ED,CAA4C,+BAAc,GA6EzD;AA7EY,wDAAsB","sourcesContent":["import { ModifierTagSet } from './ModifierTagSet';\r\nimport { StandardTags } from './StandardTags';\r\n\r\n/**\r\n * Extends the ModifierTagSet base class with getters for modifiers that\r\n * are part of the standardized core tags for TSDoc.\r\n */\r\nexport class StandardModifierTagSet extends ModifierTagSet {\r\n /**\r\n * Returns true if the `@alpha` modifier tag was specified.\r\n */\r\n public isAlpha(): boolean {\r\n return this.hasTag(StandardTags.alpha);\r\n }\r\n\r\n /**\r\n * Returns true if the `@beta` modifier tag was specified.\r\n */\r\n public isBeta(): boolean {\r\n return this.hasTag(StandardTags.beta);\r\n }\r\n\r\n /**\r\n * Returns true if the `@eventProperty` modifier tag was specified.\r\n */\r\n public isEventProperty(): boolean {\r\n return this.hasTag(StandardTags.eventProperty);\r\n }\r\n\r\n /**\r\n * Returns true if the `@experimental` modifier tag was specified.\r\n */\r\n public isExperimental(): boolean {\r\n return this.hasTag(StandardTags.experimental);\r\n }\r\n\r\n /**\r\n * Returns true if the `@internal` modifier tag was specified.\r\n */\r\n public isInternal(): boolean {\r\n return this.hasTag(StandardTags.internal);\r\n }\r\n\r\n /**\r\n * Returns true if the `@override` modifier tag was specified.\r\n */\r\n public isOverride(): boolean {\r\n return this.hasTag(StandardTags.override);\r\n }\r\n\r\n /**\r\n * Returns true if the `@packageDocumentation` modifier tag was specified.\r\n */\r\n public isPackageDocumentation(): boolean {\r\n return this.hasTag(StandardTags.packageDocumentation);\r\n }\r\n\r\n /**\r\n * Returns true if the `@public` modifier tag was specified.\r\n */\r\n public isPublic(): boolean {\r\n return this.hasTag(StandardTags.public);\r\n }\r\n\r\n /**\r\n * Returns true if the `@readonly` modifier tag was specified.\r\n */\r\n public isReadonly(): boolean {\r\n return this.hasTag(StandardTags.readonly);\r\n }\r\n\r\n /**\r\n * Returns true if the `@sealed` modifier tag was specified.\r\n */\r\n public isSealed(): boolean {\r\n return this.hasTag(StandardTags.sealed);\r\n }\r\n\r\n /**\r\n * Returns true if the `@virtual` modifier tag was specified.\r\n */\r\n public isVirtual(): boolean {\r\n return this.hasTag(StandardTags.virtual);\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,498 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StandardTags = void 0;
var TSDocTagDefinition_1 = require("../configuration/TSDocTagDefinition");
var Standardization_1 = require("./Standardization");
/**
* Tags whose meaning is defined by the TSDoc standard.
*/
var StandardTags = /** @class */ (function () {
function StandardTags() {
}
StandardTags._defineTag = function (parameters) {
return new TSDocTagDefinition_1.TSDocTagDefinition(parameters);
};
/**
* (Discretionary)
*
* Suggested meaning: Designates that an API item's release stage is "alpha".
* It is intended to be used by third-party developers eventually, but has not
* yet been released. The tooling may trim the declaration from a public release.
*
* @remarks
* Example implementations: API Extractor
*/
StandardTags.alpha = StandardTags._defineTag({
tagName: '@alpha',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Discretionary
});
/**
* (Discretionary)
*
* Suggested meaning: Designates that an API item's release stage is "beta".
* It has been released to third-party developers experimentally for the purpose of
* collecting feedback. The API should not be used in production, because its contract may
* change without notice. The tooling may trim the declaration from a public release,
* but may include it in a developer preview release.
*
* @remarks
* Example implementations: API Extractor
*
* Synonyms: `@experimental`
*/
StandardTags.beta = StandardTags._defineTag({
tagName: '@beta',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Discretionary
});
/**
* (Extended)
*
* ECMAScript decorators are sometimes an important part of an API contract.
* However, today the TypeScript compiler does not represent decorators in the
* .d.ts output files used by API consumers. The `@decorator` tag provides a workaround,
* enabling a decorator expressions to be quoted in a doc comment.
*
* @example
* ```ts
* class Book {
* /**
* * The title of the book.
* * @decorator `@jsonSerialized`
* * @decorator `@jsonFormat(JsonFormats.Url)`
* *
*+/
* @jsonSerialized
* @jsonFormat(JsonFormats.Url)
* public website: string;
* }
* ```
*/
StandardTags.decorator = StandardTags._defineTag({
tagName: '@decorator',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
allowMultiple: true,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Extended)
*
* This block tag is used to document the default value for a field or property,
* if a value is not assigned explicitly.
*
* @remarks
* This tag should only be used with fields or properties that are members of a class or interface.
*/
StandardTags.defaultValue = StandardTags._defineTag({
tagName: '@defaultValue',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Core)
*
* This block tag communicates that an API item is no longer supported and may be removed
* in a future release. The `@deprecated` tag is followed by a sentence describing
* the recommended alternative. It recursively applies to members of the container.
* For example, if a class is deprecated, then so are all of its members.
*/
StandardTags.deprecated = StandardTags._defineTag({
tagName: '@deprecated',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
standardization: Standardization_1.Standardization.Core
});
/**
* (Extended)
*
* When applied to a class or interface property, this indicates that the property
* returns an event object that event handlers can be attached to. The event-handling
* API is implementation-defined, but typically the property return type would be a class
* with members such as `addHandler()` and `removeHandler()`. A documentation tool can
* display such properties under an "Events" heading instead of the usual "Properties" heading.
*/
StandardTags.eventProperty = StandardTags._defineTag({
tagName: '@eventProperty',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Extended)
*
* Indicates a documentation section that should be presented as an example
* illustrating how to use the API. It may include a code sample.
*/
StandardTags.example = StandardTags._defineTag({
tagName: '@example',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
allowMultiple: true,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Discretionary)
*
* Suggested meaning: Same semantics as `@beta`, but used by tools that don't support
* an `@alpha` release stage.
*
* @remarks
* Example implementations: Angular API documenter
*
* Synonyms: `@beta`
*/
StandardTags.experimental = StandardTags._defineTag({
tagName: '@experimental',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Discretionary
});
/**
* (Extended)
*
* This inline tag is used to automatically generate an API item's documentation by
* copying it from another API item. The inline tag parameter contains a reference
* to the other item, which may be an unrelated class, or even an import from a
* separate NPM package.
*
* @remarks
* What gets copied
*
* The `@inheritDoc` tag does not copy the entire comment body. Only the following
* components are copied:
* - summary section
* - `@remarks` block
* - `@params` blocks
* - `@typeParam` blocks
* - `@returns` block
* Other tags such as `@defaultValue` or `@example` are not copied, and need to be
* explicitly included after the `@inheritDoc` tag.
*
* TODO: The notation for API item references is still being standardized. See this issue:
* https://github.com/microsoft/tsdoc/issues/9
*/
StandardTags.inheritDoc = StandardTags._defineTag({
tagName: '@inheritDoc',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.InlineTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Discretionary)
*
* Suggested meaning: Designates that an API item is not planned to be used by
* third-party developers. The tooling may trim the declaration from a public release.
* In some implementations, certain designated packages may be allowed to consume
* internal API items, e.g. because the packages are components of the same product.
*
* @remarks
* Example implementations: API Extractor
*/
StandardTags.internal = StandardTags._defineTag({
tagName: '@internal',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Discretionary
});
/**
* (Core)
*
* The `{@label}` inline tag is used to label a declaration, so that it can be referenced
* using a selector in the TSDoc declaration reference notation.
*
* @remarks
* TODO: The `{@label}` notation is still being standardized. See this issue:
* https://github.com/microsoft/tsdoc/issues/9
*/
StandardTags.label = StandardTags._defineTag({
tagName: '@label',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.InlineTag,
standardization: Standardization_1.Standardization.Core
});
/**
* (Core)
*
* The `{@link}` inline tag is used to create hyperlinks to other pages in a
* documentation system or general internet URLs. In particular, it supports
* expressions for referencing API items.
*
* @remarks
* TODO: The `{@link}` notation is still being standardized. See this issue:
* https://github.com/microsoft/tsdoc/issues/9
*/
StandardTags.link = StandardTags._defineTag({
tagName: '@link',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.InlineTag,
allowMultiple: true,
standardization: Standardization_1.Standardization.Core
});
/**
* (Extended)
*
* This modifier has similar semantics to the `override` keyword in C# or Java.
* For a member function or property, explicitly indicates that this definition
* is overriding (i.e. redefining) the definition inherited from the base class.
* The base class definition would normally be marked as `virtual`.
*
* @remarks
* A documentation tool may enforce that the `@virtual`, `@override`, and/or `@sealed`
* modifiers are consistently applied, but this is not required by the TSDoc standard.
*/
StandardTags.override = StandardTags._defineTag({
tagName: '@override',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Core)
*
* Used to indicate a doc comment that describes an entire NPM package (as opposed
* to an individual API item belonging to that package). The `@packageDocumentation` comment
* is found in the *.d.ts file that acts as the entry point for the package, and it
* should be the first `/**` comment encountered in that file. A comment containing a
* `@packageDocumentation` tag should never be used to describe an individual API item.
*/
StandardTags.packageDocumentation = StandardTags._defineTag({
tagName: '@packageDocumentation',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Core
});
/**
* (Core)
*
* Used to document a function parameter. The `@param` tag is followed by a parameter
* name, followed by a hyphen, followed by a description. The TSDoc parser recognizes
* this syntax and will extract it into a DocParamBlock node.
*/
StandardTags.param = StandardTags._defineTag({
tagName: '@param',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
allowMultiple: true,
standardization: Standardization_1.Standardization.Core
});
/**
* (Core)
*
* Starts a section of additional documentation content that is not intended for a
* public audience. A tool must omit this entire section from the API reference web site,
* generated *.d.ts file, and any other outputs incorporating the content.
*/
StandardTags.privateRemarks = StandardTags._defineTag({
tagName: '@privateRemarks',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
standardization: Standardization_1.Standardization.Core
});
/**
* (Discretionary)
*
* Suggested meaning: Designates that an API item's release stage is "public".
* It has been officially released to third-party developers, and its signature is
* guaranteed to be stable (e.g. following Semantic Versioning rules).
*
* @remarks
* Example implementations: API Extractor
*/
StandardTags.public = StandardTags._defineTag({
tagName: '@public',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Discretionary
});
/**
* (Extended)
*
* This modifier tag indicates that an API item should be documented as being read-only,
* even if the TypeScript type system may indicate otherwise. For example, suppose a
* class property has a setter function that always throws an exception explaining that
* the property cannot be assigned; in this situation, the `@readonly` modifier can be
* added so that the property is shown as read-only in the documentation.
*
* @remarks
* Example implementations: API Extractor
*/
StandardTags.readonly = StandardTags._defineTag({
tagName: '@readonly',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Core)
*
* The main documentation for an API item is separated into a brief "summary" section,
* optionally followed by a more detailed "remarks" section. On a documentation web site,
* index pages (e.g. showing members of a class) will show only the brief summaries,
* whereas a detail pages (e.g. describing a single member) will show the summary followed
* by the remarks. The `@remarks` block tag ends the summary section, and begins the
* remarks section for a doc comment.
*/
StandardTags.remarks = StandardTags._defineTag({
tagName: '@remarks',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
standardization: Standardization_1.Standardization.Core
});
/**
* (Core)
*
* Used to document the return value for a function.
*/
StandardTags.returns = StandardTags._defineTag({
tagName: '@returns',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
standardization: Standardization_1.Standardization.Core
});
/**
* (Extended)
*
* This modifier has similar semantics to the `sealed` keyword in C# or Java.
* For a class, indicates that subclasses must not inherit from the class.
* For a member function or property, indicates that subclasses must not override
* (i.e. redefine) the member.
*
* @remarks
* A documentation tool may enforce that the `@virtual`, `@override`, and/or `@sealed`
* modifiers are consistently applied, but this is not required by the TSDoc standard.
*/
StandardTags.sealed = StandardTags._defineTag({
tagName: '@sealed',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Extended)
*
* Used to build a list of references to an API item or other resource that may be related to the
* current item.
*
* @remarks
*
* For example:
*
* ```ts
* /**
* * Parses a string containing a Uniform Resource Locator (URL).
* * @see {@link ParsedUrl} for the returned data structure
* * @see {@link https://tools.ietf.org/html/rfc1738|RFC 1738}
* * for syntax
* * @see your developer SDK for code samples
* * @param url - the string to be parsed
* * @returns the parsed result
* &#42;/
* function parseURL(url: string): ParsedUrl;
* ```
*
* `@see` is a block tag. Each block becomes an item in the list of references. For example, a documentation
* system might render the above blocks as follows:
*
* ```markdown
* `function parseURL(url: string): ParsedUrl;`
*
* Parses a string containing a Uniform Resource Locator (URL).
*
* ## See Also
* - ParsedUrl for the returned data structure
* - RFC 1738 for syntax
* - your developer SDK for code samples
* ```
*
* NOTE: JSDoc attempts to automatically hyperlink the text immediately after `@see`. Because this is ambiguous
* with plain text, TSDoc instead requires an explicit `{@link}` tag to make hyperlinks.
*/
StandardTags.see = StandardTags._defineTag({
tagName: '@see',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Extended)
*
* Used to document an exception type that may be thrown by a function or property.
*
* @remarks
*
* A separate `@throws` block should be used to document each exception type. This tag is for informational
* purposes only, and does not restrict other types from being thrown. It is suggested, but not required,
* for the `@throws` block to start with a line containing only the name of the exception.
*
* For example:
*
* ```ts
* /**
* * Retrieves metadata about a book from the catalog.
* *
* * @param isbnCode - the ISBN number for the book
* * @returns the retrieved book object
* *
* * @throws {@link IsbnSyntaxError}
* * This exception is thrown if the input is not a valid ISBN number.
* *
* * @throws {@link book-lib#BookNotFoundError}
* * Thrown if the ISBN number is valid, but no such book exists in the catalog.
* *
* * @public
* &#42;/
* function fetchBookByIsbn(isbnCode: string): Book;
* ```
*/
StandardTags.throws = StandardTags._defineTag({
tagName: '@throws',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
allowMultiple: true,
standardization: Standardization_1.Standardization.Extended
});
/**
* (Core)
*
* Used to document a generic parameter. The `@typeParam` tag is followed by a parameter
* name, followed by a hyphen, followed by a description. The TSDoc parser recognizes
* this syntax and will extract it into a DocParamBlock node.
*/
StandardTags.typeParam = StandardTags._defineTag({
tagName: '@typeParam',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.BlockTag,
allowMultiple: true,
standardization: Standardization_1.Standardization.Core
});
/**
* (Extended)
*
* This modifier has similar semantics to the `virtual` keyword in C# or Java.
* For a member function or property, explicitly indicates that subclasses may override
* (i.e. redefine) the member.
*
* @remarks
* A documentation tool may enforce that the `@virtual`, `@override`, and/or `@sealed`
* modifiers are consistently applied, but this is not required by the TSDoc standard.
*/
StandardTags.virtual = StandardTags._defineTag({
tagName: '@virtual',
syntaxKind: TSDocTagDefinition_1.TSDocTagSyntaxKind.ModifierTag,
standardization: Standardization_1.Standardization.Extended
});
/**
* Returns the full list of all core tags.
*/
StandardTags.allDefinitions = [
StandardTags.alpha,
StandardTags.beta,
StandardTags.defaultValue,
StandardTags.decorator,
StandardTags.deprecated,
StandardTags.eventProperty,
StandardTags.example,
StandardTags.experimental,
StandardTags.inheritDoc,
StandardTags.internal,
StandardTags.label,
StandardTags.link,
StandardTags.override,
StandardTags.packageDocumentation,
StandardTags.param,
StandardTags.privateRemarks,
StandardTags.public,
StandardTags.readonly,
StandardTags.remarks,
StandardTags.returns,
StandardTags.sealed,
StandardTags.see,
StandardTags.throws,
StandardTags.typeParam,
StandardTags.virtual
];
return StandardTags;
}());
exports.StandardTags = StandardTags;
//# sourceMappingURL=StandardTags.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,37 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Standardization = void 0;
/**
* Used to group the {@link StandardTags} definitions according to the level of support
* expected from documentation tools that implement the standard.
*/
var Standardization;
(function (Standardization) {
/**
* TSDoc tags in the "Core" standardization group are considered essential.
* Their meaning is standardized, and every documentation tool is expected
* to recognize them. The TSDoc parser library typically provides dedicated APIs
* for accessing these tags.
*/
Standardization["Core"] = "Core";
/**
* TSDoc tags in the "Extended" standardization group are optional. Documentation tools
* may or may not support them. If they do, the syntax and semantics should conform to
* the TSDoc standard definitions.
*/
Standardization["Extended"] = "Extended";
/**
* TSDoc tags in the "Discretionary" standardization group are optional. Although the
* syntax is specified, the semantics for these tags are implementation-specific
* (and sometimes difficult to describe completely without referring to a specific
* implementation). Discretionary tags are included in the TSDoc standard to ensure that
* if two different popular tools use the same tag name, developers can expect the syntax
* to be the same, and the semantics to be somewhat similar.
*/
Standardization["Discretionary"] = "Discretionary";
/**
* The tag is not part of the TSDoc standard. All used-defined tags are assigned to this group.
*/
Standardization["None"] = "None";
})(Standardization = exports.Standardization || (exports.Standardization = {}));
//# sourceMappingURL=Standardization.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"Standardization.js","sourceRoot":"","sources":["../../src/details/Standardization.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,IAAY,eA8BX;AA9BD,WAAY,eAAe;IACzB;;;;;OAKG;IACH,gCAAa,CAAA;IAEb;;;;OAIG;IACH,wCAAqB,CAAA;IAErB;;;;;;;OAOG;IACH,kDAA+B,CAAA;IAE/B;;OAEG;IACH,gCAAa,CAAA;AACf,CAAC,EA9BW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QA8B1B","sourcesContent":["/**\r\n * Used to group the {@link StandardTags} definitions according to the level of support\r\n * expected from documentation tools that implement the standard.\r\n */\r\nexport enum Standardization {\r\n /**\r\n * TSDoc tags in the \"Core\" standardization group are considered essential.\r\n * Their meaning is standardized, and every documentation tool is expected\r\n * to recognize them. The TSDoc parser library typically provides dedicated APIs\r\n * for accessing these tags.\r\n */\r\n Core = 'Core',\r\n\r\n /**\r\n * TSDoc tags in the \"Extended\" standardization group are optional. Documentation tools\r\n * may or may not support them. If they do, the syntax and semantics should conform to\r\n * the TSDoc standard definitions.\r\n */\r\n Extended = 'Extended',\r\n\r\n /**\r\n * TSDoc tags in the \"Discretionary\" standardization group are optional. Although the\r\n * syntax is specified, the semantics for these tags are implementation-specific\r\n * (and sometimes difficult to describe completely without referring to a specific\r\n * implementation). Discretionary tags are included in the TSDoc standard to ensure that\r\n * if two different popular tools use the same tag name, developers can expect the syntax\r\n * to be the same, and the semantics to be somewhat similar.\r\n */\r\n Discretionary = 'Discretionary',\r\n\r\n /**\r\n * The tag is not part of the TSDoc standard. All used-defined tags are assigned to this group.\r\n */\r\n None = 'None'\r\n}\r\n"]}

View File

@ -0,0 +1,81 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PlainTextEmitter = void 0;
var nodes_1 = require("../nodes");
/**
* Renders a DocNode tree as plain text, without any rich text formatting or markup.
*/
var PlainTextEmitter = /** @class */ (function () {
function PlainTextEmitter() {
}
PlainTextEmitter.hasAnyTextContent = function (nodeOrNodes, requiredCharacters) {
if (requiredCharacters === undefined || requiredCharacters < 1) {
requiredCharacters = 1; // default
}
var nodes;
if (nodeOrNodes instanceof nodes_1.DocNode) {
nodes = [nodeOrNodes];
}
else {
nodes = nodeOrNodes;
}
var foundCharacters = PlainTextEmitter._scanTextContent(nodes, requiredCharacters, 0);
return foundCharacters >= requiredCharacters;
};
PlainTextEmitter._scanTextContent = function (nodes, requiredCharacters, foundCharacters) {
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
var node = nodes_2[_i];
switch (node.kind) {
case nodes_1.DocNodeKind.FencedCode:
var docFencedCode = node;
foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docFencedCode.code);
break;
case nodes_1.DocNodeKind.CodeSpan:
var docCodeSpan = node;
foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docCodeSpan.code);
break;
case nodes_1.DocNodeKind.EscapedText:
var docEscapedText = node;
foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docEscapedText.decodedText);
break;
case nodes_1.DocNodeKind.LinkTag:
var docLinkTag = node;
foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docLinkTag.linkText || '');
break;
case nodes_1.DocNodeKind.PlainText:
var docPlainText = node;
foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docPlainText.text);
break;
}
if (foundCharacters >= requiredCharacters) {
break;
}
foundCharacters += PlainTextEmitter._scanTextContent(node.getChildNodes(), requiredCharacters, foundCharacters);
if (foundCharacters >= requiredCharacters) {
break;
}
}
return foundCharacters;
};
PlainTextEmitter._countNonSpaceCharacters = function (s) {
var count = 0;
var length = s.length;
var i = 0;
while (i < length) {
switch (s.charCodeAt(i)) {
case 32: // space
case 9: // tab
case 13: // CR
case 10: // LF
break;
default:
++count;
}
++i;
}
return count;
};
return PlainTextEmitter;
}());
exports.PlainTextEmitter = PlainTextEmitter;
//# sourceMappingURL=PlainTextEmitter.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StringBuilder = void 0;
/**
* This class allows a large text string to be constructed incrementally by appending small chunks. The final
* string can be obtained by calling StringBuilder.toString().
*
* @remarks
* A naive approach might use the `+=` operator to append strings: This would have the downside of copying
* the entire string each time a chunk is appended, resulting in `O(n^2)` bytes of memory being allocated
* (and later freed by the garbage collector), and many of the allocations could be very large objects.
* StringBuilder avoids this overhead by accumulating the chunks in an array, and efficiently joining them
* when `getText()` is finally called.
*/
var StringBuilder = /** @class */ (function () {
function StringBuilder() {
this._chunks = [];
}
/** {@inheritdoc IStringBuilder.append} */
StringBuilder.prototype.append = function (text) {
this._chunks.push(text);
};
/** {@inheritdoc IStringBuilder.toString} */
StringBuilder.prototype.toString = function () {
if (this._chunks.length === 0) {
return '';
}
if (this._chunks.length > 1) {
var joined = this._chunks.join('');
this._chunks.length = 1;
this._chunks[0] = joined;
}
return this._chunks[0];
};
return StringBuilder;
}());
exports.StringBuilder = StringBuilder;
//# sourceMappingURL=StringBuilder.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"StringBuilder.js","sourceRoot":"","sources":["../../src/emitters/StringBuilder.ts"],"names":[],"mappings":";;;AAwBA;;;;;;;;;;GAUG;AACH;IAGE;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,0CAA0C;IACnC,8BAAM,GAAb,UAAc,IAAY;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,4CAA4C;IACrC,gCAAQ,GAAf;QACE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,EAAE,CAAC;SACX;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAM,MAAM,GAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SAC1B;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACH,oBAAC;AAAD,CAAC,AA1BD,IA0BC;AA1BY,sCAAa","sourcesContent":["/**\r\n * An interface for a builder object that allows a large text string to be constructed incrementally by appending\r\n * small chunks.\r\n *\r\n * @remarks\r\n *\r\n * {@link StringBuilder} is the default implementation of this contract.\r\n */\r\nexport interface IStringBuilder {\r\n /**\r\n * Append the specified text to the buffer.\r\n */\r\n append(text: string): void;\r\n\r\n /**\r\n * Returns a single string containing all the text that was appended to the buffer so far.\r\n *\r\n * @remarks\r\n *\r\n * This is a potentially expensive operation.\r\n */\r\n toString(): string;\r\n}\r\n\r\n/**\r\n * This class allows a large text string to be constructed incrementally by appending small chunks. The final\r\n * string can be obtained by calling StringBuilder.toString().\r\n *\r\n * @remarks\r\n * A naive approach might use the `+=` operator to append strings: This would have the downside of copying\r\n * the entire string each time a chunk is appended, resulting in `O(n^2)` bytes of memory being allocated\r\n * (and later freed by the garbage collector), and many of the allocations could be very large objects.\r\n * StringBuilder avoids this overhead by accumulating the chunks in an array, and efficiently joining them\r\n * when `getText()` is finally called.\r\n */\r\nexport class StringBuilder implements IStringBuilder {\r\n private _chunks: string[];\r\n\r\n public constructor() {\r\n this._chunks = [];\r\n }\r\n\r\n /** {@inheritdoc IStringBuilder.append} */\r\n public append(text: string): void {\r\n this._chunks.push(text);\r\n }\r\n\r\n /** {@inheritdoc IStringBuilder.toString} */\r\n public toString(): string {\r\n if (this._chunks.length === 0) {\r\n return '';\r\n }\r\n\r\n if (this._chunks.length > 1) {\r\n const joined: string = this._chunks.join('');\r\n this._chunks.length = 1;\r\n this._chunks[0] = joined;\r\n }\r\n\r\n return this._chunks[0];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,379 @@
"use strict";
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TSDocEmitter = void 0;
var DocNode_1 = require("../nodes/DocNode");
var DocNodeTransforms_1 = require("../transforms/DocNodeTransforms");
var StandardTags_1 = require("../details/StandardTags");
var LineState;
(function (LineState) {
LineState[LineState["Closed"] = 0] = "Closed";
LineState[LineState["StartOfLine"] = 1] = "StartOfLine";
LineState[LineState["MiddleOfLine"] = 2] = "MiddleOfLine";
})(LineState || (LineState = {}));
/**
* Renders a DocNode tree as a code comment.
*/
var TSDocEmitter = /** @class */ (function () {
function TSDocEmitter() {
this.eol = '\n';
// Whether to emit the /** */ framing
this._emitCommentFraming = true;
// This state machine is used by the writer functions to generate the /** */ framing around the emitted lines
this._lineState = LineState.Closed;
// State for _ensureLineSkipped()
this._previousLineHadContent = false;
// Normally a paragraph is precede by a blank line (unless it's the first thing written).
// But sometimes we want the paragraph to be attached to the previous element, e.g. when it's part of
// an "@param" block. Setting _hangingParagraph=true accomplishes that.
this._hangingParagraph = false;
}
TSDocEmitter.prototype.renderComment = function (output, docComment) {
this._emitCommentFraming = true;
this._renderCompleteObject(output, docComment);
};
TSDocEmitter.prototype.renderHtmlTag = function (output, htmlTag) {
this._emitCommentFraming = false;
this._renderCompleteObject(output, htmlTag);
};
TSDocEmitter.prototype.renderDeclarationReference = function (output, declarationReference) {
this._emitCommentFraming = false;
this._renderCompleteObject(output, declarationReference);
};
TSDocEmitter.prototype._renderCompleteObject = function (output, docNode) {
this._output = output;
this._lineState = LineState.Closed;
this._previousLineHadContent = false;
this._hangingParagraph = false;
this._renderNode(docNode);
this._writeEnd();
};
TSDocEmitter.prototype._renderNode = function (docNode) {
var _this = this;
if (docNode === undefined) {
return;
}
switch (docNode.kind) {
case DocNode_1.DocNodeKind.Block:
var docBlock = docNode;
this._ensureLineSkipped();
this._renderNode(docBlock.blockTag);
if (docBlock.blockTag.tagNameWithUpperCase === StandardTags_1.StandardTags.returns.tagNameWithUpperCase) {
this._writeContent(' ');
this._hangingParagraph = true;
}
this._renderNode(docBlock.content);
break;
case DocNode_1.DocNodeKind.BlockTag:
var docBlockTag = docNode;
if (this._lineState === LineState.MiddleOfLine) {
this._writeContent(' ');
}
this._writeContent(docBlockTag.tagName);
break;
case DocNode_1.DocNodeKind.CodeSpan:
var docCodeSpan = docNode;
this._writeContent('`');
this._writeContent(docCodeSpan.code);
this._writeContent('`');
break;
case DocNode_1.DocNodeKind.Comment:
var docComment = docNode;
this._renderNodes(__spreadArrays([
docComment.summarySection,
docComment.remarksBlock,
docComment.privateRemarks,
docComment.deprecatedBlock,
docComment.params,
docComment.typeParams,
docComment.returnsBlock
], docComment.customBlocks, docComment.seeBlocks, [
docComment.inheritDocTag
]));
if (docComment.modifierTagSet.nodes.length > 0) {
this._ensureLineSkipped();
this._renderNodes(docComment.modifierTagSet.nodes);
}
break;
case DocNode_1.DocNodeKind.DeclarationReference:
var docDeclarationReference = docNode;
this._writeContent(docDeclarationReference.packageName);
this._writeContent(docDeclarationReference.importPath);
if (docDeclarationReference.packageName !== undefined ||
docDeclarationReference.importPath !== undefined) {
this._writeContent('#');
}
this._renderNodes(docDeclarationReference.memberReferences);
break;
case DocNode_1.DocNodeKind.ErrorText:
var docErrorText = docNode;
this._writeContent(docErrorText.text);
break;
case DocNode_1.DocNodeKind.EscapedText:
var docEscapedText = docNode;
this._writeContent(docEscapedText.encodedText);
break;
case DocNode_1.DocNodeKind.FencedCode:
var docFencedCode = docNode;
this._ensureAtStartOfLine();
this._writeContent('```');
this._writeContent(docFencedCode.language);
this._writeNewline();
this._writeContent(docFencedCode.code);
this._writeContent('```');
this._writeNewline();
this._writeNewline();
break;
case DocNode_1.DocNodeKind.HtmlAttribute:
var docHtmlAttribute = docNode;
this._writeContent(docHtmlAttribute.name);
this._writeContent(docHtmlAttribute.spacingAfterName);
this._writeContent('=');
this._writeContent(docHtmlAttribute.spacingAfterEquals);
this._writeContent(docHtmlAttribute.value);
this._writeContent(docHtmlAttribute.spacingAfterValue);
break;
case DocNode_1.DocNodeKind.HtmlEndTag:
var docHtmlEndTag = docNode;
this._writeContent('</');
this._writeContent(docHtmlEndTag.name);
this._writeContent('>');
break;
case DocNode_1.DocNodeKind.HtmlStartTag:
var docHtmlStartTag = docNode;
this._writeContent('<');
this._writeContent(docHtmlStartTag.name);
this._writeContent(docHtmlStartTag.spacingAfterName);
var needsSpace = docHtmlStartTag.spacingAfterName === undefined || docHtmlStartTag.spacingAfterName.length === 0;
for (var _i = 0, _a = docHtmlStartTag.htmlAttributes; _i < _a.length; _i++) {
var attribute = _a[_i];
if (needsSpace) {
this._writeContent(' ');
}
this._renderNode(attribute);
needsSpace = attribute.spacingAfterValue === undefined || attribute.spacingAfterValue.length === 0;
}
this._writeContent(docHtmlStartTag.selfClosingTag ? '/>' : '>');
break;
case DocNode_1.DocNodeKind.InheritDocTag:
var docInheritDocTag_1 = docNode;
this._renderInlineTag(docInheritDocTag_1, function () {
if (docInheritDocTag_1.declarationReference) {
_this._writeContent(' ');
_this._renderNode(docInheritDocTag_1.declarationReference);
}
});
break;
case DocNode_1.DocNodeKind.InlineTag:
var docInlineTag_1 = docNode;
this._renderInlineTag(docInlineTag_1, function () {
if (docInlineTag_1.tagContent.length > 0) {
_this._writeContent(' ');
_this._writeContent(docInlineTag_1.tagContent);
}
});
break;
case DocNode_1.DocNodeKind.LinkTag:
var docLinkTag_1 = docNode;
this._renderInlineTag(docLinkTag_1, function () {
if (docLinkTag_1.urlDestination !== undefined || docLinkTag_1.codeDestination !== undefined) {
if (docLinkTag_1.urlDestination !== undefined) {
_this._writeContent(' ');
_this._writeContent(docLinkTag_1.urlDestination);
}
else if (docLinkTag_1.codeDestination !== undefined) {
_this._writeContent(' ');
_this._renderNode(docLinkTag_1.codeDestination);
}
}
if (docLinkTag_1.linkText !== undefined) {
_this._writeContent(' ');
_this._writeContent('|');
_this._writeContent(' ');
_this._writeContent(docLinkTag_1.linkText);
}
});
break;
case DocNode_1.DocNodeKind.MemberIdentifier:
var docMemberIdentifier = docNode;
if (docMemberIdentifier.hasQuotes) {
this._writeContent('"');
this._writeContent(docMemberIdentifier.identifier); // todo: encoding
this._writeContent('"');
}
else {
this._writeContent(docMemberIdentifier.identifier);
}
break;
case DocNode_1.DocNodeKind.MemberReference:
var docMemberReference = docNode;
if (docMemberReference.hasDot) {
this._writeContent('.');
}
if (docMemberReference.selector) {
this._writeContent('(');
}
if (docMemberReference.memberSymbol) {
this._renderNode(docMemberReference.memberSymbol);
}
else {
this._renderNode(docMemberReference.memberIdentifier);
}
if (docMemberReference.selector) {
this._writeContent(':');
this._renderNode(docMemberReference.selector);
this._writeContent(')');
}
break;
case DocNode_1.DocNodeKind.MemberSelector:
var docMemberSelector = docNode;
this._writeContent(docMemberSelector.selector);
break;
case DocNode_1.DocNodeKind.MemberSymbol:
var docMemberSymbol = docNode;
this._writeContent('[');
this._renderNode(docMemberSymbol.symbolReference);
this._writeContent(']');
break;
case DocNode_1.DocNodeKind.Section:
var docSection = docNode;
this._renderNodes(docSection.nodes);
break;
case DocNode_1.DocNodeKind.Paragraph:
var trimmedParagraph = DocNodeTransforms_1.DocNodeTransforms.trimSpacesInParagraph(docNode);
if (trimmedParagraph.nodes.length > 0) {
if (this._hangingParagraph) {
// If it's a hanging paragraph, then don't skip a line
this._hangingParagraph = false;
}
else {
this._ensureLineSkipped();
}
this._renderNodes(trimmedParagraph.nodes);
this._writeNewline();
}
break;
case DocNode_1.DocNodeKind.ParamBlock:
var docParamBlock = docNode;
this._ensureLineSkipped();
this._renderNode(docParamBlock.blockTag);
this._writeContent(' ');
this._writeContent(docParamBlock.parameterName);
this._writeContent(' - ');
this._hangingParagraph = true;
this._renderNode(docParamBlock.content);
this._hangingParagraph = false;
break;
case DocNode_1.DocNodeKind.ParamCollection:
var docParamCollection = docNode;
this._renderNodes(docParamCollection.blocks);
break;
case DocNode_1.DocNodeKind.PlainText:
var docPlainText = docNode;
this._writeContent(docPlainText.text);
break;
}
};
TSDocEmitter.prototype._renderInlineTag = function (docInlineTagBase, writeInlineTagContent) {
this._writeContent('{');
this._writeContent(docInlineTagBase.tagName);
writeInlineTagContent();
this._writeContent('}');
};
TSDocEmitter.prototype._renderNodes = function (docNodes) {
for (var _i = 0, docNodes_1 = docNodes; _i < docNodes_1.length; _i++) {
var docNode = docNodes_1[_i];
this._renderNode(docNode);
}
};
// Calls _writeNewline() only if we're not already at the start of a new line
TSDocEmitter.prototype._ensureAtStartOfLine = function () {
if (this._lineState === LineState.MiddleOfLine) {
this._writeNewline();
}
};
// Calls _writeNewline() if needed to ensure that we have skipped at least one line
TSDocEmitter.prototype._ensureLineSkipped = function () {
this._ensureAtStartOfLine();
if (this._previousLineHadContent) {
this._writeNewline();
}
};
// Writes literal text content. If it contains newlines, they will automatically be converted to
// _writeNewline() calls, to ensure that "*" is written at the start of each line.
TSDocEmitter.prototype._writeContent = function (content) {
if (content === undefined || content.length === 0) {
return;
}
var splitLines = content.split(/\r?\n/g);
if (splitLines.length > 1) {
var firstLine = true;
for (var _i = 0, splitLines_1 = splitLines; _i < splitLines_1.length; _i++) {
var line = splitLines_1[_i];
if (firstLine) {
firstLine = false;
}
else {
this._writeNewline();
}
this._writeContent(line);
}
return;
}
if (this._lineState === LineState.Closed) {
if (this._emitCommentFraming) {
this._output.append('/**' + this.eol + ' *');
}
this._lineState = LineState.StartOfLine;
}
if (this._lineState === LineState.StartOfLine) {
if (this._emitCommentFraming) {
this._output.append(' ');
}
}
this._output.append(content);
this._lineState = LineState.MiddleOfLine;
this._previousLineHadContent = true;
};
// Starts a new line, and inserts "/**" or "*" as appropriate.
TSDocEmitter.prototype._writeNewline = function () {
if (this._lineState === LineState.Closed) {
if (this._emitCommentFraming) {
this._output.append('/**' + this.eol + ' *');
}
this._lineState = LineState.StartOfLine;
}
this._previousLineHadContent = this._lineState === LineState.MiddleOfLine;
if (this._emitCommentFraming) {
this._output.append(this.eol + ' *');
}
else {
this._output.append(this.eol);
}
this._lineState = LineState.StartOfLine;
this._hangingParagraph = false;
};
// Closes the comment, adding the final "*/" delimiter
TSDocEmitter.prototype._writeEnd = function () {
if (this._lineState === LineState.MiddleOfLine) {
if (this._emitCommentFraming) {
this._writeNewline();
}
}
if (this._lineState !== LineState.Closed) {
if (this._emitCommentFraming) {
this._output.append('/' + this.eol);
}
this._lineState = LineState.Closed;
}
};
return TSDocEmitter;
}());
exports.TSDocEmitter = TSDocEmitter;
//# sourceMappingURL=TSDocEmitter.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

56
node_modules/@microsoft/tsdoc/lib-commonjs/index.js generated vendored Normal file
View File

@ -0,0 +1,56 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
var DocNodeManager_1 = require("./configuration/DocNodeManager");
Object.defineProperty(exports, "DocNodeManager", { enumerable: true, get: function () { return DocNodeManager_1.DocNodeManager; } });
var TSDocConfiguration_1 = require("./configuration/TSDocConfiguration");
Object.defineProperty(exports, "TSDocConfiguration", { enumerable: true, get: function () { return TSDocConfiguration_1.TSDocConfiguration; } });
var TSDocTagDefinition_1 = require("./configuration/TSDocTagDefinition");
Object.defineProperty(exports, "TSDocTagSyntaxKind", { enumerable: true, get: function () { return TSDocTagDefinition_1.TSDocTagSyntaxKind; } });
Object.defineProperty(exports, "TSDocTagDefinition", { enumerable: true, get: function () { return TSDocTagDefinition_1.TSDocTagDefinition; } });
var TSDocValidationConfiguration_1 = require("./configuration/TSDocValidationConfiguration");
Object.defineProperty(exports, "TSDocValidationConfiguration", { enumerable: true, get: function () { return TSDocValidationConfiguration_1.TSDocValidationConfiguration; } });
var StandardTags_1 = require("./details/StandardTags");
Object.defineProperty(exports, "StandardTags", { enumerable: true, get: function () { return StandardTags_1.StandardTags; } });
var Standardization_1 = require("./details/Standardization");
Object.defineProperty(exports, "Standardization", { enumerable: true, get: function () { return Standardization_1.Standardization; } });
var StandardModifierTagSet_1 = require("./details/StandardModifierTagSet");
Object.defineProperty(exports, "StandardModifierTagSet", { enumerable: true, get: function () { return StandardModifierTagSet_1.StandardModifierTagSet; } });
var ModifierTagSet_1 = require("./details/ModifierTagSet");
Object.defineProperty(exports, "ModifierTagSet", { enumerable: true, get: function () { return ModifierTagSet_1.ModifierTagSet; } });
var PlainTextEmitter_1 = require("./emitters/PlainTextEmitter");
Object.defineProperty(exports, "PlainTextEmitter", { enumerable: true, get: function () { return PlainTextEmitter_1.PlainTextEmitter; } });
var StringBuilder_1 = require("./emitters/StringBuilder");
Object.defineProperty(exports, "StringBuilder", { enumerable: true, get: function () { return StringBuilder_1.StringBuilder; } });
var TSDocEmitter_1 = require("./emitters/TSDocEmitter");
Object.defineProperty(exports, "TSDocEmitter", { enumerable: true, get: function () { return TSDocEmitter_1.TSDocEmitter; } });
__exportStar(require("./nodes"), exports);
var ParserContext_1 = require("./parser/ParserContext");
Object.defineProperty(exports, "ParserContext", { enumerable: true, get: function () { return ParserContext_1.ParserContext; } });
var ParserMessage_1 = require("./parser/ParserMessage");
Object.defineProperty(exports, "ParserMessage", { enumerable: true, get: function () { return ParserMessage_1.ParserMessage; } });
var ParserMessageLog_1 = require("./parser/ParserMessageLog");
Object.defineProperty(exports, "ParserMessageLog", { enumerable: true, get: function () { return ParserMessageLog_1.ParserMessageLog; } });
var TextRange_1 = require("./parser/TextRange");
Object.defineProperty(exports, "TextRange", { enumerable: true, get: function () { return TextRange_1.TextRange; } });
var Token_1 = require("./parser/Token");
Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return Token_1.Token; } });
Object.defineProperty(exports, "TokenKind", { enumerable: true, get: function () { return Token_1.TokenKind; } });
var TokenSequence_1 = require("./parser/TokenSequence");
Object.defineProperty(exports, "TokenSequence", { enumerable: true, get: function () { return TokenSequence_1.TokenSequence; } });
var TSDocMessageId_1 = require("./parser/TSDocMessageId");
Object.defineProperty(exports, "TSDocMessageId", { enumerable: true, get: function () { return TSDocMessageId_1.TSDocMessageId; } });
var TSDocParser_1 = require("./parser/TSDocParser");
Object.defineProperty(exports, "TSDocParser", { enumerable: true, get: function () { return TSDocParser_1.TSDocParser; } });
var DocNodeTransforms_1 = require("./transforms/DocNodeTransforms");
Object.defineProperty(exports, "DocNodeTransforms", { enumerable: true, get: function () { return DocNodeTransforms_1.DocNodeTransforms; } });
//# sourceMappingURL=index.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAAwG;AAA/F,gHAAA,cAAc,OAAA;AACvB,yEAAwE;AAA/D,wHAAA,kBAAkB,OAAA;AAC3B,yEAI4C;AAF1C,wHAAA,kBAAkB,OAAA;AAClB,wHAAA,kBAAkB,OAAA;AAEpB,6FAA4F;AAAnF,4IAAA,4BAA4B,OAAA;AAErC,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AACxB,2EAA0E;AAAjE,gIAAA,sBAAsB,OAAA;AAC/B,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AAEvB,gEAA+D;AAAtD,oHAAA,gBAAgB,OAAA;AACzB,0DAAyE;AAAhE,8GAAA,aAAa,OAAA;AACtB,wDAAuD;AAA9C,4GAAA,YAAY,OAAA;AAErB,0CAAwB;AAExB,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,wDAAiF;AAAxE,8GAAA,aAAa,OAAA;AACtB,8DAA6D;AAApD,oHAAA,gBAAgB,OAAA;AACzB,gDAA8D;AAArD,sGAAA,SAAS,OAAA;AAClB,wCAAkD;AAAzC,8FAAA,KAAK,OAAA;AAAE,kGAAA,SAAS,OAAA;AACzB,wDAAiF;AAAxE,8GAAA,aAAa,OAAA;AACtB,0DAAyD;AAAhD,gHAAA,cAAc,OAAA;AACvB,oDAAmD;AAA1C,0GAAA,WAAW,OAAA;AAEpB,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA","sourcesContent":["export { DocNodeManager, IDocNodeDefinition, DocNodeConstructor } from './configuration/DocNodeManager';\r\nexport { TSDocConfiguration } from './configuration/TSDocConfiguration';\r\nexport {\r\n ITSDocTagDefinitionParameters,\r\n TSDocTagSyntaxKind,\r\n TSDocTagDefinition\r\n} from './configuration/TSDocTagDefinition';\r\nexport { TSDocValidationConfiguration } from './configuration/TSDocValidationConfiguration';\r\n\r\nexport { StandardTags } from './details/StandardTags';\r\nexport { Standardization } from './details/Standardization';\r\nexport { StandardModifierTagSet } from './details/StandardModifierTagSet';\r\nexport { ModifierTagSet } from './details/ModifierTagSet';\r\n\r\nexport { PlainTextEmitter } from './emitters/PlainTextEmitter';\r\nexport { StringBuilder, IStringBuilder } from './emitters/StringBuilder';\r\nexport { TSDocEmitter } from './emitters/TSDocEmitter';\r\n\r\nexport * from './nodes';\r\n\r\nexport { ParserContext } from './parser/ParserContext';\r\nexport { ParserMessage, IParserMessageParameters } from './parser/ParserMessage';\r\nexport { ParserMessageLog } from './parser/ParserMessageLog';\r\nexport { TextRange, ITextLocation } from './parser/TextRange';\r\nexport { Token, TokenKind } from './parser/Token';\r\nexport { TokenSequence, ITokenSequenceParameters } from './parser/TokenSequence';\r\nexport { TSDocMessageId } from './parser/TSDocMessageId';\r\nexport { TSDocParser } from './parser/TSDocParser';\r\n\r\nexport { DocNodeTransforms } from './transforms/DocNodeTransforms';\r\n"]}

View File

@ -0,0 +1,79 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BuiltInDocNodes = void 0;
var DocNode_1 = require("./DocNode");
var nodes = __importStar(require(".."));
var BuiltInDocNodes = /** @class */ (function () {
function BuiltInDocNodes() {
}
BuiltInDocNodes.register = function (configuration) {
var docNodeManager = configuration.docNodeManager;
docNodeManager.registerDocNodes('@microsoft/tsdoc', [
{ docNodeKind: DocNode_1.DocNodeKind.Block, constructor: nodes.DocBlock },
{ docNodeKind: DocNode_1.DocNodeKind.BlockTag, constructor: nodes.DocBlockTag },
{ docNodeKind: DocNode_1.DocNodeKind.CodeSpan, constructor: nodes.DocCodeSpan },
{ docNodeKind: DocNode_1.DocNodeKind.Comment, constructor: nodes.DocComment },
{ docNodeKind: DocNode_1.DocNodeKind.DeclarationReference, constructor: nodes.DocDeclarationReference },
{ docNodeKind: DocNode_1.DocNodeKind.ErrorText, constructor: nodes.DocErrorText },
{ docNodeKind: DocNode_1.DocNodeKind.EscapedText, constructor: nodes.DocEscapedText },
{ docNodeKind: DocNode_1.DocNodeKind.Excerpt, constructor: nodes.DocExcerpt },
{ docNodeKind: DocNode_1.DocNodeKind.FencedCode, constructor: nodes.DocFencedCode },
{ docNodeKind: DocNode_1.DocNodeKind.HtmlAttribute, constructor: nodes.DocHtmlAttribute },
{ docNodeKind: DocNode_1.DocNodeKind.HtmlEndTag, constructor: nodes.DocHtmlEndTag },
{ docNodeKind: DocNode_1.DocNodeKind.HtmlStartTag, constructor: nodes.DocHtmlStartTag },
{ docNodeKind: DocNode_1.DocNodeKind.InheritDocTag, constructor: nodes.DocInheritDocTag },
{ docNodeKind: DocNode_1.DocNodeKind.InlineTag, constructor: nodes.DocInlineTag },
{ docNodeKind: DocNode_1.DocNodeKind.LinkTag, constructor: nodes.DocLinkTag },
{ docNodeKind: DocNode_1.DocNodeKind.MemberIdentifier, constructor: nodes.DocMemberIdentifier },
{ docNodeKind: DocNode_1.DocNodeKind.MemberReference, constructor: nodes.DocMemberReference },
{ docNodeKind: DocNode_1.DocNodeKind.MemberSelector, constructor: nodes.DocMemberSelector },
{ docNodeKind: DocNode_1.DocNodeKind.MemberSymbol, constructor: nodes.DocMemberSymbol },
{ docNodeKind: DocNode_1.DocNodeKind.Paragraph, constructor: nodes.DocParagraph },
{ docNodeKind: DocNode_1.DocNodeKind.ParamBlock, constructor: nodes.DocParamBlock },
{ docNodeKind: DocNode_1.DocNodeKind.ParamCollection, constructor: nodes.DocParamCollection },
{ docNodeKind: DocNode_1.DocNodeKind.PlainText, constructor: nodes.DocPlainText },
{ docNodeKind: DocNode_1.DocNodeKind.Section, constructor: nodes.DocSection },
{ docNodeKind: DocNode_1.DocNodeKind.SoftBreak, constructor: nodes.DocSoftBreak }
]);
docNodeManager.registerAllowableChildren(DocNode_1.DocNodeKind.Section, [
DocNode_1.DocNodeKind.FencedCode,
DocNode_1.DocNodeKind.Paragraph,
DocNode_1.DocNodeKind.HtmlStartTag,
DocNode_1.DocNodeKind.HtmlEndTag
]);
docNodeManager.registerAllowableChildren(DocNode_1.DocNodeKind.Paragraph, [
DocNode_1.DocNodeKind.BlockTag,
DocNode_1.DocNodeKind.CodeSpan,
DocNode_1.DocNodeKind.ErrorText,
DocNode_1.DocNodeKind.EscapedText,
DocNode_1.DocNodeKind.HtmlStartTag,
DocNode_1.DocNodeKind.HtmlEndTag,
DocNode_1.DocNodeKind.InlineTag,
DocNode_1.DocNodeKind.LinkTag,
DocNode_1.DocNodeKind.PlainText,
DocNode_1.DocNodeKind.SoftBreak
]);
};
return BuiltInDocNodes;
}());
exports.BuiltInDocNodes = BuiltInDocNodes;
//# sourceMappingURL=BuiltInDocNodes.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,70 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocBlock = void 0;
var DocNode_1 = require("./DocNode");
var DocSection_1 = require("./DocSection");
/**
* Represents a section that is introduced by a TSDoc block tag.
* For example, an `@example` block.
*/
var DocBlock = /** @class */ (function (_super) {
__extends(DocBlock, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocBlock(parameters) {
var _this = _super.call(this, parameters) || this;
_this._blockTag = parameters.blockTag;
_this._content = new DocSection_1.DocSection({ configuration: _this.configuration });
return _this;
}
Object.defineProperty(DocBlock.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.Block;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocBlock.prototype, "blockTag", {
/**
* The TSDoc tag that introduces this section.
*/
get: function () {
return this._blockTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocBlock.prototype, "content", {
/**
* The TSDoc tag that introduces this section.
*/
get: function () {
return this._content;
},
enumerable: false,
configurable: true
});
/** @override */
DocBlock.prototype.onGetChildNodes = function () {
return [this.blockTag, this._content];
};
return DocBlock;
}(DocNode_1.DocNode));
exports.DocBlock = DocBlock;
//# sourceMappingURL=DocBlock.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocBlock.js","sourceRoot":"","sources":["../../src/nodes/DocBlock.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA+F;AAC/F,2CAA0C;AAiB1C;;;GAGG;AACH;IAA8B,4BAAO;IAInC;;;OAGG;IACH,kBAAmB,UAA2D;QAA9E,YACE,kBAAM,UAAU,CAAC,SAGlB;QAFC,KAAI,CAAC,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC;QACrC,KAAI,CAAC,QAAQ,GAAG,IAAI,uBAAU,CAAC,EAAE,aAAa,EAAE,KAAI,CAAC,aAAa,EAAE,CAAC,CAAC;;IACxE,CAAC;IAGD,sBAAW,0BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,KAAK,CAAC;QAC3B,CAAC;;;OAAA;IAKD,sBAAW,8BAAQ;QAHnB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;;;OAAA;IAKD,sBAAW,6BAAO;QAHlB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;;;OAAA;IAED,gBAAgB;IACN,kCAAe,GAAzB;QACE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IACH,eAAC;AAAD,CAAC,AArCD,CAA8B,iBAAO,GAqCpC;AArCY,4BAAQ","sourcesContent":["import { DocNodeKind, DocNode, IDocNodeParameters, IDocNodeParsedParameters } from './DocNode';\r\nimport { DocSection } from './DocSection';\r\nimport { DocBlockTag } from './DocBlockTag';\r\n\r\n/**\r\n * Constructor parameters for {@link DocBlock}.\r\n */\r\nexport interface IDocBlockParameters extends IDocNodeParameters {\r\n blockTag: DocBlockTag;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocBlock}.\r\n */\r\nexport interface IDocBlockParsedParameters extends IDocNodeParsedParameters {\r\n blockTag: DocBlockTag;\r\n}\r\n\r\n/**\r\n * Represents a section that is introduced by a TSDoc block tag.\r\n * For example, an `@example` block.\r\n */\r\nexport class DocBlock extends DocNode {\r\n private readonly _blockTag: DocBlockTag;\r\n private readonly _content: DocSection;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocBlockParameters | IDocBlockParsedParameters) {\r\n super(parameters);\r\n this._blockTag = parameters.blockTag;\r\n this._content = new DocSection({ configuration: this.configuration });\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.Block;\r\n }\r\n\r\n /**\r\n * The TSDoc tag that introduces this section.\r\n */\r\n public get blockTag(): DocBlockTag {\r\n return this._blockTag;\r\n }\r\n\r\n /**\r\n * The TSDoc tag that introduces this section.\r\n */\r\n public get content(): DocSection {\r\n return this._content;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [this.blockTag, this._content];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,86 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocBlockTag = void 0;
var DocNode_1 = require("./DocNode");
var StringChecks_1 = require("../parser/StringChecks");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents a TSDoc block tag such as `@param` or `@public`.
*/
var DocBlockTag = /** @class */ (function (_super) {
__extends(DocBlockTag, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocBlockTag(parameters) {
var _this = _super.call(this, parameters) || this;
StringChecks_1.StringChecks.validateTSDocTagName(parameters.tagName);
_this._tagName = parameters.tagName;
_this._tagNameWithUpperCase = parameters.tagName.toUpperCase();
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._tagNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.BlockTag,
content: parameters.tagNameExcerpt
});
}
return _this;
}
Object.defineProperty(DocBlockTag.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.BlockTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocBlockTag.prototype, "tagName", {
/**
* The TSDoc tag name. TSDoc tag names start with an at-sign (`@`) followed
* by ASCII letters using "camelCase" capitalization.
*/
get: function () {
return this._tagName;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocBlockTag.prototype, "tagNameWithUpperCase", {
/**
* The TSDoc tag name in all capitals, which is used for performing
* case-insensitive comparisons or lookups.
*/
get: function () {
return this._tagNameWithUpperCase;
},
enumerable: false,
configurable: true
});
/** @override */
DocBlockTag.prototype.onGetChildNodes = function () {
return [this._tagNameExcerpt];
};
DocBlockTag.prototype.getTokenSequence = function () {
if (!this._tagNameExcerpt) {
throw new Error('DocBlockTag.getTokenSequence() failed because this object did not originate from a parsed input');
}
return this._tagNameExcerpt.content;
};
return DocBlockTag;
}(DocNode_1.DocNode));
exports.DocBlockTag = DocBlockTag;
//# sourceMappingURL=DocBlockTag.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocBlockTag.js","sourceRoot":"","sources":["../../src/nodes/DocBlockTag.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA+F;AAC/F,uDAAsD;AAEtD,2CAAuD;AAiBvD;;GAEG;AACH;IAAiC,+BAAO;IAKtC;;;OAGG;IACH,qBAAmB,UAAiE;QAApF,YACE,kBAAM,UAAU,CAAC,SAalB;QAXC,2BAAY,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtD,KAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,KAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAE9D,IAAI,iBAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAC1C,KAAI,CAAC,eAAe,GAAG,IAAI,uBAAU,CAAC;gBACpC,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,QAAQ;gBACjC,OAAO,EAAE,UAAU,CAAC,cAAc;aACnC,CAAC,CAAC;SACJ;;IACH,CAAC;IAGD,sBAAW,6BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,QAAQ,CAAC;QAC9B,CAAC;;;OAAA;IAMD,sBAAW,gCAAO;QAJlB;;;WAGG;aACH;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;;;OAAA;IAMD,sBAAW,6CAAoB;QAJ/B;;;WAGG;aACH;YACE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;;;OAAA;IAED,gBAAgB;IACN,qCAAe,GAAzB;QACE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAEM,sCAAgB,GAAvB;QACE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;SACH;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IACtC,CAAC;IACH,kBAAC;AAAD,CAAC,AA3DD,CAAiC,iBAAO,GA2DvC;AA3DY,kCAAW","sourcesContent":["import { DocNodeKind, DocNode, IDocNodeParameters, IDocNodeParsedParameters } from './DocNode';\r\nimport { StringChecks } from '../parser/StringChecks';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\n\r\n/**\r\n * Constructor parameters for {@link DocBlockTag}.\r\n */\r\nexport interface IDocBlockTagParameters extends IDocNodeParameters {\r\n tagName: string;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocBlockTag}.\r\n */\r\nexport interface IDocBlockTagParsedParameters extends IDocNodeParsedParameters {\r\n tagName: string;\r\n tagNameExcerpt: TokenSequence;\r\n}\r\n\r\n/**\r\n * Represents a TSDoc block tag such as `@param` or `@public`.\r\n */\r\nexport class DocBlockTag extends DocNode {\r\n private readonly _tagName: string;\r\n private readonly _tagNameWithUpperCase: string;\r\n private readonly _tagNameExcerpt: DocExcerpt | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocBlockTagParameters | IDocBlockTagParsedParameters) {\r\n super(parameters);\r\n\r\n StringChecks.validateTSDocTagName(parameters.tagName);\r\n this._tagName = parameters.tagName;\r\n this._tagNameWithUpperCase = parameters.tagName.toUpperCase();\r\n\r\n if (DocNode.isParsedParameters(parameters)) {\r\n this._tagNameExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.BlockTag,\r\n content: parameters.tagNameExcerpt\r\n });\r\n }\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.BlockTag;\r\n }\r\n\r\n /**\r\n * The TSDoc tag name. TSDoc tag names start with an at-sign (`@`) followed\r\n * by ASCII letters using \"camelCase\" capitalization.\r\n */\r\n public get tagName(): string {\r\n return this._tagName;\r\n }\r\n\r\n /**\r\n * The TSDoc tag name in all capitals, which is used for performing\r\n * case-insensitive comparisons or lookups.\r\n */\r\n public get tagNameWithUpperCase(): string {\r\n return this._tagNameWithUpperCase;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [this._tagNameExcerpt];\r\n }\r\n\r\n public getTokenSequence(): TokenSequence {\r\n if (!this._tagNameExcerpt) {\r\n throw new Error(\r\n 'DocBlockTag.getTokenSequence() failed because this object did not originate from a parsed input'\r\n );\r\n }\r\n return this._tagNameExcerpt.content;\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,81 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocCodeSpan = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents CommonMark-style code span, i.e. code surrounded by
* backtick characters.
*/
var DocCodeSpan = /** @class */ (function (_super) {
__extends(DocCodeSpan, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocCodeSpan(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._openingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.CodeSpan_OpeningDelimiter,
content: parameters.openingDelimiterExcerpt
});
_this._codeExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.CodeSpan_Code,
content: parameters.codeExcerpt
});
_this._closingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.CodeSpan_ClosingDelimiter,
content: parameters.closingDelimiterExcerpt
});
}
else {
_this._code = parameters.code;
}
return _this;
}
Object.defineProperty(DocCodeSpan.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.CodeSpan;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocCodeSpan.prototype, "code", {
/**
* The text that should be rendered as code, excluding the backtick delimiters.
*/
get: function () {
if (this._code === undefined) {
this._code = this._codeExcerpt.content.toString();
}
return this._code;
},
enumerable: false,
configurable: true
});
/** @override */
DocCodeSpan.prototype.onGetChildNodes = function () {
return [this._openingDelimiterExcerpt, this._codeExcerpt, this._closingDelimiterExcerpt];
};
return DocCodeSpan;
}(DocNode_1.DocNode));
exports.DocCodeSpan = DocCodeSpan;
//# sourceMappingURL=DocCodeSpan.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocCodeSpan.js","sourceRoot":"","sources":["../../src/nodes/DocCodeSpan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA+F;AAE/F,2CAAuD;AAoBvD;;;GAGG;AACH;IAAiC,+BAAO;IAWtC;;;OAGG;IACH,qBAAmB,UAAiE;QAApF,YACE,kBAAM,UAAU,CAAC,SAqBlB;QAnBC,IAAI,iBAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAC1C,KAAI,CAAC,wBAAwB,GAAG,IAAI,uBAAU,CAAC;gBAC7C,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,yBAAyB;gBAClD,OAAO,EAAE,UAAU,CAAC,uBAAuB;aAC5C,CAAC,CAAC;YACH,KAAI,CAAC,YAAY,GAAG,IAAI,uBAAU,CAAC;gBACjC,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,aAAa;gBACtC,OAAO,EAAE,UAAU,CAAC,WAAW;aAChC,CAAC,CAAC;YACH,KAAI,CAAC,wBAAwB,GAAG,IAAI,uBAAU,CAAC;gBAC7C,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,yBAAyB;gBAClD,OAAO,EAAE,UAAU,CAAC,uBAAuB;aAC5C,CAAC,CAAC;SACJ;aAAM;YACL,KAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;SAC9B;;IACH,CAAC;IAGD,sBAAW,6BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,QAAQ,CAAC;QAC9B,CAAC;;;OAAA;IAKD,sBAAW,6BAAI;QAHf;;WAEG;aACH;YACE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;aACpD;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;;;OAAA;IAED,gBAAgB;IACN,qCAAe,GAAzB;QACE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC3F,CAAC;IACH,kBAAC;AAAD,CAAC,AA1DD,CAAiC,iBAAO,GA0DvC;AA1DY,kCAAW","sourcesContent":["import { DocNodeKind, IDocNodeParameters, DocNode, IDocNodeParsedParameters } from './DocNode';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\n\r\n/**\r\n * Constructor parameters for {@link DocCodeSpan}.\r\n */\r\nexport interface IDocCodeSpanParameters extends IDocNodeParameters {\r\n code: string;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocCodeSpan}.\r\n */\r\nexport interface IDocCodeSpanParsedParameters extends IDocNodeParsedParameters {\r\n openingDelimiterExcerpt: TokenSequence;\r\n\r\n codeExcerpt: TokenSequence;\r\n\r\n closingDelimiterExcerpt: TokenSequence;\r\n}\r\n\r\n/**\r\n * Represents CommonMark-style code span, i.e. code surrounded by\r\n * backtick characters.\r\n */\r\nexport class DocCodeSpan extends DocNode {\r\n // The opening ` delimiter\r\n private readonly _openingDelimiterExcerpt: DocExcerpt | undefined;\r\n\r\n // The code content\r\n private _code: string | undefined;\r\n private readonly _codeExcerpt: DocExcerpt | undefined;\r\n\r\n // The closing ` delimiter\r\n private readonly _closingDelimiterExcerpt: DocExcerpt | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocCodeSpanParameters | IDocCodeSpanParsedParameters) {\r\n super(parameters);\r\n\r\n if (DocNode.isParsedParameters(parameters)) {\r\n this._openingDelimiterExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.CodeSpan_OpeningDelimiter,\r\n content: parameters.openingDelimiterExcerpt\r\n });\r\n this._codeExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.CodeSpan_Code,\r\n content: parameters.codeExcerpt\r\n });\r\n this._closingDelimiterExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.CodeSpan_ClosingDelimiter,\r\n content: parameters.closingDelimiterExcerpt\r\n });\r\n } else {\r\n this._code = parameters.code;\r\n }\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.CodeSpan;\r\n }\r\n\r\n /**\r\n * The text that should be rendered as code, excluding the backtick delimiters.\r\n */\r\n public get code(): string {\r\n if (this._code === undefined) {\r\n this._code = this._codeExcerpt!.content.toString();\r\n }\r\n return this._code;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [this._openingDelimiterExcerpt, this._codeExcerpt, this._closingDelimiterExcerpt];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,130 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocComment = void 0;
var DocNode_1 = require("./DocNode");
var DocSection_1 = require("./DocSection");
var StandardModifierTagSet_1 = require("../details/StandardModifierTagSet");
var StringBuilder_1 = require("../emitters/StringBuilder");
var TSDocEmitter_1 = require("../emitters/TSDocEmitter");
var DocParamCollection_1 = require("./DocParamCollection");
/**
* Represents an entire documentation comment conforming to the TSDoc structure.
* This is the root of the DocNode tree.
*/
var DocComment = /** @class */ (function (_super) {
__extends(DocComment, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocComment(parameters) {
var _this = _super.call(this, parameters) || this;
_this.summarySection = new DocSection_1.DocSection({ configuration: _this.configuration });
_this.remarksBlock = undefined;
_this.privateRemarks = undefined;
_this.deprecatedBlock = undefined;
_this.params = new DocParamCollection_1.DocParamCollection({ configuration: _this.configuration });
_this.typeParams = new DocParamCollection_1.DocParamCollection({ configuration: _this.configuration });
_this.returnsBlock = undefined;
_this.modifierTagSet = new StandardModifierTagSet_1.StandardModifierTagSet();
_this._seeBlocks = [];
_this._customBlocks = [];
return _this;
}
Object.defineProperty(DocComment.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.Comment;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocComment.prototype, "seeBlocks", {
/**
* The collection of all `@see` DockBlockTag nodes belonging to this doc comment.
*/
get: function () {
return this._seeBlocks;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocComment.prototype, "customBlocks", {
/**
* The collection of all DocBlock nodes belonging to this doc comment.
*/
get: function () {
return this._customBlocks;
},
enumerable: false,
configurable: true
});
/**
* Append an item to the seeBlocks collection.
* @internal
*/
DocComment.prototype._appendSeeBlock = function (block) {
this._seeBlocks.push(block);
};
/**
* Append an item to the customBlocks collection.
*/
DocComment.prototype.appendCustomBlock = function (block) {
this._customBlocks.push(block);
};
/** @override */
DocComment.prototype.onGetChildNodes = function () {
return __spreadArrays([
this.summarySection,
this.remarksBlock,
this.privateRemarks,
this.deprecatedBlock,
this.params.count > 0 ? this.params : undefined,
this.typeParams.count > 0 ? this.typeParams : undefined,
this.returnsBlock
], this.customBlocks, this.seeBlocks, [
this.inheritDocTag
], this.modifierTagSet.nodes);
};
/**
* Generates a doc comment corresponding to the `DocComment` tree. The output is in a normalized form,
* and may ignore formatting/spacing from the original input.
*
* @remarks
* After parsing a string, and possibly modifying the result, `emitAsTsdoc()` can be used to render the result
* as a doc comment in a normalized format. It can also be used to emit a `DocComment` tree that was constructed
* manually.
*
* This method is provided as convenience for simple use cases. To customize the output, or if you need
* to render into a `StringBuilder`, use the {@link TSDocEmitter} class instead.
*/
DocComment.prototype.emitAsTsdoc = function () {
var stringBuilder = new StringBuilder_1.StringBuilder();
var emitter = new TSDocEmitter_1.TSDocEmitter();
emitter.renderComment(stringBuilder, this);
return stringBuilder.toString();
};
return DocComment;
}(DocNode_1.DocNode));
exports.DocComment = DocComment;
//# sourceMappingURL=DocComment.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,163 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocDeclarationReference = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
var StringBuilder_1 = require("../emitters/StringBuilder");
var TSDocEmitter_1 = require("../emitters/TSDocEmitter");
/**
* Represents a declaration reference.
*
* @remarks
* Declaration references are TSDoc expressions used by tags such as `{@link}`
* or `{@inheritDoc}` that need to refer to another declaration.
*/
var DocDeclarationReference = /** @class */ (function (_super) {
__extends(DocDeclarationReference, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocDeclarationReference(parameters) {
var _a;
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
if (parameters.packageNameExcerpt) {
_this._packageNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.DeclarationReference_PackageName,
content: parameters.packageNameExcerpt
});
}
if (parameters.importPathExcerpt) {
_this._importPathExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.DeclarationReference_ImportPath,
content: parameters.importPathExcerpt
});
}
if (parameters.importHashExcerpt) {
_this._importHashExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.DeclarationReference_ImportHash,
content: parameters.importHashExcerpt
});
}
if (parameters.spacingAfterImportHashExcerpt) {
_this._spacingAfterImportHashExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterImportHashExcerpt
});
}
}
else {
_this._packageName = parameters.packageName;
_this._importPath = parameters.importPath;
}
_this._memberReferences = [];
if (parameters.memberReferences) {
(_a = _this._memberReferences).push.apply(_a, parameters.memberReferences);
}
return _this;
}
Object.defineProperty(DocDeclarationReference.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.DeclarationReference;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocDeclarationReference.prototype, "packageName", {
/**
* The optional package name, which may optionally include an NPM scope.
*
* Example: `"@scope/my-package"`
*/
get: function () {
if (this._packageName === undefined) {
if (this._packageNameExcerpt !== undefined) {
this._packageName = this._packageNameExcerpt.content.toString();
}
}
return this._packageName;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocDeclarationReference.prototype, "importPath", {
/**
* The optional import path. If a package name is provided, then if an import path is provided,
* the path must start with a "/" delimiter; otherwise paths are resolved relative to the source file
* containing the reference.
*
* Example: `"/path1/path2"`
* Example: `"./path1/path2"`
* Example: `"../path2/path2"`
*/
get: function () {
if (this._importPath === undefined) {
if (this._importPathExcerpt !== undefined) {
this._importPath = this._importPathExcerpt.content.toString();
}
}
return this._importPath;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocDeclarationReference.prototype, "memberReferences", {
/**
* The chain of member references that indicate the declaration being referenced.
* If this list is empty, then either the packageName or importPath must be provided,
* because the reference refers to a module.
*/
get: function () {
return this._memberReferences;
},
enumerable: false,
configurable: true
});
/**
* Generates the TSDoc representation of this declaration reference.
*/
DocDeclarationReference.prototype.emitAsTsdoc = function () {
var stringBuilder = new StringBuilder_1.StringBuilder();
var emitter = new TSDocEmitter_1.TSDocEmitter();
emitter.renderDeclarationReference(stringBuilder, this);
return stringBuilder.toString();
};
/** @override */
DocDeclarationReference.prototype.onGetChildNodes = function () {
return __spreadArrays([
this._packageNameExcerpt,
this._importPathExcerpt,
this._importHashExcerpt,
this._spacingAfterImportHashExcerpt
], this._memberReferences);
};
return DocDeclarationReference;
}(DocNode_1.DocNode));
exports.DocDeclarationReference = DocDeclarationReference;
//# sourceMappingURL=DocDeclarationReference.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,118 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocErrorText = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents a span of text that contained invalid markup.
* The characters should be rendered as plain text.
*/
var DocErrorText = /** @class */ (function (_super) {
__extends(DocErrorText, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocErrorText(parameters) {
var _this = _super.call(this, parameters) || this;
_this._textExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.ErrorText,
content: parameters.textExcerpt
});
_this._messageId = parameters.messageId;
_this._errorMessage = parameters.errorMessage;
_this._errorLocation = parameters.errorLocation;
return _this;
}
Object.defineProperty(DocErrorText.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.ErrorText;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocErrorText.prototype, "text", {
/**
* The characters that should be rendered as plain text because they
* could not be parsed successfully.
*/
get: function () {
if (this._text === undefined) {
this._text = this._textExcerpt.content.toString();
}
return this._text;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocErrorText.prototype, "textExcerpt", {
get: function () {
if (this._textExcerpt) {
return this._textExcerpt.content;
}
else {
return undefined;
}
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocErrorText.prototype, "messageId", {
/**
* The TSDoc error message identifier.
*/
get: function () {
return this._messageId;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocErrorText.prototype, "errorMessage", {
/**
* A description of why the character could not be parsed.
*/
get: function () {
return this._errorMessage;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocErrorText.prototype, "errorLocation", {
/**
* The range of characters that caused the error. In general these may be
* somewhat farther ahead in the input stream from the DocErrorText node itself.
*
* @remarks
* For example, for the malformed HTML tag `<a href="123" @ /a>`, the DocErrorText node
* will correspond to the `<` character that looked like an HTML tag, whereas the
* error location might be the `@` character that caused the trouble.
*/
get: function () {
return this._errorLocation;
},
enumerable: false,
configurable: true
});
/** @override */
DocErrorText.prototype.onGetChildNodes = function () {
return [this._textExcerpt];
};
return DocErrorText;
}(DocNode_1.DocNode));
exports.DocErrorText = DocErrorText;
//# sourceMappingURL=DocErrorText.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocErrorText.js","sourceRoot":"","sources":["../../src/nodes/DocErrorText.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA2E;AAE3E,2CAAuD;AAcvD;;;GAGG;AACH;IAAkC,gCAAO;IAQvC;;;OAGG;IACH,sBAAmB,UAAyC;QAA5D,YACE,kBAAM,UAAU,CAAC,SAWlB;QATC,KAAI,CAAC,YAAY,GAAG,IAAI,uBAAU,CAAC;YACjC,aAAa,EAAE,KAAI,CAAC,aAAa;YACjC,WAAW,EAAE,wBAAW,CAAC,SAAS;YAClC,OAAO,EAAE,UAAU,CAAC,WAAW;SAChC,CAAC,CAAC;QAEH,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,KAAI,CAAC,aAAa,GAAG,UAAU,CAAC,YAAY,CAAC;QAC7C,KAAI,CAAC,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC;;IACjD,CAAC;IAGD,sBAAW,8BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;;;OAAA;IAMD,sBAAW,8BAAI;QAJf;;;WAGG;aACH;YACE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;aACnD;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;;;OAAA;IAED,sBAAW,qCAAW;aAAtB;YACE,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;aAClC;iBAAM;gBACL,OAAO,SAAS,CAAC;aAClB;QACH,CAAC;;;OAAA;IAKD,sBAAW,mCAAS;QAHpB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;;;OAAA;IAKD,sBAAW,sCAAY;QAHvB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;;;OAAA;IAWD,sBAAW,uCAAa;QATxB;;;;;;;;WAQG;aACH;YACE,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;;;OAAA;IAED,gBAAgB;IACN,sCAAe,GAAzB;QACE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IACH,mBAAC;AAAD,CAAC,AAjFD,CAAkC,iBAAO,GAiFxC;AAjFY,oCAAY","sourcesContent":["import { DocNodeKind, DocNode, IDocNodeParsedParameters } from './DocNode';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\nimport { TSDocMessageId } from '../parser/TSDocMessageId';\r\n\r\n/**\r\n * Constructor parameters for {@link DocErrorText}.\r\n */\r\nexport interface IDocErrorTextParsedParameters extends IDocNodeParsedParameters {\r\n textExcerpt: TokenSequence;\r\n\r\n messageId: TSDocMessageId;\r\n errorMessage: string;\r\n errorLocation: TokenSequence;\r\n}\r\n\r\n/**\r\n * Represents a span of text that contained invalid markup.\r\n * The characters should be rendered as plain text.\r\n */\r\nexport class DocErrorText extends DocNode {\r\n private _text: string | undefined;\r\n private readonly _textExcerpt: DocExcerpt;\r\n\r\n private readonly _messageId: TSDocMessageId;\r\n private readonly _errorMessage: string;\r\n private readonly _errorLocation: TokenSequence;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocErrorTextParsedParameters) {\r\n super(parameters);\r\n\r\n this._textExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.ErrorText,\r\n content: parameters.textExcerpt\r\n });\r\n\r\n this._messageId = parameters.messageId;\r\n this._errorMessage = parameters.errorMessage;\r\n this._errorLocation = parameters.errorLocation;\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.ErrorText;\r\n }\r\n\r\n /**\r\n * The characters that should be rendered as plain text because they\r\n * could not be parsed successfully.\r\n */\r\n public get text(): string {\r\n if (this._text === undefined) {\r\n this._text = this._textExcerpt.content.toString();\r\n }\r\n return this._text;\r\n }\r\n\r\n public get textExcerpt(): TokenSequence | undefined {\r\n if (this._textExcerpt) {\r\n return this._textExcerpt.content;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * The TSDoc error message identifier.\r\n */\r\n public get messageId(): TSDocMessageId {\r\n return this._messageId;\r\n }\r\n\r\n /**\r\n * A description of why the character could not be parsed.\r\n */\r\n public get errorMessage(): string {\r\n return this._errorMessage;\r\n }\r\n\r\n /**\r\n * The range of characters that caused the error. In general these may be\r\n * somewhat farther ahead in the input stream from the DocErrorText node itself.\r\n *\r\n * @remarks\r\n * For example, for the malformed HTML tag `<a href=\"123\" @ /a>`, the DocErrorText node\r\n * will correspond to the `<` character that looked like an HTML tag, whereas the\r\n * error location might be the `@` character that caused the trouble.\r\n */\r\n public get errorLocation(): TokenSequence {\r\n return this._errorLocation;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [this._textExcerpt];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,101 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocEscapedText = exports.EscapeStyle = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* The style of escaping to be used with DocEscapedText.
*/
var EscapeStyle;
(function (EscapeStyle) {
/**
* Use a backslash symbol to escape the character.
*/
EscapeStyle[EscapeStyle["CommonMarkBackslash"] = 0] = "CommonMarkBackslash";
})(EscapeStyle = exports.EscapeStyle || (exports.EscapeStyle = {}));
/**
* Represents a text character that should be escaped as a TSDoc symbol.
* @remarks
* Note that renders will normally apply appropriate escaping when rendering
* DocPlainText in a format such as HTML or TSDoc. The DocEscapedText node
* forces a specific escaping that may not be the default.
*/
var DocEscapedText = /** @class */ (function (_super) {
__extends(DocEscapedText, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocEscapedText(parameters) {
var _this = _super.call(this, parameters) || this;
_this._escapeStyle = parameters.escapeStyle;
_this._encodedTextExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.EscapedText,
content: parameters.encodedTextExcerpt
});
_this._decodedText = parameters.decodedText;
return _this;
}
Object.defineProperty(DocEscapedText.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.EscapedText;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocEscapedText.prototype, "escapeStyle", {
/**
* The style of escaping to be performed.
*/
get: function () {
return this._escapeStyle;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocEscapedText.prototype, "encodedText", {
/**
* The text sequence including escapes.
*/
get: function () {
if (this._encodedText === undefined) {
this._encodedText = this._encodedTextExcerpt.content.toString();
}
return this._encodedText;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocEscapedText.prototype, "decodedText", {
/**
* The text without escaping.
*/
get: function () {
return this._decodedText;
},
enumerable: false,
configurable: true
});
/** @override */
DocEscapedText.prototype.onGetChildNodes = function () {
return [this._encodedTextExcerpt];
};
return DocEscapedText;
}(DocNode_1.DocNode));
exports.DocEscapedText = DocEscapedText;
//# sourceMappingURL=DocEscapedText.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocEscapedText.js","sourceRoot":"","sources":["../../src/nodes/DocEscapedText.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA2E;AAC3E,2CAAuD;AAYvD;;GAEG;AACH,IAAY,WAKX;AALD,WAAY,WAAW;IACrB;;OAEG;IACH,2EAAmB,CAAA;AACrB,CAAC,EALW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAKtB;AAED;;;;;;GAMG;AACH;IAAoC,kCAAO;IAQzC;;;OAGG;IACH,wBAAmB,UAA2C;QAA9D,YACE,kBAAM,UAAU,CAAC,SAWlB;QATC,KAAI,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC;QAE3C,KAAI,CAAC,mBAAmB,GAAG,IAAI,uBAAU,CAAC;YACxC,aAAa,EAAE,KAAI,CAAC,aAAa;YACjC,WAAW,EAAE,wBAAW,CAAC,WAAW;YACpC,OAAO,EAAE,UAAU,CAAC,kBAAkB;SACvC,CAAC,CAAC;QAEH,KAAI,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC;;IAC7C,CAAC;IAGD,sBAAW,gCAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,WAAW,CAAC;QACjC,CAAC;;;OAAA;IAKD,sBAAW,uCAAW;QAHtB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;;;OAAA;IAKD,sBAAW,uCAAW;QAHtB;;WAEG;aACH;YACE,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;gBACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;aACjE;YACD,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;;;OAAA;IAKD,sBAAW,uCAAW;QAHtB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;;;OAAA;IAED,gBAAgB;IACN,wCAAe,GAAzB;QACE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpC,CAAC;IACH,qBAAC;AAAD,CAAC,AA3DD,CAAoC,iBAAO,GA2D1C;AA3DY,wCAAc","sourcesContent":["import { DocNodeKind, IDocNodeParsedParameters, DocNode } from './DocNode';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\n\r\n/**\r\n * Constructor parameters for {@link DocEscapedText}.\r\n */\r\nexport interface IDocEscapedTextParsedParameters extends IDocNodeParsedParameters {\r\n escapeStyle: EscapeStyle;\r\n encodedTextExcerpt: TokenSequence;\r\n decodedText: string;\r\n}\r\n\r\n/**\r\n * The style of escaping to be used with DocEscapedText.\r\n */\r\nexport enum EscapeStyle {\r\n /**\r\n * Use a backslash symbol to escape the character.\r\n */\r\n CommonMarkBackslash\r\n}\r\n\r\n/**\r\n * Represents a text character that should be escaped as a TSDoc symbol.\r\n * @remarks\r\n * Note that renders will normally apply appropriate escaping when rendering\r\n * DocPlainText in a format such as HTML or TSDoc. The DocEscapedText node\r\n * forces a specific escaping that may not be the default.\r\n */\r\nexport class DocEscapedText extends DocNode {\r\n private readonly _escapeStyle: EscapeStyle;\r\n\r\n private _encodedText: string | undefined;\r\n private readonly _encodedTextExcerpt: DocExcerpt;\r\n\r\n private readonly _decodedText: string;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocEscapedTextParsedParameters) {\r\n super(parameters);\r\n\r\n this._escapeStyle = parameters.escapeStyle;\r\n\r\n this._encodedTextExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.EscapedText,\r\n content: parameters.encodedTextExcerpt\r\n });\r\n\r\n this._decodedText = parameters.decodedText;\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.EscapedText;\r\n }\r\n\r\n /**\r\n * The style of escaping to be performed.\r\n */\r\n public get escapeStyle(): EscapeStyle {\r\n return this._escapeStyle;\r\n }\r\n\r\n /**\r\n * The text sequence including escapes.\r\n */\r\n public get encodedText(): string {\r\n if (this._encodedText === undefined) {\r\n this._encodedText = this._encodedTextExcerpt.content.toString();\r\n }\r\n return this._encodedText;\r\n }\r\n\r\n /**\r\n * The text without escaping.\r\n */\r\n public get decodedText(): string {\r\n return this._decodedText;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [this._encodedTextExcerpt];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,153 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocExcerpt = exports.ExcerptKind = void 0;
var DocNode_1 = require("./DocNode");
var Token_1 = require("../parser/Token");
/* eslint-disable @typescript-eslint/naming-convention */
/**
* Indicates the type of {@link DocExcerpt}.
*/
var ExcerptKind;
(function (ExcerptKind) {
ExcerptKind["Spacing"] = "Spacing";
ExcerptKind["BlockTag"] = "BlockTag";
ExcerptKind["CodeSpan_OpeningDelimiter"] = "CodeSpan_OpeningDelimiter";
ExcerptKind["CodeSpan_Code"] = "CodeSpan_Code";
ExcerptKind["CodeSpan_ClosingDelimiter"] = "CodeSpan_ClosingDelimiter";
ExcerptKind["DeclarationReference_PackageName"] = "DeclarationReference_PackageName";
ExcerptKind["DeclarationReference_ImportPath"] = "DeclarationReference_ImportPath";
ExcerptKind["DeclarationReference_ImportHash"] = "DeclarationReference_ImportHash";
/**
* Input characters that were reported as an error and do not appear to be part of a valid expression.
* A syntax highlighter might display them with an error color (e.g. red).
*/
ExcerptKind["ErrorText"] = "ErrorText";
/**
* Input characters that do not conform to the TSDoc specification, but were recognized by the parser, for example
* as a known JSDoc pattern. A syntax highlighter should not display them with an error color (e.g. red)
* because the error reporting may be suppressed for "lax" parsing of legacy source code.
*/
ExcerptKind["NonstandardText"] = "NonstandardText";
ExcerptKind["EscapedText"] = "EscapedText";
ExcerptKind["FencedCode_OpeningFence"] = "FencedCode_OpeningFence";
ExcerptKind["FencedCode_Language"] = "FencedCode_Language";
ExcerptKind["FencedCode_Code"] = "FencedCode_Code";
ExcerptKind["FencedCode_ClosingFence"] = "FencedCode_ClosingFence";
ExcerptKind["HtmlAttribute_Name"] = "HtmlAttribute_Name";
ExcerptKind["HtmlAttribute_Equals"] = "HtmlAttribute_Equals";
ExcerptKind["HtmlAttribute_Value"] = "HtmlAttribute_Value";
ExcerptKind["HtmlEndTag_OpeningDelimiter"] = "HtmlEndTag_OpeningDelimiter";
ExcerptKind["HtmlEndTag_Name"] = "HtmlEndTag_Name";
ExcerptKind["HtmlEndTag_ClosingDelimiter"] = "HtmlEndTag_ClosingDelimiter";
ExcerptKind["HtmlStartTag_OpeningDelimiter"] = "HtmlStartTag_OpeningDelimiter";
ExcerptKind["HtmlStartTag_Name"] = "HtmlStartTag_Name";
ExcerptKind["HtmlStartTag_ClosingDelimiter"] = "HtmlStartTag_ClosingDelimiter";
ExcerptKind["InlineTag_OpeningDelimiter"] = "InlineTag_OpeningDelimiter";
ExcerptKind["InlineTag_TagName"] = "InlineTag_TagName";
ExcerptKind["InlineTag_TagContent"] = "InlineTag_TagContent";
ExcerptKind["InlineTag_ClosingDelimiter"] = "InlineTag_ClosingDelimiter";
ExcerptKind["LinkTag_UrlDestination"] = "LinkTag_UrlDestination";
ExcerptKind["LinkTag_Pipe"] = "LinkTag_Pipe";
ExcerptKind["LinkTag_LinkText"] = "LinkTag_LinkText";
ExcerptKind["MemberIdentifier_LeftQuote"] = "MemberIdentifier_LeftQuote";
ExcerptKind["MemberIdentifier_Identifier"] = "MemberIdentifier_Identifier";
ExcerptKind["MemberIdentifier_RightQuote"] = "MemberIdentifier_RightQuote";
ExcerptKind["MemberReference_Dot"] = "MemberReference_Dot";
ExcerptKind["MemberReference_LeftParenthesis"] = "MemberReference_LeftParenthesis";
ExcerptKind["MemberReference_Colon"] = "MemberReference_Colon";
ExcerptKind["MemberReference_RightParenthesis"] = "MemberReference_RightParenthesis";
ExcerptKind["MemberSelector"] = "MemberSelector";
ExcerptKind["DocMemberSymbol_LeftBracket"] = "DocMemberSymbol_LeftBracket";
ExcerptKind["DocMemberSymbol_RightBracket"] = "DocMemberSymbol_RightBracket";
ExcerptKind["ParamBlock_ParameterName"] = "ParamBlock_ParameterName";
ExcerptKind["ParamBlock_Hyphen"] = "ParamBlock_Hyphen";
ExcerptKind["PlainText"] = "PlainText";
ExcerptKind["SoftBreak"] = "SoftBreak";
})(ExcerptKind = exports.ExcerptKind || (exports.ExcerptKind = {}));
/**
* Represents a parsed token sequence.
*
* @remarks
* When a `DocNode` is created by parsing a doc comment, it will have `DocExcerpt` child nodes corresponding to
* the parsed syntax elements such as names, keywords, punctuation, and spaces. These excerpts indicate the original
* coordinates of the syntax element, and thus can be used for syntax highlighting and precise error reporting.
* They could also be used to rewrite specific words in a source file (e.g. renaming a parameter) without disturbing
* any other characters in the file.
*
* Every parsed character will correspond to at most one DocExcerpt object. In other words, excerpts never overlap.
* A given excerpt can span multiple comment lines, and it may contain gaps, for example to skip the `*` character
* that starts a new TSDoc comment line.
*/
var DocExcerpt = /** @class */ (function (_super) {
__extends(DocExcerpt, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocExcerpt(parameters) {
var _this = _super.call(this, parameters) || this;
if (parameters.excerptKind === ExcerptKind.Spacing) {
for (var _i = 0, _a = parameters.content.tokens; _i < _a.length; _i++) {
var token = _a[_i];
switch (token.kind) {
case Token_1.TokenKind.Spacing:
case Token_1.TokenKind.Newline:
case Token_1.TokenKind.EndOfInput:
break;
default:
throw new Error("The excerptKind=Spacing but the range contains a non-whitespace token");
}
}
}
_this._excerptKind = parameters.excerptKind;
_this._content = parameters.content;
return _this;
}
Object.defineProperty(DocExcerpt.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.Excerpt;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocExcerpt.prototype, "excerptKind", {
/**
* Indicates the kind of DocExcerpt.
*/
get: function () {
return this._excerptKind;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocExcerpt.prototype, "content", {
/**
* The input token sequence corresponding to this excerpt.
* @remarks
* Note that a token sequence can span multiple input lines and may contain gaps, for example to skip the `*`
* character that starts a new TSDoc comment line.
*/
get: function () {
return this._content;
},
enumerable: false,
configurable: true
});
return DocExcerpt;
}(DocNode_1.DocNode));
exports.DocExcerpt = DocExcerpt;
//# sourceMappingURL=DocExcerpt.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,159 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocFencedCode = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents CommonMark-style code fence, i.e. a block of program code that
* starts and ends with a line comprised of three backticks. The opening delimiter
* can also specify a language for a syntax highlighter.
*/
var DocFencedCode = /** @class */ (function (_super) {
__extends(DocFencedCode, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocFencedCode(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._openingFenceExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.FencedCode_OpeningFence,
content: parameters.openingFenceExcerpt
});
if (parameters.spacingAfterOpeningFenceExcerpt) {
_this._spacingAfterOpeningFenceExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterOpeningFenceExcerpt
});
}
if (parameters.languageExcerpt) {
_this._languageExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.FencedCode_Language,
content: parameters.languageExcerpt
});
}
if (parameters.spacingAfterLanguageExcerpt) {
_this._spacingAfterLanguageExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterLanguageExcerpt
});
}
_this._codeExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.FencedCode_Code,
content: parameters.codeExcerpt
});
if (parameters.spacingBeforeClosingFenceExcerpt) {
_this._spacingBeforeClosingFenceExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingBeforeClosingFenceExcerpt
});
}
_this._closingFenceExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.FencedCode_ClosingFence,
content: parameters.closingFenceExcerpt
});
if (parameters.spacingAfterClosingFenceExcerpt) {
_this._spacingAfterClosingFenceExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterClosingFenceExcerpt
});
}
}
else {
_this._code = parameters.code;
_this._language = parameters.language;
}
return _this;
}
Object.defineProperty(DocFencedCode.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.FencedCode;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocFencedCode.prototype, "language", {
/**
* A name that can optionally be included after the opening code fence delimiter,
* on the same line as the three backticks. This name indicates the programming language
* for the code, which a syntax highlighter may use to style the code block.
*
* @remarks
* The TSDoc standard requires that the language "ts" should be interpreted to mean TypeScript.
* Other languages names may be supported, but this is implementation dependent.
*
* CommonMark refers to this field as the "info string".
*
* @privateRemarks
* Examples of language strings supported by GitHub flavored markdown:
* https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml
*/
get: function () {
if (this._language === undefined) {
if (this._languageExcerpt !== undefined) {
this._language = this._languageExcerpt.content.toString();
}
else {
this._language = '';
}
}
return this._language;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocFencedCode.prototype, "code", {
/**
* The text that should be rendered as code.
*/
get: function () {
if (this._code === undefined) {
if (this._codeExcerpt !== undefined) {
this._code = this._codeExcerpt.content.toString();
}
}
return this._code;
},
enumerable: false,
configurable: true
});
/** @override */
DocFencedCode.prototype.onGetChildNodes = function () {
return [
this._openingFenceExcerpt,
this._spacingAfterOpeningFenceExcerpt,
this._languageExcerpt,
this._spacingAfterLanguageExcerpt,
this._codeExcerpt,
this._spacingBeforeClosingFenceExcerpt,
this._closingFenceExcerpt,
this._spacingAfterClosingFenceExcerpt
];
};
return DocFencedCode;
}(DocNode_1.DocNode));
exports.DocFencedCode = DocFencedCode;
//# sourceMappingURL=DocFencedCode.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,175 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocHtmlAttribute = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents an HTML attribute inside a DocHtmlStartTag or DocHtmlEndTag.
*
* Example: `href="#"` inside `<a href="#" />`
*/
var DocHtmlAttribute = /** @class */ (function (_super) {
__extends(DocHtmlAttribute, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocHtmlAttribute(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._nameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlAttribute_Name,
content: parameters.nameExcerpt
});
if (parameters.spacingAfterNameExcerpt) {
_this._spacingAfterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterNameExcerpt
});
}
_this._equalsExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlAttribute_Equals,
content: parameters.equalsExcerpt
});
if (parameters.spacingAfterEqualsExcerpt) {
_this._spacingAfterEqualsExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterEqualsExcerpt
});
}
_this._valueExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlAttribute_Value,
content: parameters.valueExcerpt
});
if (parameters.spacingAfterValueExcerpt) {
_this._spacingAfterValueExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterValueExcerpt
});
}
}
else {
_this._name = parameters.name;
_this._spacingAfterName = parameters.spacingAfterName;
_this._spacingAfterEquals = parameters.spacingAfterEquals;
_this._value = parameters.value;
_this._spacingAfterValue = parameters.spacingAfterValue;
}
return _this;
}
Object.defineProperty(DocHtmlAttribute.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.HtmlAttribute;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlAttribute.prototype, "name", {
/**
* The HTML attribute name.
*/
get: function () {
if (this._name === undefined) {
this._name = this._nameExcerpt.content.toString();
}
return this._name;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlAttribute.prototype, "spacingAfterName", {
/**
* Explicit whitespace that a renderer should insert after the HTML attribute name.
* If undefined, then the renderer can use a formatting rule to generate appropriate spacing.
*/
get: function () {
if (this._spacingAfterName === undefined) {
if (this._spacingAfterNameExcerpt !== undefined) {
this._spacingAfterName = this._spacingAfterNameExcerpt.content.toString();
}
}
return this._spacingAfterName;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlAttribute.prototype, "spacingAfterEquals", {
/**
* Explicit whitespace that a renderer should insert after the "=".
* If undefined, then the renderer can use a formatting rule to generate appropriate spacing.
*/
get: function () {
if (this._spacingAfterEquals === undefined) {
if (this._spacingAfterEqualsExcerpt !== undefined) {
this._spacingAfterEquals = this._spacingAfterEqualsExcerpt.content.toString();
}
}
return this._spacingAfterEquals;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlAttribute.prototype, "value", {
/**
* The HTML attribute value.
*/
get: function () {
if (this._value === undefined) {
this._value = this._valueExcerpt.content.toString();
}
return this._value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlAttribute.prototype, "spacingAfterValue", {
/**
* Explicit whitespace that a renderer should insert after the HTML attribute name.
* If undefined, then the renderer can use a formatting rule to generate appropriate spacing.
*/
get: function () {
if (this._spacingAfterValue === undefined) {
if (this._spacingAfterValueExcerpt !== undefined) {
this._spacingAfterValue = this._spacingAfterValueExcerpt.content.toString();
}
}
return this._spacingAfterValue;
},
enumerable: false,
configurable: true
});
/** @override */
DocHtmlAttribute.prototype.onGetChildNodes = function () {
return [
this._nameExcerpt,
this._spacingAfterNameExcerpt,
this._equalsExcerpt,
this._spacingAfterEqualsExcerpt,
this._valueExcerpt,
this._spacingAfterValueExcerpt
];
};
return DocHtmlAttribute;
}(DocNode_1.DocNode));
exports.DocHtmlAttribute = DocHtmlAttribute;
//# sourceMappingURL=DocHtmlAttribute.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,104 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocHtmlEndTag = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
var StringBuilder_1 = require("../emitters/StringBuilder");
var TSDocEmitter_1 = require("../emitters/TSDocEmitter");
/**
* Represents an HTML end tag. Example: `</a>`
*/
var DocHtmlEndTag = /** @class */ (function (_super) {
__extends(DocHtmlEndTag, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocHtmlEndTag(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._openingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlEndTag_OpeningDelimiter,
content: parameters.openingDelimiterExcerpt
});
_this._nameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlEndTag_Name,
content: parameters.nameExcerpt
});
if (parameters.spacingAfterNameExcerpt) {
_this._spacingAfterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterNameExcerpt
});
}
_this._closingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlEndTag_ClosingDelimiter,
content: parameters.closingDelimiterExcerpt
});
}
else {
_this._name = parameters.name;
}
return _this;
}
Object.defineProperty(DocHtmlEndTag.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.HtmlEndTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlEndTag.prototype, "name", {
/**
* The HTML element name.
*/
get: function () {
if (this._name === undefined) {
this._name = this._nameExcerpt.content.toString();
}
return this._name;
},
enumerable: false,
configurable: true
});
/**
* Generates the HTML for this tag.
*/
DocHtmlEndTag.prototype.emitAsHtml = function () {
// NOTE: Here we're assuming that the TSDoc representation for a tag is also a valid HTML expression.
var stringBuilder = new StringBuilder_1.StringBuilder();
var emitter = new TSDocEmitter_1.TSDocEmitter();
emitter.renderHtmlTag(stringBuilder, this);
return stringBuilder.toString();
};
/** @override */
DocHtmlEndTag.prototype.onGetChildNodes = function () {
return [
this._openingDelimiterExcerpt,
this._nameExcerpt,
this._spacingAfterNameExcerpt,
this._closingDelimiterExcerpt
];
};
return DocHtmlEndTag;
}(DocNode_1.DocNode));
exports.DocHtmlEndTag = DocHtmlEndTag;
//# sourceMappingURL=DocHtmlEndTag.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,157 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocHtmlStartTag = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
var StringBuilder_1 = require("../emitters/StringBuilder");
var TSDocEmitter_1 = require("../emitters/TSDocEmitter");
/**
* Represents an HTML start tag, which may or may not be self-closing.
*
* Example: `<a href="#" />`
*/
var DocHtmlStartTag = /** @class */ (function (_super) {
__extends(DocHtmlStartTag, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocHtmlStartTag(parameters) {
var _a;
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._openingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlStartTag_OpeningDelimiter,
content: parameters.openingDelimiterExcerpt
});
_this._nameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlStartTag_Name,
content: parameters.nameExcerpt
});
if (parameters.spacingAfterNameExcerpt) {
_this._spacingAfterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterNameExcerpt
});
}
_this._closingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.HtmlStartTag_ClosingDelimiter,
content: parameters.closingDelimiterExcerpt
});
}
else {
_this._name = parameters.name;
_this._spacingAfterName = parameters.spacingAfterName;
}
_this._htmlAttributes = [];
if (parameters.htmlAttributes) {
(_a = _this._htmlAttributes).push.apply(_a, parameters.htmlAttributes);
}
_this._selfClosingTag = !!parameters.selfClosingTag;
return _this;
}
Object.defineProperty(DocHtmlStartTag.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.HtmlStartTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlStartTag.prototype, "name", {
/**
* The HTML element name.
*/
get: function () {
if (this._name === undefined) {
this._name = this._nameExcerpt.content.toString();
}
return this._name;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlStartTag.prototype, "htmlAttributes", {
/**
* The HTML attributes belonging to this HTML element.
*/
get: function () {
return this._htmlAttributes;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlStartTag.prototype, "selfClosingTag", {
/**
* If true, then the HTML tag ends with `/>` instead of `>`.
*/
get: function () {
return this._selfClosingTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocHtmlStartTag.prototype, "spacingAfterName", {
/**
* Explicit whitespace that a renderer should insert after the HTML element name.
* If undefined, then the renderer can use a formatting rule to generate appropriate spacing.
*/
get: function () {
if (this._spacingAfterName === undefined) {
if (this._spacingAfterNameExcerpt !== undefined) {
this._spacingAfterName = this._spacingAfterNameExcerpt.content.toString();
}
}
return this._spacingAfterName;
},
enumerable: false,
configurable: true
});
/**
* Generates the HTML for this tag.
*/
DocHtmlStartTag.prototype.emitAsHtml = function () {
// NOTE: Here we're assuming that the TSDoc representation for a tag is also a valid HTML expression.
var stringBuilder = new StringBuilder_1.StringBuilder();
var emitter = new TSDocEmitter_1.TSDocEmitter();
emitter.renderHtmlTag(stringBuilder, this);
return stringBuilder.toString();
};
/** @override */
DocHtmlStartTag.prototype.onGetChildNodes = function () {
return __spreadArrays([
this._openingDelimiterExcerpt,
this._nameExcerpt,
this._spacingAfterNameExcerpt
], this._htmlAttributes, [
this._closingDelimiterExcerpt
]);
};
return DocHtmlStartTag;
}(DocNode_1.DocNode));
exports.DocHtmlStartTag = DocHtmlStartTag;
//# sourceMappingURL=DocHtmlStartTag.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,63 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocInheritDocTag = void 0;
var DocNode_1 = require("./DocNode");
var DocInlineTagBase_1 = require("./DocInlineTagBase");
/**
* Represents an `{@inheritDoc}` tag.
*/
var DocInheritDocTag = /** @class */ (function (_super) {
__extends(DocInheritDocTag, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocInheritDocTag(parameters) {
var _this = _super.call(this, parameters) || this;
if (_this.tagNameWithUpperCase !== '@INHERITDOC') {
throw new Error('DocInheritDocTag requires the tag name to be "{@inheritDoc}"');
}
_this._declarationReference = parameters.declarationReference;
return _this;
}
Object.defineProperty(DocInheritDocTag.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.InheritDocTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocInheritDocTag.prototype, "declarationReference", {
/**
* The declaration that the documentation will be inherited from.
* If omitted, the documentation will be inherited from the parent class.
*/
get: function () {
return this._declarationReference;
},
enumerable: false,
configurable: true
});
/** @override */
DocInheritDocTag.prototype.getChildNodesForContent = function () {
// abstract
return [this._declarationReference];
};
return DocInheritDocTag;
}(DocInlineTagBase_1.DocInlineTagBase));
exports.DocInheritDocTag = DocInheritDocTag;
//# sourceMappingURL=DocInheritDocTag.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocInheritDocTag.js","sourceRoot":"","sources":["../../src/nodes/DocInheritDocTag.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAiD;AAEjD,uDAI4B;AAgB5B;;GAEG;AACH;IAAsC,oCAAgB;IAGpD;;;OAGG;IACH,0BAAmB,UAA2E;QAA9F,YACE,kBAAM,UAAU,CAAC,SAOlB;QALC,IAAI,KAAI,CAAC,oBAAoB,KAAK,aAAa,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;SACjF;QAED,KAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,oBAAoB,CAAC;;IAC/D,CAAC;IAGD,sBAAW,kCAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,aAAa,CAAC;QACnC,CAAC;;;OAAA;IAMD,sBAAW,kDAAoB;QAJ/B;;;WAGG;aACH;YACE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;;;OAAA;IAED,gBAAgB;IACN,kDAAuB,GAAjC;QACE,WAAW;QACX,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACtC,CAAC;IACH,uBAAC;AAAD,CAAC,AAnCD,CAAsC,mCAAgB,GAmCrD;AAnCY,4CAAgB","sourcesContent":["import { DocNodeKind, DocNode } from './DocNode';\r\nimport { DocDeclarationReference } from './DocDeclarationReference';\r\nimport {\r\n DocInlineTagBase,\r\n IDocInlineTagBaseParsedParameters,\r\n IDocInlineTagBaseParameters\r\n} from './DocInlineTagBase';\r\n\r\n/**\r\n * Constructor parameters for {@link DocInheritDocTag}.\r\n */\r\nexport interface IDocInheritDocTagParameters extends IDocInlineTagBaseParameters {\r\n declarationReference?: DocDeclarationReference;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocInheritDocTag}.\r\n */\r\nexport interface IDocInheritDocTagParsedParameters extends IDocInlineTagBaseParsedParameters {\r\n declarationReference?: DocDeclarationReference;\r\n}\r\n\r\n/**\r\n * Represents an `{@inheritDoc}` tag.\r\n */\r\nexport class DocInheritDocTag extends DocInlineTagBase {\r\n private readonly _declarationReference: DocDeclarationReference | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocInheritDocTagParameters | IDocInheritDocTagParsedParameters) {\r\n super(parameters);\r\n\r\n if (this.tagNameWithUpperCase !== '@INHERITDOC') {\r\n throw new Error('DocInheritDocTag requires the tag name to be \"{@inheritDoc}\"');\r\n }\r\n\r\n this._declarationReference = parameters.declarationReference;\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.InheritDocTag;\r\n }\r\n\r\n /**\r\n * The declaration that the documentation will be inherited from.\r\n * If omitted, the documentation will be inherited from the parent class.\r\n */\r\n public get declarationReference(): DocDeclarationReference | undefined {\r\n return this._declarationReference;\r\n }\r\n\r\n /** @override */\r\n protected getChildNodesForContent(): ReadonlyArray<DocNode | undefined> {\r\n // abstract\r\n return [this._declarationReference];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,89 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocInlineTag = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
var DocInlineTagBase_1 = require("./DocInlineTagBase");
/**
* Represents a generic TSDoc inline tag, including custom tags.
*
* @remarks
* NOTE: Certain tags such as `{@link}` and `{@inheritDoc}` have specialized structures and parser rules,
* and thus are represented using {@link DocLinkTag} or {@link DocInheritDocTag} instead. However, if the
* specialized parser rule encounters a syntax error, but the outer framing is correct, then the parser constructs
* a generic `DocInlineTag` instead of `DocErrorText`. This means, for example, that it is possible sometimes for
* `DocInlineTag.tagName` to be `"@link"`.
*/
var DocInlineTag = /** @class */ (function (_super) {
__extends(DocInlineTag, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocInlineTag(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
if (parameters.tagContentExcerpt) {
_this._tagContentExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.InlineTag_TagContent,
content: parameters.tagContentExcerpt
});
}
}
else {
_this._tagContent = parameters.tagContent;
}
return _this;
}
Object.defineProperty(DocInlineTag.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.InlineTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocInlineTag.prototype, "tagContent", {
/**
* The tag content.
* @remarks
* For example, if the tag is `{@myTag x=12.34 y=56.78 }` then the tag content
* would be `x=12.34 y=56.78 `, including the trailing space but not the leading space.
*/
get: function () {
if (this._tagContent === undefined) {
if (this._tagContentExcerpt) {
this._tagContent = this._tagContentExcerpt.content.toString();
}
else {
return '';
}
}
return this._tagContent;
},
enumerable: false,
configurable: true
});
/** @override */
DocInlineTag.prototype.getChildNodesForContent = function () {
// abstract
return [this._tagContentExcerpt];
};
return DocInlineTag;
}(DocInlineTagBase_1.DocInlineTagBase));
exports.DocInlineTag = DocInlineTag;
//# sourceMappingURL=DocInlineTag.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocInlineTag.js","sourceRoot":"","sources":["../../src/nodes/DocInlineTag.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAiD;AAEjD,2CAAuD;AACvD,uDAI4B;AAgB5B;;;;;;;;;GASG;AACH;IAAkC,gCAAgB;IAIhD;;;OAGG;IACH,sBAAmB,UAAmE;QAAtF,YACE,kBAAM,UAAU,CAAC,SAalB;QAXC,IAAI,iBAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAC1C,IAAI,UAAU,CAAC,iBAAiB,EAAE;gBAChC,KAAI,CAAC,kBAAkB,GAAG,IAAI,uBAAU,CAAC;oBACvC,aAAa,EAAE,KAAI,CAAC,aAAa;oBACjC,WAAW,EAAE,wBAAW,CAAC,oBAAoB;oBAC7C,OAAO,EAAE,UAAU,CAAC,iBAAiB;iBACtC,CAAC,CAAC;aACJ;SACF;aAAM;YACL,KAAI,CAAC,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC;SAC1C;;IACH,CAAC;IAGD,sBAAW,8BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;;;OAAA;IAQD,sBAAW,oCAAU;QANrB;;;;;WAKG;aACH;YACE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;gBAClC,IAAI,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;iBAC/D;qBAAM;oBACL,OAAO,EAAE,CAAC;iBACX;aACF;YACD,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;;;OAAA;IAED,gBAAgB;IACN,8CAAuB,GAAjC;QACE,WAAW;QACX,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnC,CAAC;IACH,mBAAC;AAAD,CAAC,AAnDD,CAAkC,mCAAgB,GAmDjD;AAnDY,oCAAY","sourcesContent":["import { DocNodeKind, DocNode } from './DocNode';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\nimport {\r\n IDocInlineTagBaseParameters,\r\n IDocInlineTagBaseParsedParameters,\r\n DocInlineTagBase\r\n} from './DocInlineTagBase';\r\n\r\n/**\r\n * Constructor parameters for {@link DocInlineTag}.\r\n */\r\nexport interface IDocInlineTagParameters extends IDocInlineTagBaseParameters {\r\n tagContent: string;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocInlineTag}.\r\n */\r\nexport interface IDocInlineTagParsedParameters extends IDocInlineTagBaseParsedParameters {\r\n tagContentExcerpt?: TokenSequence;\r\n}\r\n\r\n/**\r\n * Represents a generic TSDoc inline tag, including custom tags.\r\n *\r\n * @remarks\r\n * NOTE: Certain tags such as `{@link}` and `{@inheritDoc}` have specialized structures and parser rules,\r\n * and thus are represented using {@link DocLinkTag} or {@link DocInheritDocTag} instead. However, if the\r\n * specialized parser rule encounters a syntax error, but the outer framing is correct, then the parser constructs\r\n * a generic `DocInlineTag` instead of `DocErrorText`. This means, for example, that it is possible sometimes for\r\n * `DocInlineTag.tagName` to be `\"@link\"`.\r\n */\r\nexport class DocInlineTag extends DocInlineTagBase {\r\n private _tagContent: string | undefined;\r\n private readonly _tagContentExcerpt: DocExcerpt | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocInlineTagParameters | IDocInlineTagParsedParameters) {\r\n super(parameters);\r\n\r\n if (DocNode.isParsedParameters(parameters)) {\r\n if (parameters.tagContentExcerpt) {\r\n this._tagContentExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.InlineTag_TagContent,\r\n content: parameters.tagContentExcerpt\r\n });\r\n }\r\n } else {\r\n this._tagContent = parameters.tagContent;\r\n }\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.InlineTag;\r\n }\r\n\r\n /**\r\n * The tag content.\r\n * @remarks\r\n * For example, if the tag is `{@myTag x=12.34 y=56.78 }` then the tag content\r\n * would be `x=12.34 y=56.78 `, including the trailing space but not the leading space.\r\n */\r\n public get tagContent(): string {\r\n if (this._tagContent === undefined) {\r\n if (this._tagContentExcerpt) {\r\n this._tagContent = this._tagContentExcerpt.content.toString();\r\n } else {\r\n return '';\r\n }\r\n }\r\n return this._tagContent;\r\n }\r\n\r\n /** @override */\r\n protected getChildNodesForContent(): ReadonlyArray<DocNode | undefined> {\r\n // abstract\r\n return [this._tagContentExcerpt];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,106 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocInlineTagBase = void 0;
var DocNode_1 = require("./DocNode");
var StringChecks_1 = require("../parser/StringChecks");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* The abstract base class for {@link DocInlineTag}, {@link DocLinkTag}, and {@link DocInheritDocTag}.
*/
var DocInlineTagBase = /** @class */ (function (_super) {
__extends(DocInlineTagBase, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocInlineTagBase(parameters) {
var _this = _super.call(this, parameters) || this;
StringChecks_1.StringChecks.validateTSDocTagName(parameters.tagName);
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._openingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.InlineTag_OpeningDelimiter,
content: parameters.openingDelimiterExcerpt
});
_this._tagNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.InlineTag_TagName,
content: parameters.tagNameExcerpt
});
if (parameters.spacingAfterTagNameExcerpt) {
_this._spacingAfterTagNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterTagNameExcerpt
});
}
_this._closingDelimiterExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.InlineTag_ClosingDelimiter,
content: parameters.closingDelimiterExcerpt
});
}
_this._tagName = parameters.tagName;
_this._tagNameWithUpperCase = parameters.tagName.toUpperCase();
return _this;
}
Object.defineProperty(DocInlineTagBase.prototype, "tagName", {
/**
* The TSDoc tag name. TSDoc tag names start with an at-sign (`@`) followed
* by ASCII letters using "camelCase" capitalization.
*
* @remarks
* For example, if the inline tag is `{@link Guid.toString | the toString() method}`
* then the tag name would be `@link`.
*/
get: function () {
return this._tagName;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocInlineTagBase.prototype, "tagNameWithUpperCase", {
/**
* The TSDoc tag name in all capitals, which is used for performing
* case-insensitive comparisons or lookups.
*/
get: function () {
return this._tagNameWithUpperCase;
},
enumerable: false,
configurable: true
});
/** @override @sealed */
DocInlineTagBase.prototype.onGetChildNodes = function () {
return __spreadArrays([
this._openingDelimiterExcerpt,
this._tagNameExcerpt,
this._spacingAfterTagNameExcerpt
], this.getChildNodesForContent(), [
this._closingDelimiterExcerpt
]);
};
return DocInlineTagBase;
}(DocNode_1.DocNode));
exports.DocInlineTagBase = DocInlineTagBase;
//# sourceMappingURL=DocInlineTagBase.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,180 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocLinkTag = void 0;
var DocNode_1 = require("./DocNode");
var DocInlineTagBase_1 = require("./DocInlineTagBase");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents an `{@link}` tag.
*/
var DocLinkTag = /** @class */ (function (_super) {
__extends(DocLinkTag, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocLinkTag(parameters) {
var _this = _super.call(this, parameters) || this;
if (_this.tagNameWithUpperCase !== '@LINK') {
throw new Error('DocLinkTag requires the tag name to be "{@link}"');
}
_this._codeDestination = parameters.codeDestination;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
if (parameters.codeDestination !== undefined && parameters.urlDestinationExcerpt !== undefined) {
throw new Error('Either the codeDestination or the urlDestination may be specified, but not both');
}
if (parameters.urlDestinationExcerpt) {
_this._urlDestinationExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.LinkTag_UrlDestination,
content: parameters.urlDestinationExcerpt
});
}
if (parameters.spacingAfterDestinationExcerpt) {
_this._spacingAfterDestinationExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterDestinationExcerpt
});
}
if (parameters.pipeExcerpt) {
_this._pipeExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.LinkTag_Pipe,
content: parameters.pipeExcerpt
});
}
if (parameters.spacingAfterPipeExcerpt) {
_this._spacingAfterPipeExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterPipeExcerpt
});
}
if (parameters.linkTextExcerpt) {
_this._linkTextExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.LinkTag_LinkText,
content: parameters.linkTextExcerpt
});
}
if (parameters.spacingAfterLinkTextExcerpt) {
_this._spacingAfterLinkTextExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterLinkTextExcerpt
});
}
}
else {
if (parameters.codeDestination !== undefined && parameters.urlDestination !== undefined) {
throw new Error('Either the codeDestination or the urlDestination may be specified, but not both');
}
_this._urlDestination = parameters.urlDestination;
_this._linkText = parameters.linkText;
}
return _this;
}
Object.defineProperty(DocLinkTag.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.LinkTag;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocLinkTag.prototype, "codeDestination", {
/**
* If the link tag refers to a declaration, this returns the declaration reference object;
* otherwise this property is undefined.
* @remarks
* Either the `codeDestination` or the `urlDestination` property will be defined, but never both.
*/
get: function () {
return this._codeDestination;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocLinkTag.prototype, "urlDestination", {
/**
* If the link tag was an ordinary URI, this returns the URL string;
* otherwise this property is undefined.
* @remarks
* Either the `codeDestination` or the `urlDestination` property will be defined, but never both.
*/
get: function () {
if (this._urlDestination === undefined) {
if (this._urlDestinationExcerpt !== undefined) {
this._urlDestination = this._urlDestinationExcerpt.content.toString();
}
}
return this._urlDestination;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocLinkTag.prototype, "linkText", {
/**
* An optional text string that is the hyperlink text. If omitted, the documentation
* renderer will use a default string based on the link itself (e.g. the URL text
* or the declaration identifier).
*
* @remarks
*
* In HTML, the hyperlink can include leading/trailing space characters around the link text.
* For example, this HTML will cause a web browser to `y` and also the space character before
* and after it:
*
* ```html
* x<a href="#Button"> y </a> z
* ```
*
* Unlike HTML, TSDoc trims leading/trailing spaces. For example, this TSDoc will be
* displayed `xy z` and underline only the `y` character:
*
* ```
* x{@link Button | y } z
* ```
*/
get: function () {
if (this._linkText === undefined) {
if (this._linkTextExcerpt !== undefined) {
this._linkText = this._linkTextExcerpt.content.toString();
}
}
return this._linkText;
},
enumerable: false,
configurable: true
});
/** @override */
DocLinkTag.prototype.getChildNodesForContent = function () {
// abstract
return [
this._codeDestination,
this._urlDestinationExcerpt,
this._spacingAfterDestinationExcerpt,
this._pipeExcerpt,
this._spacingAfterPipeExcerpt,
this._linkTextExcerpt,
this._spacingAfterLinkTextExcerpt
];
};
return DocLinkTag;
}(DocInlineTagBase_1.DocInlineTagBase));
exports.DocLinkTag = DocLinkTag;
//# sourceMappingURL=DocLinkTag.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,118 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocMemberIdentifier = void 0;
var DocNode_1 = require("./DocNode");
var StringChecks_1 = require("../parser/StringChecks");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* A member identifier is part of a {@link DocMemberReference}.
*/
var DocMemberIdentifier = /** @class */ (function (_super) {
__extends(DocMemberIdentifier, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocMemberIdentifier(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
if (parameters.leftQuoteExcerpt) {
_this._leftQuoteExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.MemberIdentifier_LeftQuote,
content: parameters.leftQuoteExcerpt
});
}
_this._identifierExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.MemberIdentifier_Identifier,
content: parameters.identifierExcerpt
});
if (parameters.rightQuoteExcerpt) {
_this._rightQuoteExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.MemberIdentifier_RightQuote,
content: parameters.rightQuoteExcerpt
});
}
}
else {
_this._identifier = parameters.identifier;
}
return _this;
}
/**
* Tests whether the input string can be used without quotes as a member identifier in a declaration reference.
* If not, {@link DocMemberIdentifier.hasQuotes} will be required.
*
* @remarks
* In order to be used without quotes, the string must follow the identifier syntax for ECMAScript / TypeScript,
* and it must not be one of the reserved words used for system selectors (such as `instance`, `static`,
* `constructor`, etc).
*/
DocMemberIdentifier.isValidIdentifier = function (identifier) {
return !StringChecks_1.StringChecks.explainIfInvalidUnquotedMemberIdentifier(identifier);
};
Object.defineProperty(DocMemberIdentifier.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.MemberIdentifier;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberIdentifier.prototype, "identifier", {
/**
* The identifier string without any quote encoding.
*
* @remarks
* If the value is not a valid ECMAScript identifier, it will be quoted as a
* string literal during rendering.
*/
get: function () {
if (this._identifier === undefined) {
this._identifier = this._identifierExcerpt.content.toString();
}
return this._identifier;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberIdentifier.prototype, "hasQuotes", {
/**
* Returns true if the identifier will be rendered as a quoted string literal
* instead of as a programming language identifier. This is required if the
* `identifier` property is not a valid ECMAScript identifier.
*/
get: function () {
if (this._identifierExcerpt) {
return !!this._leftQuoteExcerpt;
}
else {
return !DocMemberIdentifier.isValidIdentifier(this.identifier);
}
},
enumerable: false,
configurable: true
});
/** @override */
DocMemberIdentifier.prototype.onGetChildNodes = function () {
return [this._leftQuoteExcerpt, this._identifierExcerpt, this._rightQuoteExcerpt];
};
return DocMemberIdentifier;
}(DocNode_1.DocNode));
exports.DocMemberIdentifier = DocMemberIdentifier;
//# sourceMappingURL=DocMemberIdentifier.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,193 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocMemberReference = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* A {@link DocDeclarationReference | declaration reference} includes a chain of
* member references represented using `DocMemberReference` nodes.
*
* @remarks
* For example, `example-library#ui.controls.Button.(render:static)` is a
* declaration reference that contains three member references:
* `ui`, `.controls`, and `.Button`, and `.(render:static)`.
*/
var DocMemberReference = /** @class */ (function (_super) {
__extends(DocMemberReference, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocMemberReference(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._hasDot = !!parameters.dotExcerpt;
if (parameters.dotExcerpt) {
_this._dotExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.MemberReference_Dot,
content: parameters.dotExcerpt
});
}
if (parameters.spacingAfterDotExcerpt) {
_this._spacingAfterDotExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterDotExcerpt
});
}
if (parameters.leftParenthesisExcerpt) {
_this._leftParenthesisExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.MemberReference_LeftParenthesis,
content: parameters.leftParenthesisExcerpt
});
}
if (parameters.spacingAfterLeftParenthesisExcerpt) {
_this._spacingAfterLeftParenthesisExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterLeftParenthesisExcerpt
});
}
if (parameters.spacingAfterMemberExcerpt) {
_this._spacingAfterMemberExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterMemberExcerpt
});
}
if (parameters.colonExcerpt) {
_this._colonExcerpt = new DocExcerpt_1.DocExcerpt({
excerptKind: DocExcerpt_1.ExcerptKind.MemberReference_Colon,
configuration: _this.configuration,
content: parameters.colonExcerpt
});
}
if (parameters.spacingAfterColonExcerpt) {
_this._spacingAfterColonExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterColonExcerpt
});
}
if (parameters.spacingAfterSelectorExcerpt) {
_this._spacingAfterSelectorExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterSelectorExcerpt
});
}
if (parameters.rightParenthesisExcerpt) {
_this._rightParenthesisExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.MemberReference_RightParenthesis,
content: parameters.rightParenthesisExcerpt
});
}
if (parameters.spacingAfterRightParenthesisExcerpt) {
_this._spacingAfterRightParenthesisExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterRightParenthesisExcerpt
});
}
}
else {
_this._hasDot = parameters.hasDot;
}
_this._memberIdentifier = parameters.memberIdentifier;
_this._memberSymbol = parameters.memberSymbol;
_this._selector = parameters.selector;
return _this;
}
Object.defineProperty(DocMemberReference.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.MemberReference;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberReference.prototype, "hasDot", {
/**
* True if this member reference is preceded by a dot (".") token.
* It should be false only for the first member in the chain.
*/
get: function () {
return this._hasDot;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberReference.prototype, "memberIdentifier", {
/**
* The identifier for the referenced member.
* @remarks
* Either `memberIdentifier` or `memberSymbol` may be specified, but not both.
*/
get: function () {
return this._memberIdentifier;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberReference.prototype, "memberSymbol", {
/**
* The ECMAScript 6 symbol expression, which may be used instead of an identifier
* to indicate the referenced member.
* @remarks
* Either `memberIdentifier` or `memberSymbol` may be specified, but not both.
*/
get: function () {
return this._memberSymbol;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberReference.prototype, "selector", {
/**
* A TSDoc selector, which may be optionally when the identifier or symbol is insufficient
* to unambiguously determine the referenced declaration.
*/
get: function () {
return this._selector;
},
enumerable: false,
configurable: true
});
/** @override */
DocMemberReference.prototype.onGetChildNodes = function () {
return [
this._dotExcerpt,
this._spacingAfterDotExcerpt,
this._leftParenthesisExcerpt,
this._spacingAfterLeftParenthesisExcerpt,
this._memberIdentifier,
this._memberSymbol,
this._spacingAfterMemberExcerpt,
this._colonExcerpt,
this._spacingAfterColonExcerpt,
this._selector,
this._spacingAfterSelectorExcerpt,
this._rightParenthesisExcerpt,
this._spacingAfterRightParenthesisExcerpt
];
};
return DocMemberReference;
}(DocNode_1.DocNode));
exports.DocMemberReference = DocMemberReference;
//# sourceMappingURL=DocMemberReference.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,172 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocMemberSelector = exports.SelectorKind = void 0;
var DocNode_1 = require("./DocNode");
var StringChecks_1 = require("../parser/StringChecks");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Kinds of TSDoc selectors.
*/
var SelectorKind;
(function (SelectorKind) {
/**
* Used in cases where the parser encounters a string that is incorrect but
* valid enough that a DocMemberSelector node was created.
*/
SelectorKind["Error"] = "error";
/**
* System selectors are always all lower-case and belong to a set of predefined label names.
*/
SelectorKind["System"] = "system";
/**
* Index selectors are integer numbers. They provide an alternative way of referencing
* overloaded functions, based on the order in which the declarations appear in
* a source file.
*
* @remarks
* Warning: Index selectors are not recommended; they are intended to provide a temporary
* workaround for situations where an external library neglected to declare a `{@label}` tag
* and cannot be easily fixed.
*/
SelectorKind["Index"] = "index";
/**
* Label selectors refer to labels created using the `{@label}` TSDoc tag.
* The labels are always comprised of upper-case letters or numbers separated by underscores,
* and the first character cannot be a number.
*/
SelectorKind["Label"] = "label";
})(SelectorKind = exports.SelectorKind || (exports.SelectorKind = {}));
/**
*/
var DocMemberSelector = /** @class */ (function (_super) {
__extends(DocMemberSelector, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocMemberSelector(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._selectorExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.MemberSelector,
content: parameters.selectorExcerpt
});
_this._selector = parameters.selectorExcerpt.toString();
}
else {
_this._selector = parameters.selector;
}
_this._selectorKind = SelectorKind.Error;
_this._errorMessage = undefined;
// The logic below will always either (1) assign selectorKind or (2) else assign an errorMessage
if (_this._selector.length === 0) {
_this._errorMessage = 'The selector cannot be an empty string';
}
else if (DocMemberSelector._likeIndexSelectorRegExp.test(_this._selector)) {
// It looks like an index selector
if (DocMemberSelector._indexSelectorRegExp.test(_this._selector)) {
_this._selectorKind = SelectorKind.Index;
}
else {
_this._errorMessage = 'If the selector begins with a number, it must be a positive integer value';
}
}
else if (DocMemberSelector._likeLabelSelectorRegExp.test(_this._selector)) {
// It looks like a label selector
if (DocMemberSelector._labelSelectorRegExp.test(_this._selector)) {
_this._selectorKind = SelectorKind.Label;
}
else {
_this._errorMessage =
'A label selector must be comprised of upper case letters, numbers,' +
' and underscores and must not start with a number';
}
}
else {
if (StringChecks_1.StringChecks.isSystemSelector(_this._selector)) {
_this._selectorKind = SelectorKind.System;
}
else if (DocMemberSelector._likeSystemSelectorRegExp.test(_this._selector)) {
// It looks like a system selector, but is not
_this._errorMessage =
"The selector " + JSON.stringify(_this._selector) +
" is not a recognized TSDoc system selector name";
}
else {
// It doesn't look like anything we recognize
_this._errorMessage = 'Invalid syntax for selector';
}
}
return _this;
}
Object.defineProperty(DocMemberSelector.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.MemberSelector;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberSelector.prototype, "selector", {
/**
* The text representation of the selector.
*
* @remarks
* For system selectors, it will be a predefined lower case name.
* For label selectors, it will be an upper case name defined using the `{@label}` tag.
* For index selectors, it will be a positive integer.
*/
get: function () {
return this._selector;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberSelector.prototype, "selectorKind", {
/**
* Indicates the kind of selector.
*/
get: function () {
return this._selectorKind;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberSelector.prototype, "errorMessage", {
/**
* If the `selectorKind` is `SelectorKind.Error`, this string will be defined and provide
* more detail about why the string was not valid.
*/
get: function () {
return this._errorMessage;
},
enumerable: false,
configurable: true
});
/** @override */
DocMemberSelector.prototype.onGetChildNodes = function () {
return [this._selectorExcerpt];
};
DocMemberSelector._likeIndexSelectorRegExp = /^[0-9]/;
DocMemberSelector._indexSelectorRegExp = /^[1-9][0-9]*$/;
DocMemberSelector._likeLabelSelectorRegExp = /^[A-Z_]/u;
DocMemberSelector._labelSelectorRegExp = /^[A-Z_][A-Z0-9_]+$/;
DocMemberSelector._likeSystemSelectorRegExp = /^[a-z]+$/u;
return DocMemberSelector;
}(DocNode_1.DocNode));
exports.DocMemberSelector = DocMemberSelector;
//# sourceMappingURL=DocMemberSelector.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,90 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocMemberSymbol = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents a reference to an ECMAScript 6 symbol that is used
* to identify a member declaration.
*
* @example
*
* In the declaration reference `{@link MyClass.([MySymbols.example]:instance)}`,
* the member symbol `[MySymbols.example]` might be used to reference a property
* of the class.
*/
var DocMemberSymbol = /** @class */ (function (_super) {
__extends(DocMemberSymbol, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocMemberSymbol(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._leftBracketExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.DocMemberSymbol_LeftBracket,
content: parameters.leftBracketExcerpt
});
if (parameters.spacingAfterLeftBracketExcerpt) {
_this._spacingAfterLeftBracketExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterLeftBracketExcerpt
});
}
_this._rightBracketExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.DocMemberSymbol_RightBracket,
content: parameters.rightBracketExcerpt
});
}
_this._symbolReference = parameters.symbolReference;
return _this;
}
Object.defineProperty(DocMemberSymbol.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.MemberSymbol;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocMemberSymbol.prototype, "symbolReference", {
/**
* The declaration reference for the ECMAScript 6 symbol that will act as
* the identifier for the member.
*/
get: function () {
return this._symbolReference;
},
enumerable: false,
configurable: true
});
/** @override */
DocMemberSymbol.prototype.onGetChildNodes = function () {
return [
this._leftBracketExcerpt,
this._spacingAfterLeftBracketExcerpt,
this._symbolReference,
this._rightBracketExcerpt
];
};
return DocMemberSymbol;
}(DocNode_1.DocNode));
exports.DocMemberSymbol = DocMemberSymbol;
//# sourceMappingURL=DocMemberSymbol.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocMemberSymbol.js","sourceRoot":"","sources":["../../src/nodes/DocMemberSymbol.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA+F;AAG/F,2CAAuD;AAqBvD;;;;;;;;;GASG;AACH;IAAqC,mCAAO;IAQ1C;;;OAGG;IACH,yBAAmB,UAAyE;QAA5F,YACE,kBAAM,UAAU,CAAC,SAyBlB;QAvBC,IAAI,iBAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAC1C,KAAI,CAAC,mBAAmB,GAAG,IAAI,uBAAU,CAAC;gBACxC,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,2BAA2B;gBACpD,OAAO,EAAE,UAAU,CAAC,kBAAkB;aACvC,CAAC,CAAC;YAEH,IAAI,UAAU,CAAC,8BAA8B,EAAE;gBAC7C,KAAI,CAAC,+BAA+B,GAAG,IAAI,uBAAU,CAAC;oBACpD,aAAa,EAAE,KAAI,CAAC,aAAa;oBACjC,WAAW,EAAE,wBAAW,CAAC,OAAO;oBAChC,OAAO,EAAE,UAAU,CAAC,8BAA8B;iBACnD,CAAC,CAAC;aACJ;YAED,KAAI,CAAC,oBAAoB,GAAG,IAAI,uBAAU,CAAC;gBACzC,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,4BAA4B;gBACrD,OAAO,EAAE,UAAU,CAAC,mBAAmB;aACxC,CAAC,CAAC;SACJ;QAED,KAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC;;IACrD,CAAC;IAGD,sBAAW,iCAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,YAAY,CAAC;QAClC,CAAC;;;OAAA;IAMD,sBAAW,4CAAe;QAJ1B;;;WAGG;aACH;YACE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;;;OAAA;IAED,gBAAgB;IACN,yCAAe,GAAzB;QACE,OAAO;YACL,IAAI,CAAC,mBAAmB;YACxB,IAAI,CAAC,+BAA+B;YACpC,IAAI,CAAC,gBAAgB;YACrB,IAAI,CAAC,oBAAoB;SAC1B,CAAC;IACJ,CAAC;IACH,sBAAC;AAAD,CAAC,AA9DD,CAAqC,iBAAO,GA8D3C;AA9DY,0CAAe","sourcesContent":["import { DocNodeKind, DocNode, IDocNodeParameters, IDocNodeParsedParameters } from './DocNode';\r\nimport { DocDeclarationReference } from './DocDeclarationReference';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\n\r\n/**\r\n * Constructor parameters for {@link DocMemberSymbol}.\r\n */\r\nexport interface IDocMemberSymbolParameters extends IDocNodeParameters {\r\n symbolReference: DocDeclarationReference;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocMemberSymbol}.\r\n */\r\nexport interface IDocMemberSymbolParsedParameters extends IDocNodeParsedParameters {\r\n leftBracketExcerpt: TokenSequence;\r\n spacingAfterLeftBracketExcerpt?: TokenSequence;\r\n\r\n symbolReference: DocDeclarationReference;\r\n\r\n rightBracketExcerpt: TokenSequence;\r\n}\r\n\r\n/**\r\n * Represents a reference to an ECMAScript 6 symbol that is used\r\n * to identify a member declaration.\r\n *\r\n * @example\r\n *\r\n * In the declaration reference `{@link MyClass.([MySymbols.example]:instance)}`,\r\n * the member symbol `[MySymbols.example]` might be used to reference a property\r\n * of the class.\r\n */\r\nexport class DocMemberSymbol extends DocNode {\r\n private readonly _leftBracketExcerpt: DocExcerpt | undefined;\r\n private readonly _spacingAfterLeftBracketExcerpt: DocExcerpt | undefined;\r\n\r\n private readonly _symbolReference: DocDeclarationReference;\r\n\r\n private readonly _rightBracketExcerpt: DocExcerpt | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocMemberSymbolParameters | IDocMemberSymbolParsedParameters) {\r\n super(parameters);\r\n\r\n if (DocNode.isParsedParameters(parameters)) {\r\n this._leftBracketExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.DocMemberSymbol_LeftBracket,\r\n content: parameters.leftBracketExcerpt\r\n });\r\n\r\n if (parameters.spacingAfterLeftBracketExcerpt) {\r\n this._spacingAfterLeftBracketExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.Spacing,\r\n content: parameters.spacingAfterLeftBracketExcerpt\r\n });\r\n }\r\n\r\n this._rightBracketExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.DocMemberSymbol_RightBracket,\r\n content: parameters.rightBracketExcerpt\r\n });\r\n }\r\n\r\n this._symbolReference = parameters.symbolReference;\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.MemberSymbol;\r\n }\r\n\r\n /**\r\n * The declaration reference for the ECMAScript 6 symbol that will act as\r\n * the identifier for the member.\r\n */\r\n public get symbolReference(): DocDeclarationReference {\r\n return this._symbolReference;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [\r\n this._leftBracketExcerpt,\r\n this._spacingAfterLeftBracketExcerpt,\r\n this._symbolReference,\r\n this._rightBracketExcerpt\r\n ];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,79 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocNode = exports.DocNodeKind = void 0;
/**
* Indicates the type of {@link DocNode}.
*
* @remarks
* When creating custom subclasses of `DocNode`, it's recommended to create your own const enum to identify them.
* To avoid naming conflicts between projects, the enum value should be a string comprised of your full
* NPM package name, followed by a "#" symbol, followed by the class name (without the "Doc" prefix).
*/
var DocNodeKind;
(function (DocNodeKind) {
DocNodeKind["Block"] = "Block";
DocNodeKind["BlockTag"] = "BlockTag";
DocNodeKind["Excerpt"] = "Excerpt";
DocNodeKind["FencedCode"] = "FencedCode";
DocNodeKind["CodeSpan"] = "CodeSpan";
DocNodeKind["Comment"] = "Comment";
DocNodeKind["DeclarationReference"] = "DeclarationReference";
DocNodeKind["ErrorText"] = "ErrorText";
DocNodeKind["EscapedText"] = "EscapedText";
DocNodeKind["HtmlAttribute"] = "HtmlAttribute";
DocNodeKind["HtmlEndTag"] = "HtmlEndTag";
DocNodeKind["HtmlStartTag"] = "HtmlStartTag";
DocNodeKind["InheritDocTag"] = "InheritDocTag";
DocNodeKind["InlineTag"] = "InlineTag";
DocNodeKind["LinkTag"] = "LinkTag";
DocNodeKind["MemberIdentifier"] = "MemberIdentifier";
DocNodeKind["MemberReference"] = "MemberReference";
DocNodeKind["MemberSelector"] = "MemberSelector";
DocNodeKind["MemberSymbol"] = "MemberSymbol";
DocNodeKind["Paragraph"] = "Paragraph";
DocNodeKind["ParamBlock"] = "ParamBlock";
DocNodeKind["ParamCollection"] = "ParamCollection";
DocNodeKind["PlainText"] = "PlainText";
DocNodeKind["Section"] = "Section";
DocNodeKind["SoftBreak"] = "SoftBreak";
})(DocNodeKind = exports.DocNodeKind || (exports.DocNodeKind = {}));
/**
* The base class for the parser's Abstract Syntax Tree nodes.
*/
var DocNode = /** @class */ (function () {
function DocNode(parameters) {
this.configuration = parameters.configuration;
}
/**
* Returns the list of child nodes for this node. This is useful for visitors that want
* to scan the tree looking for nodes of a specific type, without having to process
* intermediary nodes.
*/
DocNode.prototype.getChildNodes = function () {
// Do this sanity check here, since the constructor cannot access abstract members
this.configuration.docNodeManager.throwIfNotRegisteredKind(this.kind);
return this.onGetChildNodes().filter(function (x) { return x !== undefined; });
};
/**
* Overridden by child classes to implement {@link DocNode.getChildNodes}.
* @virtual
*/
DocNode.prototype.onGetChildNodes = function () {
return [];
};
/**
* A type guard that returns true if the input uses the `IDocNodeParsedParameters` (parser scenario).
*
* @remarks
* There are two scenarios for constructing `DocNode` objects. The "builder scenario" constructs the object based on
* literal strings, does NOT create DocExcerpt child nodes, and generally uses the {@link IDocNodeParameters}
* hierarchy for its constructor parameters. The "parser scenario" constructs the object by parsing a TypeScript
* source file, does create DocExcerpt child nodes, and generally uses the {@link IDocNodeParsedParameters} hierarchy.
*/
DocNode.isParsedParameters = function (parameters) {
return parameters.parsed === true;
};
return DocNode;
}());
exports.DocNode = DocNode;
//# sourceMappingURL=DocNode.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,78 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocNodeContainer = void 0;
var DocNode_1 = require("./DocNode");
/**
* DocNodeContainer is the base class for DocNode classes that allow arbitrary child nodes to be added by the consumer.
* The child classes are {@link DocParagraph} and {@link DocSection}.
*/
var DocNodeContainer = /** @class */ (function (_super) {
__extends(DocNodeContainer, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocNodeContainer(parameters, childNodes) {
var _this = _super.call(this, parameters) || this;
_this._nodes = [];
if (childNodes !== undefined && childNodes.length > 0) {
_this.appendNodes(childNodes);
}
return _this;
}
Object.defineProperty(DocNodeContainer.prototype, "nodes", {
/**
* The nodes that were added to this container.
*/
get: function () {
return this._nodes;
},
enumerable: false,
configurable: true
});
/**
* Append a node to the container.
*/
DocNodeContainer.prototype.appendNode = function (docNode) {
if (!this.configuration.docNodeManager.isAllowedChild(this.kind, docNode.kind)) {
throw new Error("The TSDocConfiguration does not allow a " + this.kind + " node to" +
(" contain a node of type " + docNode.kind));
}
this._nodes.push(docNode);
};
/**
* Append nodes to the container.
*/
DocNodeContainer.prototype.appendNodes = function (docNodes) {
for (var _i = 0, docNodes_1 = docNodes; _i < docNodes_1.length; _i++) {
var docNode = docNodes_1[_i];
this.appendNode(docNode);
}
};
/**
* Remove all nodes from the container.
*/
DocNodeContainer.prototype.clearNodes = function () {
this._nodes.length = 0;
};
/** @override */
DocNodeContainer.prototype.onGetChildNodes = function () {
return this._nodes;
};
return DocNodeContainer;
}(DocNode_1.DocNode));
exports.DocNodeContainer = DocNodeContainer;
//# sourceMappingURL=DocNodeContainer.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocNodeContainer.js","sourceRoot":"","sources":["../../src/nodes/DocNodeContainer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAkF;AAYlF;;;GAGG;AACH;IAA+C,oCAAO;IAGpD;;;OAGG;IACH,0BACE,UAA2E,EAC3E,UAAmC;QAFrC,YAIE,kBAAM,UAAU,CAAC,SAKlB;QAfgB,YAAM,GAAc,EAAE,CAAC;QAYtC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACrD,KAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SAC9B;;IACH,CAAC;IAKD,sBAAW,mCAAK;QAHhB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;;;OAAA;IAED;;OAEG;IACI,qCAAU,GAAjB,UAAkB,OAAgB;QAChC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9E,MAAM,IAAI,KAAK,CACb,6CAA2C,IAAI,CAAC,IAAI,aAAU;iBAC5D,6BAA2B,OAAO,CAAC,IAAM,CAAA,CAC5C,CAAC;SACH;QAED,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,sCAAW,GAAlB,UAAmB,QAAgC;QACjD,KAAsB,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;YAA3B,IAAM,OAAO,iBAAA;YAChB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAC1B;IACH,CAAC;IAED;;OAEG;IACI,qCAAU,GAAjB;QACE,IAAI,CAAC,MAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,gBAAgB;IACN,0CAAe,GAAzB;QACE,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACH,uBAAC;AAAD,CAAC,AA3DD,CAA+C,iBAAO,GA2DrD;AA3DqB,4CAAgB","sourcesContent":["import { DocNode, IDocNodeParameters, IDocNodeParsedParameters } from './DocNode';\r\n\r\n/**\r\n * Constructor parameters for {@link DocNodeContainer}.\r\n */\r\nexport interface IDocNodeContainerParameters extends IDocNodeParameters {}\r\n\r\n/**\r\n * Constructor parameters for {@link DocNodeContainer}.\r\n */\r\nexport interface IDocNodeContainerParsedParameters extends IDocNodeParsedParameters {}\r\n\r\n/**\r\n * DocNodeContainer is the base class for DocNode classes that allow arbitrary child nodes to be added by the consumer.\r\n * The child classes are {@link DocParagraph} and {@link DocSection}.\r\n */\r\nexport abstract class DocNodeContainer extends DocNode {\r\n private readonly _nodes: DocNode[] = [];\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(\r\n parameters: IDocNodeContainerParameters | IDocNodeContainerParsedParameters,\r\n childNodes?: ReadonlyArray<DocNode>\r\n ) {\r\n super(parameters);\r\n\r\n if (childNodes !== undefined && childNodes.length > 0) {\r\n this.appendNodes(childNodes);\r\n }\r\n }\r\n\r\n /**\r\n * The nodes that were added to this container.\r\n */\r\n public get nodes(): ReadonlyArray<DocNode> {\r\n return this._nodes;\r\n }\r\n\r\n /**\r\n * Append a node to the container.\r\n */\r\n public appendNode(docNode: DocNode): void {\r\n if (!this.configuration.docNodeManager.isAllowedChild(this.kind, docNode.kind)) {\r\n throw new Error(\r\n `The TSDocConfiguration does not allow a ${this.kind} node to` +\r\n ` contain a node of type ${docNode.kind}`\r\n );\r\n }\r\n\r\n this._nodes!.push(docNode);\r\n }\r\n\r\n /**\r\n * Append nodes to the container.\r\n */\r\n public appendNodes(docNodes: ReadonlyArray<DocNode>): void {\r\n for (const docNode of docNodes) {\r\n this.appendNode(docNode);\r\n }\r\n }\r\n\r\n /**\r\n * Remove all nodes from the container.\r\n */\r\n public clearNodes(): void {\r\n this._nodes!.length = 0;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return this._nodes;\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,44 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocParagraph = void 0;
var DocNode_1 = require("./DocNode");
var DocNodeContainer_1 = require("./DocNodeContainer");
/**
* Represents a paragraph of text, similar to a `<p>` element in HTML.
* Like CommonMark, the TSDoc syntax uses blank lines to delineate paragraphs
* instead of explicitly notating them.
*/
var DocParagraph = /** @class */ (function (_super) {
__extends(DocParagraph, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocParagraph(parameters, childNodes) {
return _super.call(this, parameters, childNodes) || this;
}
Object.defineProperty(DocParagraph.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.Paragraph;
},
enumerable: false,
configurable: true
});
return DocParagraph;
}(DocNodeContainer_1.DocNodeContainer));
exports.DocParagraph = DocParagraph;
//# sourceMappingURL=DocParagraph.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocParagraph.js","sourceRoot":"","sources":["../../src/nodes/DocParagraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAiD;AACjD,uDAAmF;AAOnF;;;;GAIG;AACH;IAAkC,gCAAgB;IAChD;;;OAGG;IACH,sBAAmB,UAAmC,EAAE,UAAmC;eACzF,kBAAM,UAAU,EAAE,UAAU,CAAC;IAC/B,CAAC;IAGD,sBAAW,8BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;;;OAAA;IACH,mBAAC;AAAD,CAAC,AAbD,CAAkC,mCAAgB,GAajD;AAbY,oCAAY","sourcesContent":["import { DocNodeKind, DocNode } from './DocNode';\r\nimport { DocNodeContainer, IDocNodeContainerParameters } from './DocNodeContainer';\r\n\r\n/**\r\n * Constructor parameters for {@link DocParagraph}.\r\n */\r\nexport interface IDocParagraphParameters extends IDocNodeContainerParameters {}\r\n\r\n/**\r\n * Represents a paragraph of text, similar to a `<p>` element in HTML.\r\n * Like CommonMark, the TSDoc syntax uses blank lines to delineate paragraphs\r\n * instead of explicitly notating them.\r\n */\r\nexport class DocParagraph extends DocNodeContainer {\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocParagraphParameters, childNodes?: ReadonlyArray<DocNode>) {\r\n super(parameters, childNodes);\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.Paragraph;\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,144 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocParamBlock = void 0;
var DocNode_1 = require("./DocNode");
var DocBlock_1 = require("./DocBlock");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents a parsed `@param` or `@typeParam` block, which provides a description for a
* function parameter.
*/
var DocParamBlock = /** @class */ (function (_super) {
__extends(DocParamBlock, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocParamBlock(parameters) {
var _this = _super.call(this, parameters) || this;
_this._parameterName = parameters.parameterName;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
if (parameters.spacingBeforeParameterNameExcerpt) {
_this._spacingBeforeParameterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingBeforeParameterNameExcerpt
});
}
if (parameters.unsupportedJsdocTypeBeforeParameterNameExcerpt) {
_this._unsupportedJsdocTypeBeforeParameterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.NonstandardText,
content: parameters.unsupportedJsdocTypeBeforeParameterNameExcerpt
});
}
if (parameters.unsupportedJsdocOptionalNameOpenBracketExcerpt) {
_this._unsupportedJsdocOptionalNameOpenBracketExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.NonstandardText,
content: parameters.unsupportedJsdocOptionalNameOpenBracketExcerpt
});
}
_this._parameterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.ParamBlock_ParameterName,
content: parameters.parameterNameExcerpt
});
if (parameters.unsupportedJsdocOptionalNameRestExcerpt) {
_this._unsupportedJsdocOptionalNameRestExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.NonstandardText,
content: parameters.unsupportedJsdocOptionalNameRestExcerpt
});
}
if (parameters.spacingAfterParameterNameExcerpt) {
_this._spacingAfterParameterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterParameterNameExcerpt
});
}
if (parameters.unsupportedJsdocTypeAfterParameterNameExcerpt) {
_this._unsupportedJsdocTypeAfterParameterNameExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.NonstandardText,
content: parameters.unsupportedJsdocTypeAfterParameterNameExcerpt
});
}
if (parameters.hyphenExcerpt) {
_this._hyphenExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.ParamBlock_Hyphen,
content: parameters.hyphenExcerpt
});
}
if (parameters.spacingAfterHyphenExcerpt) {
_this._spacingAfterHyphenExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.Spacing,
content: parameters.spacingAfterHyphenExcerpt
});
}
if (parameters.unsupportedJsdocTypeAfterHyphenExcerpt) {
_this._unsupportedJsdocTypeAfterHyphenExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.NonstandardText,
content: parameters.unsupportedJsdocTypeAfterHyphenExcerpt
});
}
}
return _this;
}
Object.defineProperty(DocParamBlock.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.ParamBlock;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocParamBlock.prototype, "parameterName", {
/**
* The name of the parameter that is being documented.
* For example "width" in `@param width - the width of the object`.
*/
get: function () {
return this._parameterName;
},
enumerable: false,
configurable: true
});
/** @override */
DocParamBlock.prototype.onGetChildNodes = function () {
return [
this.blockTag,
this._spacingBeforeParameterNameExcerpt,
this._unsupportedJsdocTypeBeforeParameterNameExcerpt,
this._unsupportedJsdocOptionalNameOpenBracketExcerpt,
this._parameterNameExcerpt,
this._unsupportedJsdocOptionalNameRestExcerpt,
this._spacingAfterParameterNameExcerpt,
this._unsupportedJsdocTypeAfterParameterNameExcerpt,
this._hyphenExcerpt,
this._spacingAfterHyphenExcerpt,
this._unsupportedJsdocTypeAfterHyphenExcerpt,
this.content
];
};
return DocParamBlock;
}(DocBlock_1.DocBlock));
exports.DocParamBlock = DocParamBlock;
//# sourceMappingURL=DocParamBlock.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,111 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocParamCollection = void 0;
var DocNode_1 = require("./DocNode");
/**
* Represents a collection of DocParamBlock objects and provides efficient operations for looking up the
* documentation for a specified parameter name.
*/
var DocParamCollection = /** @class */ (function (_super) {
__extends(DocParamCollection, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocParamCollection(parameters) {
var _this = _super.call(this, parameters) || this;
_this._blocks = [];
return _this;
}
Object.defineProperty(DocParamCollection.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.ParamCollection;
},
enumerable: false,
configurable: true
});
/**
* Provide an iterator for callers that support it.
*/
DocParamCollection.prototype[Symbol.iterator] = function () {
return this._blocks[Symbol.iterator]();
};
Object.defineProperty(DocParamCollection.prototype, "blocks", {
/**
* Returns the blocks in this collection.
*/
get: function () {
return this._blocks;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocParamCollection.prototype, "count", {
/**
* Returns the number of blocks in this collection.
*/
get: function () {
return this._blocks.length;
},
enumerable: false,
configurable: true
});
/**
* Adds a new block to the collection.
*/
DocParamCollection.prototype.add = function (docParamBlock) {
this._blocks.push(docParamBlock);
// Allocate the map on demand, since most DocComment parameter collections will be empty
if (this._blocksByName === undefined) {
this._blocksByName = new Map();
}
// The first block to be added takes precedence
if (!this._blocksByName.has(docParamBlock.parameterName)) {
this._blocksByName.set(docParamBlock.parameterName, docParamBlock);
}
};
/**
* Removes all blocks from the collection
*/
DocParamCollection.prototype.clear = function () {
this._blocks.length = 0;
this._blocksByName = undefined;
};
/**
* Returns the first block whose `parameterName` matches the specified string.
*
* @remarks
* If the collection was parsed from an input containing errors, there could potentially be more than
* one DocParamBlock with the same name. In this situation, tryGetBlockByName() will return the first match
* that it finds.
*
* This lookup is optimized using a dictionary.
*/
DocParamCollection.prototype.tryGetBlockByName = function (parameterName) {
if (this._blocksByName) {
return this._blocksByName.get(parameterName);
}
return undefined;
};
/** @override */
DocParamCollection.prototype.onGetChildNodes = function () {
return this._blocks;
};
return DocParamCollection;
}(DocNode_1.DocNode));
exports.DocParamCollection = DocParamCollection;
//# sourceMappingURL=DocParamCollection.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocParamCollection.js","sourceRoot":"","sources":["../../src/nodes/DocParamCollection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAqE;AAQrE;;;GAGG;AACH;IAAwC,sCAAO;IAI7C;;;OAGG;IACH,4BAAmB,UAAyC;QAA5D,YACE,kBAAM,UAAU,CAAC,SAClB;QATgB,aAAO,GAAoB,EAAE,CAAC;;IAS/C,CAAC;IAGD,sBAAW,oCAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,eAAe,CAAC;QACrC,CAAC;;;OAAA;IAED;;OAEG;IACI,6BAAC,MAAM,CAAC,QAAQ,CAAC,GAAxB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzC,CAAC;IAKD,sBAAW,sCAAM;QAHjB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;;;OAAA;IAKD,sBAAW,qCAAK;QAHhB;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7B,CAAC;;;OAAA;IAED;;OAEG;IACI,gCAAG,GAAV,UAAW,aAA4B;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEjC,wFAAwF;QACxF,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAyB,CAAC;SACvD;QAED,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;YACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;SACpE;IACH,CAAC;IAED;;OAEG;IACI,kCAAK,GAAZ;QACE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,CAAC;IAED;;;;;;;;;OASG;IACI,8CAAiB,GAAxB,UAAyB,aAAqB;QAC5C,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;SAC9C;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gBAAgB;IACN,4CAAe,GAAzB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACH,yBAAC;AAAD,CAAC,AApFD,CAAwC,iBAAO,GAoF9C;AApFY,gDAAkB","sourcesContent":["import { DocNodeKind, DocNode, IDocNodeParameters } from './DocNode';\r\nimport { DocParamBlock } from './DocParamBlock';\r\n\r\n/**\r\n * Constructor parameters for {@link DocParamCollection}.\r\n */\r\nexport interface IDocParamCollectionParameters extends IDocNodeParameters {}\r\n\r\n/**\r\n * Represents a collection of DocParamBlock objects and provides efficient operations for looking up the\r\n * documentation for a specified parameter name.\r\n */\r\nexport class DocParamCollection extends DocNode {\r\n private readonly _blocks: DocParamBlock[] = [];\r\n private _blocksByName: Map<string, DocParamBlock> | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocParamCollectionParameters) {\r\n super(parameters);\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.ParamCollection;\r\n }\r\n\r\n /**\r\n * Provide an iterator for callers that support it.\r\n */\r\n public [Symbol.iterator](): IterableIterator<DocParamBlock> {\r\n return this._blocks[Symbol.iterator]();\r\n }\r\n\r\n /**\r\n * Returns the blocks in this collection.\r\n */\r\n public get blocks(): ReadonlyArray<DocParamBlock> {\r\n return this._blocks;\r\n }\r\n\r\n /**\r\n * Returns the number of blocks in this collection.\r\n */\r\n public get count(): number {\r\n return this._blocks.length;\r\n }\r\n\r\n /**\r\n * Adds a new block to the collection.\r\n */\r\n public add(docParamBlock: DocParamBlock): void {\r\n this._blocks.push(docParamBlock);\r\n\r\n // Allocate the map on demand, since most DocComment parameter collections will be empty\r\n if (this._blocksByName === undefined) {\r\n this._blocksByName = new Map<string, DocParamBlock>();\r\n }\r\n\r\n // The first block to be added takes precedence\r\n if (!this._blocksByName.has(docParamBlock.parameterName)) {\r\n this._blocksByName.set(docParamBlock.parameterName, docParamBlock);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all blocks from the collection\r\n */\r\n public clear(): void {\r\n this._blocks.length = 0;\r\n this._blocksByName = undefined;\r\n }\r\n\r\n /**\r\n * Returns the first block whose `parameterName` matches the specified string.\r\n *\r\n * @remarks\r\n * If the collection was parsed from an input containing errors, there could potentially be more than\r\n * one DocParamBlock with the same name. In this situation, tryGetBlockByName() will return the first match\r\n * that it finds.\r\n *\r\n * This lookup is optimized using a dictionary.\r\n */\r\n public tryGetBlockByName(parameterName: string): DocParamBlock | undefined {\r\n if (this._blocksByName) {\r\n return this._blocksByName.get(parameterName);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return this._blocks;\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,94 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocPlainText = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Represents a span of comment text that is considered by the parser
* to contain no special symbols or meaning.
*
* @remarks
* The text content must not contain newline characters.
* Use DocSoftBreak to represent manual line splitting.
*/
var DocPlainText = /** @class */ (function (_super) {
__extends(DocPlainText, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocPlainText(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._textExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.PlainText,
content: parameters.textExcerpt
});
}
else {
if (DocPlainText._newlineCharacterRegExp.test(parameters.text)) {
// Use DocSoftBreak to represent manual line splitting
throw new Error('The DocPlainText content must not contain newline characters');
}
_this._text = parameters.text;
}
return _this;
}
Object.defineProperty(DocPlainText.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.PlainText;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocPlainText.prototype, "text", {
/**
* The text content.
*/
get: function () {
if (this._text === undefined) {
this._text = this._textExcerpt.content.toString();
}
return this._text;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DocPlainText.prototype, "textExcerpt", {
get: function () {
if (this._textExcerpt) {
return this._textExcerpt.content;
}
else {
return undefined;
}
},
enumerable: false,
configurable: true
});
/** @override */
DocPlainText.prototype.onGetChildNodes = function () {
return [this._textExcerpt];
};
// TODO: We should also prohibit "\r", but this requires updating LineExtractor
// to interpret a lone "\r" as a newline
DocPlainText._newlineCharacterRegExp = /[\n]/;
return DocPlainText;
}(DocNode_1.DocNode));
exports.DocPlainText = DocPlainText;
//# sourceMappingURL=DocPlainText.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocPlainText.js","sourceRoot":"","sources":["../../src/nodes/DocPlainText.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA+F;AAE/F,2CAAuD;AAgBvD;;;;;;;GAOG;AACH;IAAkC,gCAAO;IAQvC;;;OAGG;IACH,sBAAmB,UAAmE;QAAtF,YACE,kBAAM,UAAU,CAAC,SAgBlB;QAdC,IAAI,iBAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAC1C,KAAI,CAAC,YAAY,GAAG,IAAI,uBAAU,CAAC;gBACjC,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,SAAS;gBAClC,OAAO,EAAE,UAAU,CAAC,WAAW;aAChC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC9D,sDAAsD;gBACtD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;aACjF;YAED,KAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;SAC9B;;IACH,CAAC;IAGD,sBAAW,8BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;;;OAAA;IAKD,sBAAW,8BAAI;QAHf;;WAEG;aACH;YACE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;aACpD;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;;;OAAA;IAED,sBAAW,qCAAW;aAAtB;YACE,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;aAClC;iBAAM;gBACL,OAAO,SAAS,CAAC;aAClB;QACH,CAAC;;;OAAA;IAED,gBAAgB;IACN,sCAAe,GAAzB;QACE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAxDD,+EAA+E;IAC/E,wCAAwC;IAChB,oCAAuB,GAAW,MAAM,CAAC;IAuDnE,mBAAC;CAAA,AA1DD,CAAkC,iBAAO,GA0DxC;AA1DY,oCAAY","sourcesContent":["import { DocNodeKind, IDocNodeParameters, IDocNodeParsedParameters, DocNode } from './DocNode';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\n\r\n/**\r\n * Constructor parameters for {@link DocPlainText}.\r\n */\r\nexport interface IDocPlainTextParameters extends IDocNodeParameters {\r\n text: string;\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link DocPlainText}.\r\n */\r\nexport interface IDocPlainTextParsedParameters extends IDocNodeParsedParameters {\r\n textExcerpt: TokenSequence;\r\n}\r\n\r\n/**\r\n * Represents a span of comment text that is considered by the parser\r\n * to contain no special symbols or meaning.\r\n *\r\n * @remarks\r\n * The text content must not contain newline characters.\r\n * Use DocSoftBreak to represent manual line splitting.\r\n */\r\nexport class DocPlainText extends DocNode {\r\n // TODO: We should also prohibit \"\\r\", but this requires updating LineExtractor\r\n // to interpret a lone \"\\r\" as a newline\r\n private static readonly _newlineCharacterRegExp: RegExp = /[\\n]/;\r\n\r\n private _text: string | undefined;\r\n private readonly _textExcerpt: DocExcerpt | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocPlainTextParameters | IDocPlainTextParsedParameters) {\r\n super(parameters);\r\n\r\n if (DocNode.isParsedParameters(parameters)) {\r\n this._textExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.PlainText,\r\n content: parameters.textExcerpt\r\n });\r\n } else {\r\n if (DocPlainText._newlineCharacterRegExp.test(parameters.text)) {\r\n // Use DocSoftBreak to represent manual line splitting\r\n throw new Error('The DocPlainText content must not contain newline characters');\r\n }\r\n\r\n this._text = parameters.text;\r\n }\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.PlainText;\r\n }\r\n\r\n /**\r\n * The text content.\r\n */\r\n public get text(): string {\r\n if (this._text === undefined) {\r\n this._text = this._textExcerpt!.content.toString();\r\n }\r\n return this._text;\r\n }\r\n\r\n public get textExcerpt(): TokenSequence | undefined {\r\n if (this._textExcerpt) {\r\n return this._textExcerpt.content;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [this._textExcerpt];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,67 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocSection = void 0;
var DocNode_1 = require("./DocNode");
var DocParagraph_1 = require("./DocParagraph");
var DocNodeContainer_1 = require("./DocNodeContainer");
/**
* Represents a general block of rich text.
*/
var DocSection = /** @class */ (function (_super) {
__extends(DocSection, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocSection(parameters, childNodes) {
return _super.call(this, parameters, childNodes) || this;
}
Object.defineProperty(DocSection.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.Section;
},
enumerable: false,
configurable: true
});
/**
* If the last item in DocSection.nodes is not a DocParagraph, a new paragraph
* is started. Either way, the provided docNode will be appended to the paragraph.
*/
DocSection.prototype.appendNodeInParagraph = function (docNode) {
var paragraphNode = undefined;
if (this.nodes.length > 0) {
var lastNode = this.nodes[this.nodes.length - 1];
if (lastNode.kind === DocNode_1.DocNodeKind.Paragraph) {
paragraphNode = lastNode;
}
}
if (!paragraphNode) {
paragraphNode = new DocParagraph_1.DocParagraph({ configuration: this.configuration });
this.appendNode(paragraphNode);
}
paragraphNode.appendNode(docNode);
};
DocSection.prototype.appendNodesInParagraph = function (docNodes) {
for (var _i = 0, docNodes_1 = docNodes; _i < docNodes_1.length; _i++) {
var docNode = docNodes_1[_i];
this.appendNodeInParagraph(docNode);
}
};
return DocSection;
}(DocNodeContainer_1.DocNodeContainer));
exports.DocSection = DocSection;
//# sourceMappingURL=DocSection.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocSection.js","sourceRoot":"","sources":["../../src/nodes/DocSection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAiD;AACjD,+CAA8C;AAC9C,uDAI4B;AAY5B;;GAEG;AACH;IAAgC,8BAAgB;IAC9C;;;OAGG;IACH,oBACE,UAA+D,EAC/D,UAAmC;eAEnC,kBAAM,UAAU,EAAE,UAAU,CAAC;IAC/B,CAAC;IAGD,sBAAW,4BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,OAAO,CAAC;QAC7B,CAAC;;;OAAA;IAED;;;OAGG;IACI,0CAAqB,GAA5B,UAA6B,OAAgB;QAC3C,IAAI,aAAa,GAA6B,SAAS,CAAC;QAExD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAM,QAAQ,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5D,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAW,CAAC,SAAS,EAAE;gBAC3C,aAAa,GAAG,QAAwB,CAAC;aAC1C;SACF;QACD,IAAI,CAAC,aAAa,EAAE;YAClB,aAAa,GAAG,IAAI,2BAAY,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SAChC;QAED,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,2CAAsB,GAA7B,UAA8B,QAAgC;QAC5D,KAAsB,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;YAA3B,IAAM,OAAO,iBAAA;YAChB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;SACrC;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,AA3CD,CAAgC,mCAAgB,GA2C/C;AA3CY,gCAAU","sourcesContent":["import { DocNode, DocNodeKind } from './DocNode';\r\nimport { DocParagraph } from './DocParagraph';\r\nimport {\r\n DocNodeContainer,\r\n IDocNodeContainerParameters,\r\n IDocNodeContainerParsedParameters\r\n} from './DocNodeContainer';\r\n\r\n/**\r\n * Constructor parameters for {@link DocSection}.\r\n */\r\nexport interface IDocSectionParameters extends IDocNodeContainerParameters {}\r\n\r\n/**\r\n * Constructor parameters for {@link DocSection}.\r\n */\r\nexport interface IDocSectionParsedParameters extends IDocNodeContainerParsedParameters {}\r\n\r\n/**\r\n * Represents a general block of rich text.\r\n */\r\nexport class DocSection extends DocNodeContainer {\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(\r\n parameters: IDocSectionParameters | IDocSectionParsedParameters,\r\n childNodes?: ReadonlyArray<DocNode>\r\n ) {\r\n super(parameters, childNodes);\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.Section;\r\n }\r\n\r\n /**\r\n * If the last item in DocSection.nodes is not a DocParagraph, a new paragraph\r\n * is started. Either way, the provided docNode will be appended to the paragraph.\r\n */\r\n public appendNodeInParagraph(docNode: DocNode): void {\r\n let paragraphNode: DocParagraph | undefined = undefined;\r\n\r\n if (this.nodes.length > 0) {\r\n const lastNode: DocNode = this.nodes[this.nodes.length - 1];\r\n if (lastNode.kind === DocNodeKind.Paragraph) {\r\n paragraphNode = lastNode as DocParagraph;\r\n }\r\n }\r\n if (!paragraphNode) {\r\n paragraphNode = new DocParagraph({ configuration: this.configuration });\r\n this.appendNode(paragraphNode);\r\n }\r\n\r\n paragraphNode.appendNode(docNode);\r\n }\r\n\r\n public appendNodesInParagraph(docNodes: ReadonlyArray<DocNode>): void {\r\n for (const docNode of docNodes) {\r\n this.appendNodeInParagraph(docNode);\r\n }\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,64 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DocSoftBreak = void 0;
var DocNode_1 = require("./DocNode");
var DocExcerpt_1 = require("./DocExcerpt");
/**
* Instructs a renderer to insert an explicit newline in the output.
* (Normally the renderer uses a formatting rule to determine where
* lines should wrap.)
*
* @remarks
* In HTML, a soft break is represented as an ASCII newline character (which does not
* affect the web browser's view), whereas the hard break is the `<br />` element
* (which starts a new line in the web browser's view).
*
* TSDoc follows the same conventions, except the renderer avoids emitting
* two empty lines (because that could start a new CommonMark paragraph).
*/
var DocSoftBreak = /** @class */ (function (_super) {
__extends(DocSoftBreak, _super);
/**
* Don't call this directly. Instead use {@link TSDocParser}
* @internal
*/
function DocSoftBreak(parameters) {
var _this = _super.call(this, parameters) || this;
if (DocNode_1.DocNode.isParsedParameters(parameters)) {
_this._softBreakExcerpt = new DocExcerpt_1.DocExcerpt({
configuration: _this.configuration,
excerptKind: DocExcerpt_1.ExcerptKind.SoftBreak,
content: parameters.softBreakExcerpt
});
}
return _this;
}
Object.defineProperty(DocSoftBreak.prototype, "kind", {
/** @override */
get: function () {
return DocNode_1.DocNodeKind.SoftBreak;
},
enumerable: false,
configurable: true
});
/** @override */
DocSoftBreak.prototype.onGetChildNodes = function () {
return [this._softBreakExcerpt];
};
return DocSoftBreak;
}(DocNode_1.DocNode));
exports.DocSoftBreak = DocSoftBreak;
//# sourceMappingURL=DocSoftBreak.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DocSoftBreak.js","sourceRoot":"","sources":["../../src/nodes/DocSoftBreak.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA+F;AAE/F,2CAAuD;AAcvD;;;;;;;;;;;;GAYG;AACH;IAAkC,gCAAO;IAGvC;;;OAGG;IACH,sBAAmB,UAAmE;QAAtF,YACE,kBAAM,UAAU,CAAC,SASlB;QAPC,IAAI,iBAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAC1C,KAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAU,CAAC;gBACtC,aAAa,EAAE,KAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,wBAAW,CAAC,SAAS;gBAClC,OAAO,EAAE,UAAU,CAAC,gBAAgB;aACrC,CAAC,CAAC;SACJ;;IACH,CAAC;IAGD,sBAAW,8BAAI;QADf,gBAAgB;aAChB;YACE,OAAO,qBAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;;;OAAA;IAED,gBAAgB;IACN,sCAAe,GAAzB;QACE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC;IACH,mBAAC;AAAD,CAAC,AA5BD,CAAkC,iBAAO,GA4BxC;AA5BY,oCAAY","sourcesContent":["import { DocNodeKind, IDocNodeParameters, DocNode, IDocNodeParsedParameters } from './DocNode';\r\nimport { TokenSequence } from '../parser/TokenSequence';\r\nimport { DocExcerpt, ExcerptKind } from './DocExcerpt';\r\n\r\n/**\r\n * Constructor parameters for {@link DocSoftBreak}.\r\n */\r\nexport interface IDocSoftBreakParameters extends IDocNodeParameters {}\r\n\r\n/**\r\n * Constructor parameters for {@link DocSoftBreak}.\r\n */\r\nexport interface IDocSoftBreakParsedParameters extends IDocNodeParsedParameters {\r\n softBreakExcerpt: TokenSequence;\r\n}\r\n\r\n/**\r\n * Instructs a renderer to insert an explicit newline in the output.\r\n * (Normally the renderer uses a formatting rule to determine where\r\n * lines should wrap.)\r\n *\r\n * @remarks\r\n * In HTML, a soft break is represented as an ASCII newline character (which does not\r\n * affect the web browser's view), whereas the hard break is the `<br />` element\r\n * (which starts a new line in the web browser's view).\r\n *\r\n * TSDoc follows the same conventions, except the renderer avoids emitting\r\n * two empty lines (because that could start a new CommonMark paragraph).\r\n */\r\nexport class DocSoftBreak extends DocNode {\r\n private readonly _softBreakExcerpt: DocExcerpt | undefined;\r\n\r\n /**\r\n * Don't call this directly. Instead use {@link TSDocParser}\r\n * @internal\r\n */\r\n public constructor(parameters: IDocSoftBreakParameters | IDocSoftBreakParsedParameters) {\r\n super(parameters);\r\n\r\n if (DocNode.isParsedParameters(parameters)) {\r\n this._softBreakExcerpt = new DocExcerpt({\r\n configuration: this.configuration,\r\n excerptKind: ExcerptKind.SoftBreak,\r\n content: parameters.softBreakExcerpt\r\n });\r\n }\r\n }\r\n\r\n /** @override */\r\n public get kind(): DocNodeKind | string {\r\n return DocNodeKind.SoftBreak;\r\n }\r\n\r\n /** @override */\r\n protected onGetChildNodes(): ReadonlyArray<DocNode | undefined> {\r\n return [this._softBreakExcerpt];\r\n }\r\n}\r\n"]}

View File

@ -0,0 +1,41 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./DocBlock"), exports);
__exportStar(require("./DocBlockTag"), exports);
__exportStar(require("./DocCodeSpan"), exports);
__exportStar(require("./DocComment"), exports);
__exportStar(require("./DocDeclarationReference"), exports);
__exportStar(require("./DocErrorText"), exports);
__exportStar(require("./DocEscapedText"), exports);
__exportStar(require("./DocExcerpt"), exports);
__exportStar(require("./DocFencedCode"), exports);
__exportStar(require("./DocHtmlAttribute"), exports);
__exportStar(require("./DocHtmlEndTag"), exports);
__exportStar(require("./DocHtmlStartTag"), exports);
__exportStar(require("./DocInheritDocTag"), exports);
__exportStar(require("./DocInlineTag"), exports);
__exportStar(require("./DocInlineTagBase"), exports);
__exportStar(require("./DocLinkTag"), exports);
__exportStar(require("./DocMemberIdentifier"), exports);
__exportStar(require("./DocMemberReference"), exports);
__exportStar(require("./DocMemberSelector"), exports);
__exportStar(require("./DocMemberSymbol"), exports);
__exportStar(require("./DocNode"), exports);
__exportStar(require("./DocNodeContainer"), exports);
__exportStar(require("./DocParagraph"), exports);
__exportStar(require("./DocParamBlock"), exports);
__exportStar(require("./DocParamCollection"), exports);
__exportStar(require("./DocPlainText"), exports);
__exportStar(require("./DocSection"), exports);
__exportStar(require("./DocSoftBreak"), exports);
//# sourceMappingURL=index.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nodes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA2B;AAC3B,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,4DAA0C;AAC1C,iDAA+B;AAC/B,mDAAiC;AACjC,+CAA6B;AAC7B,kDAAgC;AAChC,qDAAmC;AACnC,kDAAgC;AAChC,oDAAkC;AAClC,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,+CAA6B;AAC7B,wDAAsC;AACtC,uDAAqC;AACrC,sDAAoC;AACpC,oDAAkC;AAClC,4CAA0B;AAC1B,qDAAmC;AACnC,iDAA+B;AAC/B,kDAAgC;AAChC,uDAAqC;AACrC,iDAA+B;AAC/B,+CAA6B;AAC7B,iDAA+B","sourcesContent":["export * from './DocBlock';\r\nexport * from './DocBlockTag';\r\nexport * from './DocCodeSpan';\r\nexport * from './DocComment';\r\nexport * from './DocDeclarationReference';\r\nexport * from './DocErrorText';\r\nexport * from './DocEscapedText';\r\nexport * from './DocExcerpt';\r\nexport * from './DocFencedCode';\r\nexport * from './DocHtmlAttribute';\r\nexport * from './DocHtmlEndTag';\r\nexport * from './DocHtmlStartTag';\r\nexport * from './DocInheritDocTag';\r\nexport * from './DocInlineTag';\r\nexport * from './DocInlineTagBase';\r\nexport * from './DocLinkTag';\r\nexport * from './DocMemberIdentifier';\r\nexport * from './DocMemberReference';\r\nexport * from './DocMemberSelector';\r\nexport * from './DocMemberSymbol';\r\nexport * from './DocNode';\r\nexport * from './DocNodeContainer';\r\nexport * from './DocParagraph';\r\nexport * from './DocParamBlock';\r\nexport * from './DocParamCollection';\r\nexport * from './DocPlainText';\r\nexport * from './DocSection';\r\nexport * from './DocSoftBreak';\r\n"]}

View File

@ -0,0 +1,157 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LineExtractor = void 0;
var TSDocMessageId_1 = require("./TSDocMessageId");
// Internal parser state
var State;
(function (State) {
// Initial state, looking for "/*"
State[State["BeginComment1"] = 0] = "BeginComment1";
// Looking for "*" or "* " after "/*"
State[State["BeginComment2"] = 1] = "BeginComment2";
// Like State.CollectingLine except immediately after the "/**"
State[State["CollectingFirstLine"] = 2] = "CollectingFirstLine";
// Collecting characters until we reach a newline
State[State["CollectingLine"] = 3] = "CollectingLine";
// After a newline, looking for the "*" that begins a new line, or the "*/" to end the comment
State[State["AdvancingLine"] = 4] = "AdvancingLine";
// Exiting the parser loop
State[State["Done"] = 5] = "Done";
})(State || (State = {}));
/**
* The main API for parsing TSDoc comments.
*/
var LineExtractor = /** @class */ (function () {
function LineExtractor() {
}
/**
* This step parses an entire code comment from slash-star-star until star-slash,
* and extracts the content lines. The lines are stored in IDocCommentParameters.lines
* and the overall text range is assigned to IDocCommentParameters.range.
*/
LineExtractor.extract = function (parserContext) {
var range = parserContext.sourceRange;
var buffer = range.buffer;
var commentRangeStart = 0;
var commentRangeEnd = 0;
// These must be set before entering CollectingFirstLine, CollectingLine, or AdvancingLine
var collectingLineStart = 0;
var collectingLineEnd = 0;
var nextIndex = range.pos;
var state = State.BeginComment1;
var lines = [];
while (state !== State.Done) {
if (nextIndex >= range.end) {
// reached the end of the input
switch (state) {
case State.BeginComment1:
case State.BeginComment2:
parserContext.log.addMessageForTextRange(TSDocMessageId_1.TSDocMessageId.CommentNotFound, 'Expecting a "/**" comment', range);
return false;
default:
parserContext.log.addMessageForTextRange(TSDocMessageId_1.TSDocMessageId.CommentMissingClosingDelimiter, 'Unexpected end of input', range);
return false;
}
}
var current = buffer[nextIndex];
var currentIndex = nextIndex;
++nextIndex;
var next = nextIndex < range.end ? buffer[nextIndex] : '';
switch (state) {
case State.BeginComment1:
if (current === '/' && next === '*') {
commentRangeStart = currentIndex;
++nextIndex; // skip the star
state = State.BeginComment2;
}
else if (!LineExtractor._whitespaceCharacterRegExp.test(current)) {
parserContext.log.addMessageForTextRange(TSDocMessageId_1.TSDocMessageId.CommentOpeningDelimiterSyntax, 'Expecting a leading "/**"', range.getNewRange(currentIndex, currentIndex + 1));
return false;
}
break;
case State.BeginComment2:
if (current === '*') {
if (next === ' ') {
++nextIndex; // Discard the space after the star
}
collectingLineStart = nextIndex;
collectingLineEnd = nextIndex;
state = State.CollectingFirstLine;
}
else {
parserContext.log.addMessageForTextRange(TSDocMessageId_1.TSDocMessageId.CommentOpeningDelimiterSyntax, 'Expecting a leading "/**"', range.getNewRange(currentIndex, currentIndex + 1));
return false;
}
break;
case State.CollectingFirstLine:
case State.CollectingLine:
if (current === '\n') {
// Ignore an empty line if it is immediately after the "/**"
if (state !== State.CollectingFirstLine || collectingLineEnd > collectingLineStart) {
// Record the line that we collected
lines.push(range.getNewRange(collectingLineStart, collectingLineEnd));
}
collectingLineStart = nextIndex;
collectingLineEnd = nextIndex;
state = State.AdvancingLine;
}
else if (current === '*' && next === '/') {
if (collectingLineEnd > collectingLineStart) {
lines.push(range.getNewRange(collectingLineStart, collectingLineEnd));
}
collectingLineStart = 0;
collectingLineEnd = 0;
++nextIndex; // skip the slash
commentRangeEnd = nextIndex;
state = State.Done;
}
else if (!LineExtractor._whitespaceCharacterRegExp.test(current)) {
collectingLineEnd = nextIndex;
}
break;
case State.AdvancingLine:
if (current === '*') {
if (next === '/') {
collectingLineStart = 0;
collectingLineEnd = 0;
++nextIndex; // skip the slash
commentRangeEnd = nextIndex;
state = State.Done;
}
else {
// Discard the "*" at the start of a line
if (next === ' ') {
++nextIndex; // Discard the space after the star
}
collectingLineStart = nextIndex;
collectingLineEnd = nextIndex;
state = State.CollectingLine;
}
}
else if (current === '\n') {
// Blank line
lines.push(range.getNewRange(currentIndex, currentIndex));
collectingLineStart = nextIndex;
}
else if (!LineExtractor._whitespaceCharacterRegExp.test(current)) {
// If the star is missing, then start the line here
// Example: "/**\nL1*/"
// (collectingLineStart was the start of this line)
collectingLineEnd = nextIndex;
state = State.CollectingLine;
}
break;
}
}
/**
* Only fill in these if we successfully scanned a comment
*/
parserContext.commentRange = range.getNewRange(commentRangeStart, commentRangeEnd);
parserContext.lines = lines;
return true;
};
LineExtractor._whitespaceCharacterRegExp = /^\s$/;
return LineExtractor;
}());
exports.LineExtractor = LineExtractor;
//# sourceMappingURL=LineExtractor.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,118 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ParagraphSplitter = void 0;
var nodes_1 = require("../nodes");
/**
* The ParagraphSplitter is a secondary stage that runs after the NodeParser has constructed
* the DocComment. It splits DocParagraph nodes into multiple paragraphs by looking for
* paragraph delimiters. Following CommonMark conventions, paragraphs are delimited by
* one or more blank lines. (These lines end with SoftBreak nodes.) The blank lines are
* not discarded. Instead, they are attached to the preceding paragraph. If the DocParagraph
* starts with blank lines, they are preserved to avoid creating a paragraph containing only
* whitespace.
*/
var ParagraphSplitter = /** @class */ (function () {
function ParagraphSplitter() {
}
/**
* Split all paragraphs belonging to the provided subtree.
*/
ParagraphSplitter.splitParagraphs = function (node) {
if (node instanceof nodes_1.DocSection) {
ParagraphSplitter.splitParagraphsForSection(node);
// (We don't recurse here, since sections cannot contain subsections)
}
else {
for (var _i = 0, _a = node.getChildNodes(); _i < _a.length; _i++) {
var childNode = _a[_i];
ParagraphSplitter.splitParagraphs(childNode);
}
}
};
/**
* Split all paragraphs belonging to the provided DocSection.
*/
ParagraphSplitter.splitParagraphsForSection = function (docSection) {
var inputNodes = docSection.nodes;
var outputNodes = [];
for (var _i = 0, inputNodes_1 = inputNodes; _i < inputNodes_1.length; _i++) {
var oldNode = inputNodes_1[_i];
if (oldNode.kind === nodes_1.DocNodeKind.Paragraph) {
ParagraphSplitter._splitParagraph(oldNode, outputNodes);
}
else {
outputNodes.push(oldNode);
}
}
// Replace the inputNodes with the outputNodes
docSection.clearNodes();
docSection.appendNodes(outputNodes);
};
ParagraphSplitter._splitParagraph = function (oldParagraph, outputNodes) {
var inputParagraphNodes = oldParagraph.nodes;
var currentParagraph = new nodes_1.DocParagraph({ configuration: oldParagraph.configuration });
outputNodes.push(currentParagraph);
var state = 0 /* Start */;
var currentIndex = 0;
while (currentIndex < inputParagraphNodes.length) {
// Scan forwards to the end of the line
var isBlankLine = true;
var lineEndIndex = currentIndex; // non-inclusive
do {
var node = inputParagraphNodes[lineEndIndex++];
if (node.kind === nodes_1.DocNodeKind.SoftBreak) {
break;
}
if (isBlankLine) {
if (!this._isWhitespace(node)) {
isBlankLine = false;
}
}
} while (lineEndIndex < inputParagraphNodes.length);
// At this point, the line and SoftBreak will be in inputParagraphNodes.slice(currentIndex, lineEndIndex)
switch (state) {
case 0 /* Start */:
// We're skipping any blank lines that start the first paragraph
if (!isBlankLine) {
state = 1 /* AwaitingTrailer */;
}
break;
case 1 /* AwaitingTrailer */:
// We already saw some content, so now we're looking for a blank line that starts the trailer
// at the end of this paragraph
if (isBlankLine) {
state = 2 /* ReadingTrailer */;
}
break;
case 2 /* ReadingTrailer */:
// We already found the trailer, so now we're looking for a non-blank line that will
// begin a new paragraph
if (!isBlankLine) {
// Start a new paragraph
currentParagraph = new nodes_1.DocParagraph({ configuration: oldParagraph.configuration });
outputNodes.push(currentParagraph);
state = 1 /* AwaitingTrailer */;
}
break;
}
// Append the line onto the current paragraph
for (var i = currentIndex; i < lineEndIndex; ++i) {
currentParagraph.appendNode(inputParagraphNodes[i]);
}
currentIndex = lineEndIndex;
}
};
ParagraphSplitter._isWhitespace = function (node) {
switch (node.kind) {
case nodes_1.DocNodeKind.PlainText:
var docPlainText = node;
return ParagraphSplitter._whitespaceRegExp.test(docPlainText.text);
default:
return false;
}
};
ParagraphSplitter._whitespaceRegExp = /^\s*$/;
return ParagraphSplitter;
}());
exports.ParagraphSplitter = ParagraphSplitter;
//# sourceMappingURL=ParagraphSplitter.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ParserContext = void 0;
var TextRange_1 = require("./TextRange");
var nodes_1 = require("../nodes");
var ParserMessageLog_1 = require("./ParserMessageLog");
/**
* An internal data structure that tracks all the state being built up by the various
* parser stages.
*/
var ParserContext = /** @class */ (function () {
function ParserContext(configuration, sourceRange) {
/**
* The text range starting from the opening `/**` and ending with
* the closing `*\/` delimiter.
*/
this.commentRange = TextRange_1.TextRange.empty;
/**
* The text ranges corresponding to the lines of content inside the comment.
*/
this.lines = [];
/**
* A complete list of all tokens that were extracted from the input lines.
*/
this.tokens = [];
this.configuration = configuration;
this.sourceRange = sourceRange;
this.docComment = new nodes_1.DocComment({ configuration: this.configuration });
this.log = new ParserMessageLog_1.ParserMessageLog();
}
return ParserContext;
}());
exports.ParserContext = ParserContext;
//# sourceMappingURL=ParserContext.js.map

Some files were not shown because too many files have changed in this diff Show More