@microsoft/api-extractor-model 7.16.1 → 7.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rollup.d.ts +5 -0
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/mixins/ApiTypeParameterListMixin.d.ts.map +1 -1
- package/lib/mixins/ApiTypeParameterListMixin.js +3 -1
- package/lib/mixins/ApiTypeParameterListMixin.js.map +1 -1
- package/lib/model/ModelReferenceResolver.js +3 -2
- package/lib/model/ModelReferenceResolver.js.map +1 -1
- package/lib/model/TypeParameter.d.ts +5 -0
- package/lib/model/TypeParameter.d.ts.map +1 -1
- package/lib/model/TypeParameter.js +1 -0
- package/lib/model/TypeParameter.js.map +1 -1
- package/package.json +7 -7
package/dist/rollup.d.ts
CHANGED
|
@@ -2157,6 +2157,7 @@ export declare interface ITypeParameterOptions {
|
|
|
2157
2157
|
name: string;
|
|
2158
2158
|
constraintExcerpt: Excerpt;
|
|
2159
2159
|
defaultTypeExcerpt: Excerpt;
|
|
2160
|
+
isOptional: boolean;
|
|
2160
2161
|
parent: ApiTypeParameterListMixin;
|
|
2161
2162
|
}
|
|
2162
2163
|
|
|
@@ -2331,6 +2332,10 @@ export declare class TypeParameter {
|
|
|
2331
2332
|
* The parameter name.
|
|
2332
2333
|
*/
|
|
2333
2334
|
name: string;
|
|
2335
|
+
/**
|
|
2336
|
+
* Whether the type parameter is optional. True IFF there exists a `defaultTypeExcerpt`.
|
|
2337
|
+
*/
|
|
2338
|
+
isOptional: boolean;
|
|
2334
2339
|
private _parent;
|
|
2335
2340
|
constructor(options: ITypeParameterOptions);
|
|
2336
2341
|
/**
|
package/dist/tsdoc-metadata.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiTypeParameterListMixin.d.ts","sourceRoot":"","sources":["../../src/mixins/ApiTypeParameterListMixin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,
|
|
1
|
+
{"version":3,"file":"ApiTypeParameterListMixin.d.ts","sourceRoot":"","sources":["../../src/mixins/ApiTypeParameterListMixin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAW,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKvD;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,kBAAkB,CAAC;IACzC,qBAAqB,EAAE,kBAAkB,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAkC,SAAQ,eAAe;IACxE,cAAc,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,8BAA+B,SAAQ,YAAY;IAClE,cAAc,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAID;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,yBAA0B,SAAQ,OAAO;IACxD;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAEtD,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CACxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,SAAS,mBAAmB,EAC9E,SAAS,EAAE,UAAU,GAEpB,UAAU,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,yBAAyB,CAAC,CAqElE;AAED;;;GAGG;AACH,yBAAiB,yBAAyB,CAAC;IACzC;;;;;;;;OAQG;IACH,SAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,yBAAyB,CAEpF;CACF"}
|
|
@@ -28,10 +28,12 @@ function ApiTypeParameterListMixin(baseClass
|
|
|
28
28
|
if (this instanceof ApiDeclaredItem_1.ApiDeclaredItem) {
|
|
29
29
|
if (options.typeParameters) {
|
|
30
30
|
for (const typeParameterOptions of options.typeParameters) {
|
|
31
|
+
const defaultTypeExcerpt = this.buildExcerpt(typeParameterOptions.defaultTypeTokenRange);
|
|
31
32
|
const typeParameter = new TypeParameter_1.TypeParameter({
|
|
32
33
|
name: typeParameterOptions.typeParameterName,
|
|
33
34
|
constraintExcerpt: this.buildExcerpt(typeParameterOptions.constraintTokenRange),
|
|
34
|
-
defaultTypeExcerpt
|
|
35
|
+
defaultTypeExcerpt,
|
|
36
|
+
isOptional: !defaultTypeExcerpt.isEmpty,
|
|
35
37
|
parent: this
|
|
36
38
|
});
|
|
37
39
|
this[_typeParameters].push(typeParameter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiTypeParameterListMixin.js","sourceRoot":"","sources":["../../src/mixins/ApiTypeParameterListMixin.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,4DAA4D;;;AAI5D,0DAAuD;AACvD,oEAA6D;AAC7D,8DAA2D;AAyB3D,MAAM,eAAe,GAAkB,MAAM,CAAC,2CAA2C,CAAC,CAAC;AA2B3F;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CACvC,SAAqB;AACrB,8DAA8D;;IAE9D,MAAM,UAAW,SAAQ,SAAS;QAGhC,8DAA8D;QAC9D,YAAmB,GAAG,IAAW;YAC/B,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAEf,MAAM,OAAO,GAAsC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE3D,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;YAE3B,IAAI,IAAI,YAAY,iCAAe,EAAE;gBACnC,IAAI,OAAO,CAAC,cAAc,EAAE;oBAC1B,KAAK,MAAM,oBAAoB,IAAI,OAAO,CAAC,cAAc,EAAE;wBACzD,MAAM,aAAa,GAAkB,IAAI,6BAAa,CAAC;4BACrD,IAAI,EAAE,oBAAoB,CAAC,iBAAiB;4BAC5C,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;4BAC/E,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"ApiTypeParameterListMixin.js","sourceRoot":"","sources":["../../src/mixins/ApiTypeParameterListMixin.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,4DAA4D;;;AAI5D,0DAAuD;AACvD,oEAA6D;AAC7D,8DAA2D;AAyB3D,MAAM,eAAe,GAAkB,MAAM,CAAC,2CAA2C,CAAC,CAAC;AA2B3F;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CACvC,SAAqB;AACrB,8DAA8D;;IAE9D,MAAM,UAAW,SAAQ,SAAS;QAGhC,8DAA8D;QAC9D,YAAmB,GAAG,IAAW;YAC/B,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAEf,MAAM,OAAO,GAAsC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE3D,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;YAE3B,IAAI,IAAI,YAAY,iCAAe,EAAE;gBACnC,IAAI,OAAO,CAAC,cAAc,EAAE;oBAC1B,KAAK,MAAM,oBAAoB,IAAI,OAAO,CAAC,cAAc,EAAE;wBACzD,MAAM,kBAAkB,GAAY,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;wBAClG,MAAM,aAAa,GAAkB,IAAI,6BAAa,CAAC;4BACrD,IAAI,EAAE,oBAAoB,CAAC,iBAAiB;4BAC5C,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;4BAC/E,kBAAkB;4BAClB,UAAU,EAAE,CAAC,kBAAkB,CAAC,OAAO;4BACvC,MAAM,EAAE,IAAI;yBACb,CAAC,CAAC;wBAEH,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;qBAC3C;iBACF;aACF;iBAAM;gBACL,MAAM,IAAI,iCAAa,CACrB,mFAAmF,CACpF,CAAC;aACH;QACH,CAAC;QAED,gBAAgB;QACT,MAAM,CAAC,iBAAiB,CAC7B,OAAmD,EACnD,OAA4B,EAC5B,UAA0C;YAE1C,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAE1D,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,IAAI,EAAE,CAAC;QAC3D,CAAC;QAED,IAAW,cAAc;YACvB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAED,gBAAgB;QACT,aAAa,CAAC,UAAmD;YACtE,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAEhC,MAAM,oBAAoB,GAA+B,EAAE,CAAC;YAC5D,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE;gBAC/C,oBAAoB,CAAC,IAAI,CAAC;oBACxB,iBAAiB,EAAE,aAAa,CAAC,IAAI;oBACrC,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,CAAC,UAAU;oBAChE,qBAAqB,EAAE,aAAa,CAAC,kBAAkB,CAAC,UAAU;iBACnE,CAAC,CAAC;aACJ;YAED,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,UAAU,CAAC,cAAc,GAAG,oBAAoB,CAAC;aAClD;QACH,CAAC;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAxED,8DAwEC;AAED;;;GAGG;AACH,WAAiB,yBAAyB;IACxC;;;;;;;;OAQG;IACH,SAAgB,aAAa,CAAC,OAAgB;QAC5C,OAAO,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC;IAFe,uCAAa,gBAE5B,CAAA;AACH,CAAC,EAbgB,yBAAyB,GAAzB,iCAAyB,KAAzB,iCAAyB,QAazC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.s\n\nimport { ApiItem, IApiItemJson, IApiItemConstructor, IApiItemOptions } from '../items/ApiItem';\nimport { Excerpt, IExcerptTokenRange } from './Excerpt';\nimport { TypeParameter } from '../model/TypeParameter';\nimport { InternalError } from '@rushstack/node-core-library';\nimport { ApiDeclaredItem } from '../items/ApiDeclaredItem';\nimport { DeserializerContext } from '../model/DeserializerContext';\n\n/**\n * Represents parameter information that is part of {@link IApiTypeParameterListMixinOptions}\n * @public\n */\nexport interface IApiTypeParameterOptions {\n typeParameterName: string;\n constraintTokenRange: IExcerptTokenRange;\n defaultTypeTokenRange: IExcerptTokenRange;\n}\n\n/**\n * Constructor options for {@link (ApiTypeParameterListMixin:interface)}.\n * @public\n */\nexport interface IApiTypeParameterListMixinOptions extends IApiItemOptions {\n typeParameters: IApiTypeParameterOptions[];\n}\n\nexport interface IApiTypeParameterListMixinJson extends IApiItemJson {\n typeParameters: IApiTypeParameterOptions[];\n}\n\nconst _typeParameters: unique symbol = Symbol('ApiTypeParameterListMixin._typeParameters');\n\n/**\n * The mixin base class for API items that can have type parameters.\n *\n * @remarks\n *\n * This is part of the {@link ApiModel} hierarchy of classes, which are serializable representations of\n * API declarations. The non-abstract classes (e.g. `ApiClass`, `ApiEnum`, `ApiInterface`, etc.) use\n * TypeScript \"mixin\" functions (e.g. `ApiDeclaredItem`, `ApiItemContainerMixin`, etc.) to add various\n * features that cannot be represented as a normal inheritance chain (since TypeScript does not allow a child class\n * to extend more than one base class). The \"mixin\" is a TypeScript merged declaration with three components:\n * the function that generates a subclass, an interface that describes the members of the subclass, and\n * a namespace containing static members of the class.\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface ApiTypeParameterListMixin extends ApiItem {\n /**\n * The type parameters.\n */\n readonly typeParameters: ReadonlyArray<TypeParameter>;\n\n serializeInto(jsonObject: Partial<IApiItemJson>): void;\n}\n\n/**\n * Mixin function for {@link (ApiTypeParameterListMixin:interface)}.\n *\n * @param baseClass - The base class to be extended\n * @returns A child class that extends baseClass, adding the {@link (ApiTypeParameterListMixin:interface)}\n * functionality.\n *\n * @public\n */\nexport function ApiTypeParameterListMixin<TBaseClass extends IApiItemConstructor>(\n baseClass: TBaseClass\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): TBaseClass & (new (...args: any[]) => ApiTypeParameterListMixin) {\n class MixedClass extends baseClass implements ApiTypeParameterListMixin {\n public readonly [_typeParameters]: TypeParameter[];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public constructor(...args: any[]) {\n super(...args);\n\n const options: IApiTypeParameterListMixinOptions = args[0];\n\n this[_typeParameters] = [];\n\n if (this instanceof ApiDeclaredItem) {\n if (options.typeParameters) {\n for (const typeParameterOptions of options.typeParameters) {\n const defaultTypeExcerpt: Excerpt = this.buildExcerpt(typeParameterOptions.defaultTypeTokenRange);\n const typeParameter: TypeParameter = new TypeParameter({\n name: typeParameterOptions.typeParameterName,\n constraintExcerpt: this.buildExcerpt(typeParameterOptions.constraintTokenRange),\n defaultTypeExcerpt,\n isOptional: !defaultTypeExcerpt.isEmpty,\n parent: this\n });\n\n this[_typeParameters].push(typeParameter);\n }\n }\n } else {\n throw new InternalError(\n 'ApiTypeParameterListMixin expects a base class that inherits from ApiDeclaredItem'\n );\n }\n }\n\n /** @override */\n public static onDeserializeInto(\n options: Partial<IApiTypeParameterListMixinOptions>,\n context: DeserializerContext,\n jsonObject: IApiTypeParameterListMixinJson\n ): void {\n baseClass.onDeserializeInto(options, context, jsonObject);\n\n options.typeParameters = jsonObject.typeParameters || [];\n }\n\n public get typeParameters(): ReadonlyArray<TypeParameter> {\n return this[_typeParameters];\n }\n\n /** @override */\n public serializeInto(jsonObject: Partial<IApiTypeParameterListMixinJson>): void {\n super.serializeInto(jsonObject);\n\n const typeParameterObjects: IApiTypeParameterOptions[] = [];\n for (const typeParameter of this.typeParameters) {\n typeParameterObjects.push({\n typeParameterName: typeParameter.name,\n constraintTokenRange: typeParameter.constraintExcerpt.tokenRange,\n defaultTypeTokenRange: typeParameter.defaultTypeExcerpt.tokenRange\n });\n }\n\n if (typeParameterObjects.length > 0) {\n jsonObject.typeParameters = typeParameterObjects;\n }\n }\n }\n\n return MixedClass;\n}\n\n/**\n * Static members for {@link (ApiTypeParameterListMixin:interface)}.\n * @public\n */\nexport namespace ApiTypeParameterListMixin {\n /**\n * A type guard that tests whether the specified `ApiItem` subclass extends the `ApiParameterListMixin` mixin.\n *\n * @remarks\n *\n * The JavaScript `instanceof` operator cannot be used to test for mixin inheritance, because each invocation of\n * the mixin function produces a different subclass. (This could be mitigated by `Symbol.hasInstance`, however\n * the TypeScript type system cannot invoke a runtime test.)\n */\n export function isBaseClassOf(apiItem: ApiItem): apiItem is ApiTypeParameterListMixin {\n return apiItem.hasOwnProperty(_typeParameters);\n }\n}\n"]}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// See LICENSE in the project root for license information.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.ModelReferenceResolver = void 0;
|
|
6
|
+
const tsdoc_1 = require("@microsoft/tsdoc");
|
|
6
7
|
const ApiItem_1 = require("../items/ApiItem");
|
|
7
8
|
const ApiItemContainerMixin_1 = require("../mixins/ApiItemContainerMixin");
|
|
8
9
|
const ApiParameterListMixin_1 = require("../mixins/ApiParameterListMixin");
|
|
@@ -83,10 +84,10 @@ class ModelReferenceResolver {
|
|
|
83
84
|
else {
|
|
84
85
|
let memberSelectorResult;
|
|
85
86
|
switch (memberSelector.selectorKind) {
|
|
86
|
-
case
|
|
87
|
+
case tsdoc_1.SelectorKind.System:
|
|
87
88
|
memberSelectorResult = this._selectUsingSystemSelector(foundMembers, memberSelector, identifier);
|
|
88
89
|
break;
|
|
89
|
-
case
|
|
90
|
+
case tsdoc_1.SelectorKind.Index:
|
|
90
91
|
memberSelectorResult = this._selectUsingIndexSelector(foundMembers, memberSelector, identifier);
|
|
91
92
|
break;
|
|
92
93
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelReferenceResolver.js","sourceRoot":"","sources":["../../src/model/ModelReferenceResolver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { DocDeclarationReference, DocMemberSelector, SelectorKind } from '@microsoft/tsdoc';\nimport { ApiItem, ApiItemKind } from '../items/ApiItem';\nimport { ApiModel } from './ApiModel';\nimport { ApiPackage } from './ApiPackage';\nimport { ApiEntryPoint } from './ApiEntryPoint';\nimport { ApiItemContainerMixin } from '../mixins/ApiItemContainerMixin';\nimport { ApiParameterListMixin } from '../mixins/ApiParameterListMixin';\n\n/**\n * Result object for {@link ApiModel.resolveDeclarationReference}.\n *\n * @public\n */\nexport interface IResolveDeclarationReferenceResult {\n /**\n * The referenced ApiItem, if the declaration reference could be resolved.\n */\n resolvedApiItem: ApiItem | undefined;\n\n /**\n * If resolvedApiItem is undefined, then this will always contain an error message explaining why the\n * resolution failed.\n */\n errorMessage: string | undefined;\n}\n\n/**\n * This resolves a TSDoc declaration reference by walking the `ApiModel` hierarchy.\n *\n * @remarks\n *\n * This class is analogous to `AstReferenceResolver` from the `@microsoft/api-extractor` project,\n * which resolves declaration references by walking the compiler state.\n */\nexport class ModelReferenceResolver {\n private readonly _apiModel: ApiModel;\n\n public constructor(apiModel: ApiModel) {\n this._apiModel = apiModel;\n }\n\n public resolve(\n declarationReference: DocDeclarationReference,\n contextApiItem: ApiItem | undefined\n ): IResolveDeclarationReferenceResult {\n const result: IResolveDeclarationReferenceResult = {\n resolvedApiItem: undefined,\n errorMessage: undefined\n };\n\n let apiPackage: ApiPackage | undefined = undefined;\n\n // Is this an absolute reference?\n if (declarationReference.packageName !== undefined) {\n apiPackage = this._apiModel.tryGetPackageByName(declarationReference.packageName);\n if (apiPackage === undefined) {\n result.errorMessage = `The package \"${declarationReference.packageName}\" could not be located`;\n return result;\n }\n } else {\n // If the package name is omitted, try to infer it from the context\n if (contextApiItem !== undefined) {\n apiPackage = contextApiItem.getAssociatedPackage();\n }\n\n if (apiPackage === undefined) {\n result.errorMessage =\n `The reference does not include a package name, and the package could not be inferred` +\n ` from the context`;\n return result;\n }\n }\n\n const importPath: string = declarationReference.importPath || '';\n\n const foundEntryPoints: ReadonlyArray<ApiEntryPoint> = apiPackage.findEntryPointsByPath(importPath);\n if (foundEntryPoints.length !== 1) {\n result.errorMessage = `The import path \"${importPath}\" could not be resolved`;\n return result;\n }\n\n let currentItem: ApiItem = foundEntryPoints[0];\n\n // Now search for the member reference\n for (const memberReference of declarationReference.memberReferences) {\n if (memberReference.memberSymbol !== undefined) {\n result.errorMessage = `Symbols are not yet supported in declaration references`;\n return result;\n }\n\n if (memberReference.memberIdentifier === undefined) {\n result.errorMessage = `Missing member identifier`;\n return result;\n }\n\n const identifier: string = memberReference.memberIdentifier.identifier;\n\n if (!ApiItemContainerMixin.isBaseClassOf(currentItem)) {\n // For example, {@link MyClass.myMethod.X} is invalid because methods cannot contain members\n result.errorMessage = `Unable to resolve ${JSON.stringify(\n identifier\n )} because ${currentItem.getScopedNameWithinPackage()} cannot act as a container`;\n return result;\n }\n\n const foundMembers: ReadonlyArray<ApiItem> = currentItem.findMembersByName(identifier);\n if (foundMembers.length === 0) {\n result.errorMessage = `The member reference ${JSON.stringify(identifier)} was not found`;\n return result;\n }\n\n const memberSelector: DocMemberSelector | undefined = memberReference.selector;\n if (memberSelector === undefined) {\n if (foundMembers.length > 1) {\n result.errorMessage = `The member reference ${JSON.stringify(identifier)} was ambiguous`;\n return result;\n }\n currentItem = foundMembers[0];\n } else {\n let memberSelectorResult: IResolveDeclarationReferenceResult;\n switch (memberSelector.selectorKind) {\n case SelectorKind.System:\n memberSelectorResult = this._selectUsingSystemSelector(foundMembers, memberSelector, identifier);\n break;\n case SelectorKind.Index:\n memberSelectorResult = this._selectUsingIndexSelector(foundMembers, memberSelector, identifier);\n break;\n default:\n result.errorMessage = `The selector \"${memberSelector.selector}\" is not a supported selector type`;\n return result;\n }\n if (memberSelectorResult.resolvedApiItem === undefined) {\n return memberSelectorResult;\n }\n currentItem = memberSelectorResult.resolvedApiItem;\n }\n }\n result.resolvedApiItem = currentItem;\n return result;\n }\n\n private _selectUsingSystemSelector(\n foundMembers: ReadonlyArray<ApiItem>,\n memberSelector: DocMemberSelector,\n identifier: string\n ): IResolveDeclarationReferenceResult {\n const result: IResolveDeclarationReferenceResult = {\n resolvedApiItem: undefined,\n errorMessage: undefined\n };\n\n const selectorName: string = memberSelector.selector;\n\n let selectorItemKind: ApiItemKind;\n switch (selectorName) {\n case 'class':\n selectorItemKind = ApiItemKind.Class;\n break;\n case 'enum':\n selectorItemKind = ApiItemKind.Enum;\n break;\n case 'function':\n selectorItemKind = ApiItemKind.Function;\n break;\n case 'interface':\n selectorItemKind = ApiItemKind.Interface;\n break;\n case 'namespace':\n selectorItemKind = ApiItemKind.Namespace;\n break;\n case 'type':\n selectorItemKind = ApiItemKind.TypeAlias;\n break;\n case 'variable':\n selectorItemKind = ApiItemKind.Variable;\n break;\n default:\n result.errorMessage = `Unsupported system selector \"${selectorName}\"`;\n return result;\n }\n\n const matches: ApiItem[] = foundMembers.filter((x) => x.kind === selectorItemKind);\n if (matches.length === 0) {\n result.errorMessage =\n `A declaration for \"${identifier}\" was not found that matches the` +\n ` TSDoc selector \"${selectorName}\"`;\n return result;\n }\n if (matches.length > 1) {\n result.errorMessage = `More than one declaration \"${identifier}\" matches the TSDoc selector \"${selectorName}\"`;\n }\n result.resolvedApiItem = matches[0];\n return result;\n }\n\n private _selectUsingIndexSelector(\n foundMembers: ReadonlyArray<ApiItem>,\n memberSelector: DocMemberSelector,\n identifier: string\n ): IResolveDeclarationReferenceResult {\n const result: IResolveDeclarationReferenceResult = {\n resolvedApiItem: undefined,\n errorMessage: undefined\n };\n\n const selectedMembers: ApiItem[] = [];\n\n const selectorOverloadIndex: number = parseInt(memberSelector.selector);\n for (const foundMember of foundMembers) {\n if (ApiParameterListMixin.isBaseClassOf(foundMember)) {\n if (foundMember.overloadIndex === selectorOverloadIndex) {\n selectedMembers.push(foundMember);\n }\n }\n }\n\n if (selectedMembers.length === 0) {\n result.errorMessage =\n `An overload for ${JSON.stringify(identifier)} was not found that matches` +\n ` the TSDoc selector \":${selectorOverloadIndex}\"`;\n return result;\n }\n\n if (selectedMembers.length === 1) {\n result.resolvedApiItem = selectedMembers[0];\n return result;\n }\n\n result.errorMessage = `The member reference ${JSON.stringify(identifier)} was ambiguous`;\n return result;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelReferenceResolver.js","sourceRoot":"","sources":["../../src/model/ModelReferenceResolver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { DocDeclarationReference, DocMemberSelector, SelectorKind } from '@microsoft/tsdoc';\nimport { ApiItem, ApiItemKind } from '../items/ApiItem';\nimport { ApiModel } from './ApiModel';\nimport { ApiPackage } from './ApiPackage';\nimport { ApiEntryPoint } from './ApiEntryPoint';\nimport { ApiItemContainerMixin } from '../mixins/ApiItemContainerMixin';\nimport { ApiParameterListMixin } from '../mixins/ApiParameterListMixin';\n\n/**\n * Result object for {@link ApiModel.resolveDeclarationReference}.\n *\n * @public\n */\nexport interface IResolveDeclarationReferenceResult {\n /**\n * The referenced ApiItem, if the declaration reference could be resolved.\n */\n resolvedApiItem: ApiItem | undefined;\n\n /**\n * If resolvedApiItem is undefined, then this will always contain an error message explaining why the\n * resolution failed.\n */\n errorMessage: string | undefined;\n}\n\n/**\n * This resolves a TSDoc declaration reference by walking the `ApiModel` hierarchy.\n *\n * @remarks\n *\n * This class is analogous to `AstReferenceResolver` from the `@microsoft/api-extractor` project,\n * which resolves declaration references by walking the compiler state.\n */\nexport class ModelReferenceResolver {\n private readonly _apiModel: ApiModel;\n\n public constructor(apiModel: ApiModel) {\n this._apiModel = apiModel;\n }\n\n public resolve(\n declarationReference: DocDeclarationReference,\n contextApiItem: ApiItem | undefined\n ): IResolveDeclarationReferenceResult {\n const result: IResolveDeclarationReferenceResult = {\n resolvedApiItem: undefined,\n errorMessage: undefined\n };\n\n let apiPackage: ApiPackage | undefined = undefined;\n\n // Is this an absolute reference?\n if (declarationReference.packageName !== undefined) {\n apiPackage = this._apiModel.tryGetPackageByName(declarationReference.packageName);\n if (apiPackage === undefined) {\n result.errorMessage = `The package \"${declarationReference.packageName}\" could not be located`;\n return result;\n }\n } else {\n // If the package name is omitted, try to infer it from the context\n if (contextApiItem !== undefined) {\n apiPackage = contextApiItem.getAssociatedPackage();\n }\n\n if (apiPackage === undefined) {\n result.errorMessage =\n `The reference does not include a package name, and the package could not be inferred` +\n ` from the context`;\n return result;\n }\n }\n\n const importPath: string = declarationReference.importPath || '';\n\n const foundEntryPoints: ReadonlyArray<ApiEntryPoint> = apiPackage.findEntryPointsByPath(importPath);\n if (foundEntryPoints.length !== 1) {\n result.errorMessage = `The import path \"${importPath}\" could not be resolved`;\n return result;\n }\n\n let currentItem: ApiItem = foundEntryPoints[0];\n\n // Now search for the member reference\n for (const memberReference of declarationReference.memberReferences) {\n if (memberReference.memberSymbol !== undefined) {\n result.errorMessage = `Symbols are not yet supported in declaration references`;\n return result;\n }\n\n if (memberReference.memberIdentifier === undefined) {\n result.errorMessage = `Missing member identifier`;\n return result;\n }\n\n const identifier: string = memberReference.memberIdentifier.identifier;\n\n if (!ApiItemContainerMixin.isBaseClassOf(currentItem)) {\n // For example, {@link MyClass.myMethod.X} is invalid because methods cannot contain members\n result.errorMessage = `Unable to resolve ${JSON.stringify(\n identifier\n )} because ${currentItem.getScopedNameWithinPackage()} cannot act as a container`;\n return result;\n }\n\n const foundMembers: ReadonlyArray<ApiItem> = currentItem.findMembersByName(identifier);\n if (foundMembers.length === 0) {\n result.errorMessage = `The member reference ${JSON.stringify(identifier)} was not found`;\n return result;\n }\n\n const memberSelector: DocMemberSelector | undefined = memberReference.selector;\n if (memberSelector === undefined) {\n if (foundMembers.length > 1) {\n result.errorMessage = `The member reference ${JSON.stringify(identifier)} was ambiguous`;\n return result;\n }\n currentItem = foundMembers[0];\n } else {\n let memberSelectorResult: IResolveDeclarationReferenceResult;\n switch (memberSelector.selectorKind) {\n case SelectorKind.System:\n memberSelectorResult = this._selectUsingSystemSelector(foundMembers, memberSelector, identifier);\n break;\n case SelectorKind.Index:\n memberSelectorResult = this._selectUsingIndexSelector(foundMembers, memberSelector, identifier);\n break;\n default:\n result.errorMessage = `The selector \"${memberSelector.selector}\" is not a supported selector type`;\n return result;\n }\n if (memberSelectorResult.resolvedApiItem === undefined) {\n return memberSelectorResult;\n }\n currentItem = memberSelectorResult.resolvedApiItem;\n }\n }\n result.resolvedApiItem = currentItem;\n return result;\n }\n\n private _selectUsingSystemSelector(\n foundMembers: ReadonlyArray<ApiItem>,\n memberSelector: DocMemberSelector,\n identifier: string\n ): IResolveDeclarationReferenceResult {\n const result: IResolveDeclarationReferenceResult = {\n resolvedApiItem: undefined,\n errorMessage: undefined\n };\n\n const selectorName: string = memberSelector.selector;\n\n let selectorItemKind: ApiItemKind;\n switch (selectorName) {\n case 'class':\n selectorItemKind = ApiItemKind.Class;\n break;\n case 'enum':\n selectorItemKind = ApiItemKind.Enum;\n break;\n case 'function':\n selectorItemKind = ApiItemKind.Function;\n break;\n case 'interface':\n selectorItemKind = ApiItemKind.Interface;\n break;\n case 'namespace':\n selectorItemKind = ApiItemKind.Namespace;\n break;\n case 'type':\n selectorItemKind = ApiItemKind.TypeAlias;\n break;\n case 'variable':\n selectorItemKind = ApiItemKind.Variable;\n break;\n default:\n result.errorMessage = `Unsupported system selector \"${selectorName}\"`;\n return result;\n }\n\n const matches: ApiItem[] = foundMembers.filter((x) => x.kind === selectorItemKind);\n if (matches.length === 0) {\n result.errorMessage =\n `A declaration for \"${identifier}\" was not found that matches the` +\n ` TSDoc selector \"${selectorName}\"`;\n return result;\n }\n if (matches.length > 1) {\n result.errorMessage = `More than one declaration \"${identifier}\" matches the TSDoc selector \"${selectorName}\"`;\n }\n result.resolvedApiItem = matches[0];\n return result;\n }\n\n private _selectUsingIndexSelector(\n foundMembers: ReadonlyArray<ApiItem>,\n memberSelector: DocMemberSelector,\n identifier: string\n ): IResolveDeclarationReferenceResult {\n const result: IResolveDeclarationReferenceResult = {\n resolvedApiItem: undefined,\n errorMessage: undefined\n };\n\n const selectedMembers: ApiItem[] = [];\n\n const selectorOverloadIndex: number = parseInt(memberSelector.selector);\n for (const foundMember of foundMembers) {\n if (ApiParameterListMixin.isBaseClassOf(foundMember)) {\n if (foundMember.overloadIndex === selectorOverloadIndex) {\n selectedMembers.push(foundMember);\n }\n }\n }\n\n if (selectedMembers.length === 0) {\n result.errorMessage =\n `An overload for ${JSON.stringify(identifier)} was not found that matches` +\n ` the TSDoc selector \":${selectorOverloadIndex}\"`;\n return result;\n }\n\n if (selectedMembers.length === 1) {\n result.resolvedApiItem = selectedMembers[0];\n return result;\n }\n\n result.errorMessage = `The member reference ${JSON.stringify(identifier)} was ambiguous`;\n return result;\n }\n}\n"]}
|
|
@@ -9,6 +9,7 @@ export interface ITypeParameterOptions {
|
|
|
9
9
|
name: string;
|
|
10
10
|
constraintExcerpt: Excerpt;
|
|
11
11
|
defaultTypeExcerpt: Excerpt;
|
|
12
|
+
isOptional: boolean;
|
|
12
13
|
parent: ApiTypeParameterListMixin;
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
@@ -68,6 +69,10 @@ export declare class TypeParameter {
|
|
|
68
69
|
* The parameter name.
|
|
69
70
|
*/
|
|
70
71
|
name: string;
|
|
72
|
+
/**
|
|
73
|
+
* Whether the type parameter is optional. True IFF there exists a `defaultTypeExcerpt`.
|
|
74
|
+
*/
|
|
75
|
+
isOptional: boolean;
|
|
71
76
|
private _parent;
|
|
72
77
|
constructor(options: ITypeParameterOptions);
|
|
73
78
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeParameter.d.ts","sourceRoot":"","sources":["../../src/model/TypeParameter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,yBAAyB,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,aAAa;IACxB;;;;;;;;;;;OAWG;IACH,SAAgB,iBAAiB,EAAE,OAAO,CAAC;IAE3C;;;;;;;;;;;OAWG;IACH,SAAgB,kBAAkB,EAAE,OAAO,CAAC;IAE5C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,OAAO,CAA4B;gBAExB,OAAO,EAAE,qBAAqB;
|
|
1
|
+
{"version":3,"file":"TypeParameter.d.ts","sourceRoot":"","sources":["../../src/model/TypeParameter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,yBAAyB,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,aAAa;IACxB;;;;;;;;;;;OAWG;IACH,SAAgB,iBAAiB,EAAE,OAAO,CAAC;IAE3C;;;;;;;;;;;OAWG;IACH,SAAgB,kBAAkB,EAAE,OAAO,CAAC;IAE5C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACI,UAAU,EAAE,OAAO,CAAC;IAE3B,OAAO,CAAC,OAAO,CAA4B;gBAExB,OAAO,EAAE,qBAAqB;IAQjD;;OAEG;IACH,IAAW,mBAAmB,IAAI,KAAK,CAAC,aAAa,GAAG,SAAS,CAMhE;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeParameter.js","sourceRoot":"","sources":["../../src/model/TypeParameter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAI3D,kEAA+D;
|
|
1
|
+
{"version":3,"file":"TypeParameter.js","sourceRoot":"","sources":["../../src/model/TypeParameter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAI3D,kEAA+D;AAgB/D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAa,aAAa;IAyCxB,YAAmB,OAA8B;QAC/C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC5B,IAAI,IAAI,CAAC,OAAO,YAAY,qCAAiB,EAAE;YAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;gBAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1E;SACF;IACH,CAAC;CACF;AA3DD,sCA2DC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as tsdoc from '@microsoft/tsdoc';\n\nimport { ApiDocumentedItem } from '../items/ApiDocumentedItem';\nimport { Excerpt } from '../mixins/Excerpt';\nimport { ApiTypeParameterListMixin } from '../mixins/ApiTypeParameterListMixin';\n\n/**\n * Constructor options for {@link TypeParameter}.\n * @public\n */\nexport interface ITypeParameterOptions {\n name: string;\n constraintExcerpt: Excerpt;\n defaultTypeExcerpt: Excerpt;\n isOptional: boolean;\n parent: ApiTypeParameterListMixin;\n}\n\n/**\n * Represents a named type parameter for a generic declaration.\n *\n * @remarks\n *\n * `TypeParameter` represents a TypeScript declaration such as `T` in this example:\n *\n * ```ts\n * interface IIdentifier {\n * getCode(): string;\n * }\n *\n * class BarCode implements IIdentifier {\n * private _value: number;\n * public getCode(): string { return this._value.toString(); }\n * }\n *\n * class Book<TIdentifier extends IIdentifier = BarCode> {\n * public identifier: TIdentifier;\n * }\n * ```\n *\n * `TypeParameter` objects belong to the {@link (ApiTypeParameterListMixin:interface).typeParameters} collection.\n *\n * @public\n */\nexport class TypeParameter {\n /**\n * An {@link Excerpt} that describes the base constraint of the type parameter.\n *\n * @remarks\n * In the example below, the `constraintExcerpt` would correspond to the `IIdentifier` subexpression:\n *\n * ```ts\n * class Book<TIdentifier extends IIdentifier = BarCode> {\n * public identifier: TIdentifier;\n * }\n * ```\n */\n public readonly constraintExcerpt: Excerpt;\n\n /**\n * An {@link Excerpt} that describes the default type of the type parameter.\n *\n * @remarks\n * In the example below, the `defaultTypeExcerpt` would correspond to the `BarCode` subexpression:\n *\n * ```ts\n * class Book<TIdentifier extends IIdentifier = BarCode> {\n * public identifier: TIdentifier;\n * }\n * ```\n */\n public readonly defaultTypeExcerpt: Excerpt;\n\n /**\n * The parameter name.\n */\n public name: string;\n\n /**\n * Whether the type parameter is optional. True IFF there exists a `defaultTypeExcerpt`.\n */\n public isOptional: boolean;\n\n private _parent: ApiTypeParameterListMixin;\n\n public constructor(options: ITypeParameterOptions) {\n this.name = options.name;\n this.constraintExcerpt = options.constraintExcerpt;\n this.defaultTypeExcerpt = options.defaultTypeExcerpt;\n this.isOptional = options.isOptional;\n this._parent = options.parent;\n }\n\n /**\n * Returns the `@typeParam` documentation for this parameter, if present.\n */\n public get tsdocTypeParamBlock(): tsdoc.DocParamBlock | undefined {\n if (this._parent instanceof ApiDocumentedItem) {\n if (this._parent.tsdocComment) {\n return this._parent.tsdocComment.typeParams.tryGetBlockByName(this.name);\n }\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/api-extractor-model",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.17.1",
|
|
4
4
|
"description": "A helper library for loading and saving the .api.json files created by API Extractor",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"typings": "dist/rollup.d.ts",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@microsoft/tsdoc": "0.
|
|
16
|
-
"@microsoft/tsdoc-config": "~0.
|
|
17
|
-
"@rushstack/node-core-library": "3.45.
|
|
15
|
+
"@microsoft/tsdoc": "0.14.1",
|
|
16
|
+
"@microsoft/tsdoc-config": "~0.16.1",
|
|
17
|
+
"@rushstack/node-core-library": "3.45.3"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@rushstack/eslint-config": "2.5.
|
|
21
|
-
"@rushstack/heft": "0.44.
|
|
22
|
-
"@rushstack/heft-node-rig": "1.7
|
|
20
|
+
"@rushstack/eslint-config": "2.5.4",
|
|
21
|
+
"@rushstack/heft": "0.44.9",
|
|
22
|
+
"@rushstack/heft-node-rig": "1.8.7",
|
|
23
23
|
"@types/heft-jest": "1.0.1",
|
|
24
24
|
"@types/node": "12.20.24"
|
|
25
25
|
},
|