@microsoft/api-extractor 7.30.0 → 7.30.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.
@@ -49,6 +49,10 @@ export declare class CollectorEntity {
49
49
  * such as "export class X { }" instead of "export { X }".
50
50
  */
51
51
  get shouldInlineExport(): boolean;
52
+ /**
53
+ * Indicates that this entity is exported from the package entry point. Compare to `CollectorEntity.exported`.
54
+ */
55
+ get exportedFromEntryPoint(): boolean;
52
56
  /**
53
57
  * Indicates that this entity is exported from its parent module (i.e. either the package entry point or
54
58
  * a local namespace). Compare to `CollectorEntity.consumable`.
@@ -96,24 +100,6 @@ export declare class CollectorEntity {
96
100
  * In this example, `add` is exported via the consumable `calculator` namespace.
97
101
  */
98
102
  get consumable(): boolean;
99
- /**
100
- * Whether the entity has any parent entities.
101
- *
102
- * @remarks
103
- * In the example below:
104
- *
105
- * ```ts
106
- * declare function add(): void;
107
- * declare namespace calculator {
108
- * export {
109
- * add
110
- * }
111
- * }
112
- * ```
113
- *
114
- * The `CollectorEntity` for `calculator` is the parent of the `CollectorEntity` for `add`.
115
- */
116
- get hasParents(): boolean;
117
103
  /**
118
104
  * Adds a new export name to the entity.
119
105
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CollectorEntity.d.ts","sourceRoot":"","sources":["../../src/collector/CollectorEntity.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,yBAAyB,CAAgD;IAEjF,OAAO,CAAC,YAAY,CAAiC;IAErD,OAAO,CAAC,QAAQ,CAAiC;gBAE9B,SAAS,EAAE,SAAS;IAIvC;;;;OAIG;IACH,IAAW,WAAW,IAAI,MAAM,GAAG,SAAS,CAE3C;IAED,IAAW,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAG/C;IAED;;;;;;;;;;OAUG;IACH,IAAW,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,CAM5C;IAED;;;OAGG;IACH,IAAW,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEhD;IAED;;;OAGG;IACH,IAAW,kBAAkB,IAAI,OAAO,CAYvC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,IAAW,QAAQ,IAAI,OAAO,CAY7B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,IAAW,UAAU,IAAI,OAAO,CAY/B;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED;;OAEG;IACI,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAa9C;;;;;;;;;;;;;;;;OAgBG;IACI,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAOjF;;OAEG;IACI,UAAU,IAAI,MAAM;CAM5B"}
1
+ {"version":3,"file":"CollectorEntity.d.ts","sourceRoot":"","sources":["../../src/collector/CollectorEntity.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,yBAAyB,CAAgD;IAEjF,OAAO,CAAC,YAAY,CAAiC;IAErD,OAAO,CAAC,QAAQ,CAAiC;gBAE9B,SAAS,EAAE,SAAS;IAIvC;;;;OAIG;IACH,IAAW,WAAW,IAAI,MAAM,GAAG,SAAS,CAE3C;IAED,IAAW,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAG/C;IAED;;;;;;;;;;OAUG;IACH,IAAW,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,CAM5C;IAED;;;OAGG;IACH,IAAW,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEhD;IAED;;;OAGG;IACH,IAAW,kBAAkB,IAAI,OAAO,CAYvC;IAED;;OAEG;IACH,IAAW,sBAAsB,IAAI,OAAO,CAE3C;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,IAAW,QAAQ,IAAI,OAAO,CAY7B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,IAAW,UAAU,IAAI,OAAO,CAY/B;IAED;;OAEG;IACI,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAa9C;;;;;;;;;;;;;;;;OAgBG;IACI,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAOjF;;OAEG;IACI,UAAU,IAAI,MAAM;CAM5B"}
@@ -103,6 +103,12 @@ class CollectorEntity {
103
103
  }
104
104
  return false;
105
105
  }
106
+ /**
107
+ * Indicates that this entity is exported from the package entry point. Compare to `CollectorEntity.exported`.
108
+ */
109
+ get exportedFromEntryPoint() {
110
+ return this.exportNames.size > 0;
111
+ }
106
112
  /**
107
113
  * Indicates that this entity is exported from its parent module (i.e. either the package entry point or
108
114
  * a local namespace). Compare to `CollectorEntity.consumable`.
@@ -124,7 +130,7 @@ class CollectorEntity {
124
130
  */
125
131
  get exported() {
126
132
  // Exported from top-level?
127
- if (this.exportNames.size > 0)
133
+ if (this.exportedFromEntryPoint)
128
134
  return true;
129
135
  // Exported from parent?
130
136
  for (const localExportNames of this._localExportNamesByParent.values()) {
@@ -162,7 +168,7 @@ class CollectorEntity {
162
168
  */
163
169
  get consumable() {
164
170
  // Exported from top-level?
165
- if (this.exportNames.size > 0)
171
+ if (this.exportedFromEntryPoint)
166
172
  return true;
167
173
  // Exported from consumable parent?
168
174
  for (const [parent, localExportNames] of this._localExportNamesByParent) {
@@ -172,26 +178,6 @@ class CollectorEntity {
172
178
  }
173
179
  return false;
174
180
  }
175
- /**
176
- * Whether the entity has any parent entities.
177
- *
178
- * @remarks
179
- * In the example below:
180
- *
181
- * ```ts
182
- * declare function add(): void;
183
- * declare namespace calculator {
184
- * export {
185
- * add
186
- * }
187
- * }
188
- * ```
189
- *
190
- * The `CollectorEntity` for `calculator` is the parent of the `CollectorEntity` for `add`.
191
- */
192
- get hasParents() {
193
- return this._localExportNamesByParent.size > 0;
194
- }
195
181
  /**
196
182
  * Adds a new export name to the entity.
197
183
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CollectorEntity.js","sourceRoot":"","sources":["../../src/collector/CollectorEntity.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as ts from 'typescript';\n\nimport { AstSymbol } from '../analyzer/AstSymbol';\nimport { Collector } from './Collector';\nimport { Sort } from '@rushstack/node-core-library';\nimport { AstEntity } from '../analyzer/AstEntity';\n\n/**\n * This is a data structure used by the Collector to track an AstEntity that may be emitted in the *.d.ts file.\n *\n * @remarks\n * The additional contextual state beyond AstSymbol is:\n * - Whether it's an export of this entry point or not\n * - The nameForEmit, which may get renamed by DtsRollupGenerator._makeUniqueNames()\n * - The export name (or names, if the same symbol is exported multiple times)\n */\nexport class CollectorEntity {\n /**\n * The AstEntity that this entry represents.\n */\n public readonly astEntity: AstEntity;\n\n private _exportNames: Set<string> = new Set();\n private _exportNamesSorted: boolean = false;\n private _singleExportName: string | undefined = undefined;\n private _localExportNamesByParent: Map<CollectorEntity, Set<string>> = new Map();\n\n private _nameForEmit: string | undefined = undefined;\n\n private _sortKey: string | undefined = undefined;\n\n public constructor(astEntity: AstEntity) {\n this.astEntity = astEntity;\n }\n\n /**\n * The declaration name that will be emitted in the .d.ts rollup, .api.md, and .api.json files. Generated by\n * `Collector._makeUniqueNames`. Be aware that the declaration may be renamed to avoid conflicts with (1)\n * global names (e.g. `Promise`) and (2) if local, other local names across different files.\n */\n public get nameForEmit(): string | undefined {\n return this._nameForEmit;\n }\n\n public set nameForEmit(value: string | undefined) {\n this._nameForEmit = value;\n this._sortKey = undefined; // invalidate the cached value\n }\n\n /**\n * The list of export names if this symbol is exported from the entry point.\n *\n * @remarks\n * Note that a given symbol may be exported more than once:\n * ```\n * class X { }\n * export { X }\n * export { X as Y }\n * ```\n */\n public get exportNames(): ReadonlySet<string> {\n if (!this._exportNamesSorted) {\n Sort.sortSet(this._exportNames);\n this._exportNamesSorted = true;\n }\n return this._exportNames;\n }\n\n /**\n * If exportNames contains only one string, then singleExportName is that string.\n * In all other cases, it is undefined.\n */\n public get singleExportName(): string | undefined {\n return this._singleExportName;\n }\n\n /**\n * This is true if exportNames contains only one string, and the declaration can be exported using the inline syntax\n * such as \"export class X { }\" instead of \"export { X }\".\n */\n public get shouldInlineExport(): boolean {\n // We don't inline an AstImport\n if (this.astEntity instanceof AstSymbol) {\n // We don't inline a symbol with more than one exported name\n if (this._singleExportName !== undefined && this._singleExportName !== ts.InternalSymbolName.Default) {\n // We can't inline a symbol whose emitted name is different from the export name\n if (this._nameForEmit === undefined || this._nameForEmit === this._singleExportName) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Indicates that this entity is exported from its parent module (i.e. either the package entry point or\n * a local namespace). Compare to `CollectorEntity.consumable`.\n *\n * @remarks\n * In the example below:\n *\n * ```ts\n * declare function add(): void;\n * declare namespace calculator {\n * export {\n * add\n * }\n * }\n * ```\n *\n * Namespace `calculator` is neither exported nor consumable, function `add` is exported (from `calculator`)\n * but not consumable.\n */\n public get exported(): boolean {\n // Exported from top-level?\n if (this.exportNames.size > 0) return true;\n\n // Exported from parent?\n for (const localExportNames of this._localExportNamesByParent.values()) {\n if (localExportNames.size > 0) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Indicates that it is possible for a consumer of the API to \"consume\" this entity, either by importing\n * it directly or via a namespace. If an entity is not consumable, then API Extractor will report an\n * `ae-forgotten-export` warning. Compare to `CollectorEntity.exported`.\n *\n * @remarks\n * An API item is consumable if:\n *\n * 1. It is exported from the top-level entry point OR\n * 2. It is exported from a consumable parent entity.\n *\n * For an example of #2, consider how `AstNamespaceImport` entities are processed. A generated rollup.d.ts\n * might look like this:\n *\n * ```ts\n * declare function add(): void;\n * declare namespace calculator {\n * export {\n * add\n * }\n * }\n * export { calculator }\n * ```\n *\n * In this example, `add` is exported via the consumable `calculator` namespace.\n */\n public get consumable(): boolean {\n // Exported from top-level?\n if (this.exportNames.size > 0) return true;\n\n // Exported from consumable parent?\n for (const [parent, localExportNames] of this._localExportNamesByParent) {\n if (localExportNames.size > 0 && parent.consumable) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Whether the entity has any parent entities.\n *\n * @remarks\n * In the example below:\n *\n * ```ts\n * declare function add(): void;\n * declare namespace calculator {\n * export {\n * add\n * }\n * }\n * ```\n *\n * The `CollectorEntity` for `calculator` is the parent of the `CollectorEntity` for `add`.\n */\n public get hasParents(): boolean {\n return this._localExportNamesByParent.size > 0;\n }\n\n /**\n * Adds a new export name to the entity.\n */\n public addExportName(exportName: string): void {\n if (!this._exportNames.has(exportName)) {\n this._exportNamesSorted = false;\n this._exportNames.add(exportName);\n\n if (this._exportNames.size === 1) {\n this._singleExportName = exportName;\n } else {\n this._singleExportName = undefined;\n }\n }\n }\n\n /**\n * Adds a new local export name to the entity.\n *\n * @remarks\n * In the example below:\n *\n * ```ts\n * declare function add(): void;\n * declare namespace calculator {\n * export {\n * add\n * }\n * }\n * ```\n *\n * `add` is the local export name for the `CollectorEntity` for `add`.\n */\n public addLocalExportName(localExportName: string, parent: CollectorEntity): void {\n const localExportNames: Set<string> = this._localExportNamesByParent.get(parent) || new Set();\n localExportNames.add(localExportName);\n\n this._localExportNamesByParent.set(parent, localExportNames);\n }\n\n /**\n * A sorting key used by DtsRollupGenerator._makeUniqueNames()\n */\n public getSortKey(): string {\n if (!this._sortKey) {\n this._sortKey = Collector.getSortKeyIgnoringUnderscore(this.nameForEmit || this.astEntity.localName);\n }\n return this._sortKey;\n }\n}\n"]}
1
+ {"version":3,"file":"CollectorEntity.js","sourceRoot":"","sources":["../../src/collector/CollectorEntity.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as ts from 'typescript';\n\nimport { AstSymbol } from '../analyzer/AstSymbol';\nimport { Collector } from './Collector';\nimport { Sort } from '@rushstack/node-core-library';\nimport { AstEntity } from '../analyzer/AstEntity';\n\n/**\n * This is a data structure used by the Collector to track an AstEntity that may be emitted in the *.d.ts file.\n *\n * @remarks\n * The additional contextual state beyond AstSymbol is:\n * - Whether it's an export of this entry point or not\n * - The nameForEmit, which may get renamed by DtsRollupGenerator._makeUniqueNames()\n * - The export name (or names, if the same symbol is exported multiple times)\n */\nexport class CollectorEntity {\n /**\n * The AstEntity that this entry represents.\n */\n public readonly astEntity: AstEntity;\n\n private _exportNames: Set<string> = new Set();\n private _exportNamesSorted: boolean = false;\n private _singleExportName: string | undefined = undefined;\n private _localExportNamesByParent: Map<CollectorEntity, Set<string>> = new Map();\n\n private _nameForEmit: string | undefined = undefined;\n\n private _sortKey: string | undefined = undefined;\n\n public constructor(astEntity: AstEntity) {\n this.astEntity = astEntity;\n }\n\n /**\n * The declaration name that will be emitted in the .d.ts rollup, .api.md, and .api.json files. Generated by\n * `Collector._makeUniqueNames`. Be aware that the declaration may be renamed to avoid conflicts with (1)\n * global names (e.g. `Promise`) and (2) if local, other local names across different files.\n */\n public get nameForEmit(): string | undefined {\n return this._nameForEmit;\n }\n\n public set nameForEmit(value: string | undefined) {\n this._nameForEmit = value;\n this._sortKey = undefined; // invalidate the cached value\n }\n\n /**\n * The list of export names if this symbol is exported from the entry point.\n *\n * @remarks\n * Note that a given symbol may be exported more than once:\n * ```\n * class X { }\n * export { X }\n * export { X as Y }\n * ```\n */\n public get exportNames(): ReadonlySet<string> {\n if (!this._exportNamesSorted) {\n Sort.sortSet(this._exportNames);\n this._exportNamesSorted = true;\n }\n return this._exportNames;\n }\n\n /**\n * If exportNames contains only one string, then singleExportName is that string.\n * In all other cases, it is undefined.\n */\n public get singleExportName(): string | undefined {\n return this._singleExportName;\n }\n\n /**\n * This is true if exportNames contains only one string, and the declaration can be exported using the inline syntax\n * such as \"export class X { }\" instead of \"export { X }\".\n */\n public get shouldInlineExport(): boolean {\n // We don't inline an AstImport\n if (this.astEntity instanceof AstSymbol) {\n // We don't inline a symbol with more than one exported name\n if (this._singleExportName !== undefined && this._singleExportName !== ts.InternalSymbolName.Default) {\n // We can't inline a symbol whose emitted name is different from the export name\n if (this._nameForEmit === undefined || this._nameForEmit === this._singleExportName) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Indicates that this entity is exported from the package entry point. Compare to `CollectorEntity.exported`.\n */\n public get exportedFromEntryPoint(): boolean {\n return this.exportNames.size > 0;\n }\n\n /**\n * Indicates that this entity is exported from its parent module (i.e. either the package entry point or\n * a local namespace). Compare to `CollectorEntity.consumable`.\n *\n * @remarks\n * In the example below:\n *\n * ```ts\n * declare function add(): void;\n * declare namespace calculator {\n * export {\n * add\n * }\n * }\n * ```\n *\n * Namespace `calculator` is neither exported nor consumable, function `add` is exported (from `calculator`)\n * but not consumable.\n */\n public get exported(): boolean {\n // Exported from top-level?\n if (this.exportedFromEntryPoint) return true;\n\n // Exported from parent?\n for (const localExportNames of this._localExportNamesByParent.values()) {\n if (localExportNames.size > 0) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Indicates that it is possible for a consumer of the API to \"consume\" this entity, either by importing\n * it directly or via a namespace. If an entity is not consumable, then API Extractor will report an\n * `ae-forgotten-export` warning. Compare to `CollectorEntity.exported`.\n *\n * @remarks\n * An API item is consumable if:\n *\n * 1. It is exported from the top-level entry point OR\n * 2. It is exported from a consumable parent entity.\n *\n * For an example of #2, consider how `AstNamespaceImport` entities are processed. A generated rollup.d.ts\n * might look like this:\n *\n * ```ts\n * declare function add(): void;\n * declare namespace calculator {\n * export {\n * add\n * }\n * }\n * export { calculator }\n * ```\n *\n * In this example, `add` is exported via the consumable `calculator` namespace.\n */\n public get consumable(): boolean {\n // Exported from top-level?\n if (this.exportedFromEntryPoint) return true;\n\n // Exported from consumable parent?\n for (const [parent, localExportNames] of this._localExportNamesByParent) {\n if (localExportNames.size > 0 && parent.consumable) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Adds a new export name to the entity.\n */\n public addExportName(exportName: string): void {\n if (!this._exportNames.has(exportName)) {\n this._exportNamesSorted = false;\n this._exportNames.add(exportName);\n\n if (this._exportNames.size === 1) {\n this._singleExportName = exportName;\n } else {\n this._singleExportName = undefined;\n }\n }\n }\n\n /**\n * Adds a new local export name to the entity.\n *\n * @remarks\n * In the example below:\n *\n * ```ts\n * declare function add(): void;\n * declare namespace calculator {\n * export {\n * add\n * }\n * }\n * ```\n *\n * `add` is the local export name for the `CollectorEntity` for `add`.\n */\n public addLocalExportName(localExportName: string, parent: CollectorEntity): void {\n const localExportNames: Set<string> = this._localExportNamesByParent.get(parent) || new Set();\n localExportNames.add(localExportName);\n\n this._localExportNamesByParent.set(parent, localExportNames);\n }\n\n /**\n * A sorting key used by DtsRollupGenerator._makeUniqueNames()\n */\n public getSortKey(): string {\n if (!this._sortKey) {\n this._sortKey = Collector.getSortKeyIgnoringUnderscore(this.nameForEmit || this.astEntity.localName);\n }\n return this._sortKey;\n }\n}\n"]}
@@ -34,6 +34,5 @@ export declare class ApiModelGenerator {
34
34
  private _captureTypeParameters;
35
35
  private _captureParameters;
36
36
  private _isReadonly;
37
- private _isExported;
38
37
  }
39
38
  //# sourceMappingURL=ApiModelGenerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiModelGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/ApiModelGenerator.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,QAAQ,EAER,UAAU,EAwBX,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAcnD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgC;gBAEjD,SAAS,EAAE,SAAS;IAMvC,IAAW,QAAQ,IAAI,QAAQ,CAE9B;IAEM,eAAe,IAAI,UAAU;IA2BpC,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,mBAAmB;IA6F3B,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,wBAAwB;IAkDhC,OAAO,CAAC,sBAAsB;IA0C9B,OAAO,CAAC,gBAAgB;IA6DxB,OAAO,CAAC,6BAA6B;IAkDrC,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,qBAAqB;IAwC7B,OAAO,CAAC,mBAAmB;IAqD3B,OAAO,CAAC,yBAAyB;IA8CjC,OAAO,CAAC,oBAAoB;IAyD5B,OAAO,CAAC,iBAAiB;IA4DzB,OAAO,CAAC,0BAA0B;IAuDlC,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,mBAAmB;IAiE3B,OAAO,CAAC,4BAA4B;IA6CpC,OAAO,CAAC,oBAAoB;IA+C5B,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,WAAW;CAWpB"}
1
+ {"version":3,"file":"ApiModelGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/ApiModelGenerator.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,QAAQ,EAER,UAAU,EAwBX,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAkBnD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgC;gBAEjD,SAAS,EAAE,SAAS;IAMvC,IAAW,QAAQ,IAAI,QAAQ,CAE9B;IAEM,eAAe,IAAI,UAAU;IA6BpC,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,0BAA0B;IAkClC,OAAO,CAAC,mBAAmB;IAyF3B,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,wBAAwB;IA+ChC,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,gBAAgB;IA2DxB,OAAO,CAAC,6BAA6B;IAkDrC,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,qBAAqB;IAoC7B,OAAO,CAAC,mBAAmB;IAgD3B,OAAO,CAAC,yBAAyB;IA2CjC,OAAO,CAAC,oBAAoB;IAuD5B,OAAO,CAAC,iBAAiB;IAuDzB,OAAO,CAAC,0BAA0B;IAqDlC,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,mBAAmB;IA2D3B,OAAO,CAAC,4BAA4B;IA4CpC,OAAO,CAAC,oBAAoB;IA0C5B,OAAO,CAAC,mBAAmB;IA2C3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,WAAW;CA8BpB"}
@@ -34,7 +34,6 @@ const AstSymbol_1 = require("../analyzer/AstSymbol");
34
34
  const DeclarationReferenceGenerator_1 = require("./DeclarationReferenceGenerator");
35
35
  const AstNamespaceImport_1 = require("../analyzer/AstNamespaceImport");
36
36
  const TypeScriptInternals_1 = require("../analyzer/TypeScriptInternals");
37
- const node_core_library_1 = require("@rushstack/node-core-library");
38
37
  class ApiModelGenerator {
39
38
  constructor(collector) {
40
39
  this._collector = collector;
@@ -55,20 +54,24 @@ class ApiModelGenerator {
55
54
  const apiEntryPoint = new api_extractor_model_1.ApiEntryPoint({ name: '' });
56
55
  apiPackage.addMember(apiEntryPoint);
57
56
  for (const entity of this._collector.entities) {
58
- // Note that we don't process entities that have parents, because those entities will be recursively
59
- // processed by the parent.
60
- if (!entity.hasParents &&
61
- (entity.consumable || this._collector.extractorConfig.docModelIncludeForgottenExports)) {
62
- this._processAstEntity(entity.astEntity, entity.nameForEmit, apiEntryPoint);
57
+ // Only process entities that are exported from the entry point. Entities that are exported from
58
+ // `AstNamespaceImport` entities will be processed by `_processAstNamespaceImport`. However, if
59
+ // we are including forgotten exports, then process everything.
60
+ if (entity.exportedFromEntryPoint || this._collector.extractorConfig.docModelIncludeForgottenExports) {
61
+ this._processAstEntity(entity.astEntity, {
62
+ name: entity.nameForEmit,
63
+ isExported: entity.exportedFromEntryPoint,
64
+ parentApiItem: apiEntryPoint
65
+ });
63
66
  }
64
67
  }
65
68
  return apiPackage;
66
69
  }
67
- _processAstEntity(astEntity, exportedName, parentApiItem) {
70
+ _processAstEntity(astEntity, context) {
68
71
  if (astEntity instanceof AstSymbol_1.AstSymbol) {
69
72
  // Skip ancillary declarations; we will process them with the main declaration
70
73
  for (const astDeclaration of this._collector.getNonAncillaryDeclarations(astEntity)) {
71
- this._processDeclaration(astDeclaration, exportedName, parentApiItem);
74
+ this._processDeclaration(astDeclaration, context);
72
75
  }
73
76
  return;
74
77
  }
@@ -87,18 +90,17 @@ class ApiModelGenerator {
87
90
  //
88
91
  // This could be improved in the future, but it requires a stable mechanism for choosing an associated parent.
89
92
  // For thoughts about this: https://github.com/microsoft/rushstack/issues/1308
90
- this._processAstNamespaceImport(astEntity, exportedName, parentApiItem);
93
+ this._processAstNamespaceImport(astEntity, context);
91
94
  return;
92
95
  }
93
96
  // TODO: Figure out how to represent reexported AstImport objects. Basically we need to introduce a new
94
97
  // ApiItem subclass for "export alias", similar to a type alias, but representing declarations of the
95
98
  // form "export { X } from 'external-package'". We can also use this to solve GitHub issue #950.
96
99
  }
97
- _processAstNamespaceImport(astNamespaceImport, exportedName, parentApiItem) {
100
+ _processAstNamespaceImport(astNamespaceImport, context) {
98
101
  const astModule = astNamespaceImport.astModule;
99
- const name = exportedName ? exportedName : astModule.moduleSymbol.name;
102
+ const { name, isExported, parentApiItem } = context;
100
103
  const containerKey = api_extractor_model_1.ApiNamespace.getContainerKey(name);
101
- const isExported = this._isExported(astNamespaceImport);
102
104
  let apiNamespace = parentApiItem.tryGetMemberByKey(containerKey);
103
105
  if (apiNamespace === undefined) {
104
106
  apiNamespace = new api_extractor_model_1.ApiNamespace({
@@ -111,10 +113,14 @@ class ApiModelGenerator {
111
113
  parentApiItem.addMember(apiNamespace);
112
114
  }
113
115
  astModule.astModuleExportInfo.exportedLocalEntities.forEach((exportedEntity, exportedName) => {
114
- this._processAstEntity(exportedEntity, exportedName, apiNamespace);
116
+ this._processAstEntity(exportedEntity, {
117
+ name: exportedName,
118
+ isExported: true,
119
+ parentApiItem: apiNamespace
120
+ });
115
121
  });
116
122
  }
117
- _processDeclaration(astDeclaration, exportedName, parentApiItem) {
123
+ _processDeclaration(astDeclaration, context) {
118
124
  if ((astDeclaration.modifierFlags & ts.ModifierFlags.Private) !== 0) {
119
125
  return; // trim out private declarations
120
126
  }
@@ -125,69 +131,70 @@ class ApiModelGenerator {
125
131
  }
126
132
  switch (astDeclaration.declaration.kind) {
127
133
  case ts.SyntaxKind.CallSignature:
128
- this._processApiCallSignature(astDeclaration, exportedName, parentApiItem);
134
+ this._processApiCallSignature(astDeclaration, context);
129
135
  break;
130
136
  case ts.SyntaxKind.Constructor:
131
- this._processApiConstructor(astDeclaration, exportedName, parentApiItem);
137
+ this._processApiConstructor(astDeclaration, context);
132
138
  break;
133
139
  case ts.SyntaxKind.ConstructSignature:
134
- this._processApiConstructSignature(astDeclaration, exportedName, parentApiItem);
140
+ this._processApiConstructSignature(astDeclaration, context);
135
141
  break;
136
142
  case ts.SyntaxKind.ClassDeclaration:
137
- this._processApiClass(astDeclaration, exportedName, parentApiItem);
143
+ this._processApiClass(astDeclaration, context);
138
144
  break;
139
145
  case ts.SyntaxKind.EnumDeclaration:
140
- this._processApiEnum(astDeclaration, exportedName, parentApiItem);
146
+ this._processApiEnum(astDeclaration, context);
141
147
  break;
142
148
  case ts.SyntaxKind.EnumMember:
143
- this._processApiEnumMember(astDeclaration, exportedName, parentApiItem);
149
+ this._processApiEnumMember(astDeclaration, context);
144
150
  break;
145
151
  case ts.SyntaxKind.FunctionDeclaration:
146
- this._processApiFunction(astDeclaration, exportedName, parentApiItem);
152
+ this._processApiFunction(astDeclaration, context);
147
153
  break;
148
154
  case ts.SyntaxKind.GetAccessor:
149
- this._processApiProperty(astDeclaration, exportedName, parentApiItem);
155
+ this._processApiProperty(astDeclaration, context);
150
156
  break;
151
157
  case ts.SyntaxKind.SetAccessor:
152
- this._processApiProperty(astDeclaration, exportedName, parentApiItem);
158
+ this._processApiProperty(astDeclaration, context);
153
159
  break;
154
160
  case ts.SyntaxKind.IndexSignature:
155
- this._processApiIndexSignature(astDeclaration, exportedName, parentApiItem);
161
+ this._processApiIndexSignature(astDeclaration, context);
156
162
  break;
157
163
  case ts.SyntaxKind.InterfaceDeclaration:
158
- this._processApiInterface(astDeclaration, exportedName, parentApiItem);
164
+ this._processApiInterface(astDeclaration, context);
159
165
  break;
160
166
  case ts.SyntaxKind.MethodDeclaration:
161
- this._processApiMethod(astDeclaration, exportedName, parentApiItem);
167
+ this._processApiMethod(astDeclaration, context);
162
168
  break;
163
169
  case ts.SyntaxKind.MethodSignature:
164
- this._processApiMethodSignature(astDeclaration, exportedName, parentApiItem);
170
+ this._processApiMethodSignature(astDeclaration, context);
165
171
  break;
166
172
  case ts.SyntaxKind.ModuleDeclaration:
167
- this._processApiNamespace(astDeclaration, exportedName, parentApiItem);
173
+ this._processApiNamespace(astDeclaration, context);
168
174
  break;
169
175
  case ts.SyntaxKind.PropertyDeclaration:
170
- this._processApiProperty(astDeclaration, exportedName, parentApiItem);
176
+ this._processApiProperty(astDeclaration, context);
171
177
  break;
172
178
  case ts.SyntaxKind.PropertySignature:
173
- this._processApiPropertySignature(astDeclaration, exportedName, parentApiItem);
179
+ this._processApiPropertySignature(astDeclaration, context);
174
180
  break;
175
181
  case ts.SyntaxKind.TypeAliasDeclaration:
176
- this._processApiTypeAlias(astDeclaration, exportedName, parentApiItem);
182
+ this._processApiTypeAlias(astDeclaration, context);
177
183
  break;
178
184
  case ts.SyntaxKind.VariableDeclaration:
179
- this._processApiVariable(astDeclaration, exportedName, parentApiItem);
185
+ this._processApiVariable(astDeclaration, context);
180
186
  break;
181
187
  default:
182
188
  // ignore unknown types
183
189
  }
184
190
  }
185
- _processChildDeclarations(astDeclaration, exportedName, parentApiItem) {
191
+ _processChildDeclarations(astDeclaration, context) {
186
192
  for (const childDeclaration of astDeclaration.children) {
187
- this._processDeclaration(childDeclaration, undefined, parentApiItem);
193
+ this._processDeclaration(childDeclaration, Object.assign(Object.assign({}, context), { name: childDeclaration.astSymbol.localName }));
188
194
  }
189
195
  }
190
- _processApiCallSignature(astDeclaration, exportedName, parentApiItem) {
196
+ _processApiCallSignature(astDeclaration, context) {
197
+ const { parentApiItem } = context;
191
198
  const overloadIndex = this._collector.getOverloadIndex(astDeclaration);
192
199
  const containerKey = api_extractor_model_1.ApiCallSignature.getContainerKey(overloadIndex);
193
200
  let apiCallSignature = parentApiItem.tryGetMemberByKey(containerKey);
@@ -214,7 +221,8 @@ class ApiModelGenerator {
214
221
  parentApiItem.addMember(apiCallSignature);
215
222
  }
216
223
  }
217
- _processApiConstructor(astDeclaration, exportedName, parentApiItem) {
224
+ _processApiConstructor(astDeclaration, context) {
225
+ const { parentApiItem } = context;
218
226
  const overloadIndex = this._collector.getOverloadIndex(astDeclaration);
219
227
  const containerKey = api_extractor_model_1.ApiConstructor.getContainerKey(overloadIndex);
220
228
  let apiConstructor = parentApiItem.tryGetMemberByKey(containerKey);
@@ -238,8 +246,8 @@ class ApiModelGenerator {
238
246
  parentApiItem.addMember(apiConstructor);
239
247
  }
240
248
  }
241
- _processApiClass(astDeclaration, exportedName, parentApiItem) {
242
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
249
+ _processApiClass(astDeclaration, context) {
250
+ const { name, isExported, parentApiItem } = context;
243
251
  const containerKey = api_extractor_model_1.ApiClass.getContainerKey(name);
244
252
  let apiClass = parentApiItem.tryGetMemberByKey(containerKey);
245
253
  if (apiClass === undefined) {
@@ -267,7 +275,6 @@ class ApiModelGenerator {
267
275
  const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
268
276
  const docComment = apiItemMetadata.tsdocComment;
269
277
  const releaseTag = apiItemMetadata.effectiveReleaseTag;
270
- const isExported = this._isExported(astDeclaration.astSymbol.rootAstSymbol);
271
278
  apiClass = new api_extractor_model_1.ApiClass({
272
279
  name,
273
280
  docComment,
@@ -280,9 +287,10 @@ class ApiModelGenerator {
280
287
  });
281
288
  parentApiItem.addMember(apiClass);
282
289
  }
283
- this._processChildDeclarations(astDeclaration, exportedName, apiClass);
290
+ this._processChildDeclarations(astDeclaration, Object.assign(Object.assign({}, context), { parentApiItem: apiClass }));
284
291
  }
285
- _processApiConstructSignature(astDeclaration, exportedName, parentApiItem) {
292
+ _processApiConstructSignature(astDeclaration, context) {
293
+ const { parentApiItem } = context;
286
294
  const overloadIndex = this._collector.getOverloadIndex(astDeclaration);
287
295
  const containerKey = api_extractor_model_1.ApiConstructSignature.getContainerKey(overloadIndex);
288
296
  let apiConstructSignature = parentApiItem.tryGetMemberByKey(containerKey);
@@ -309,8 +317,8 @@ class ApiModelGenerator {
309
317
  parentApiItem.addMember(apiConstructSignature);
310
318
  }
311
319
  }
312
- _processApiEnum(astDeclaration, exportedName, parentApiItem) {
313
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
320
+ _processApiEnum(astDeclaration, context) {
321
+ const { name, isExported, parentApiItem } = context;
314
322
  const containerKey = api_extractor_model_1.ApiEnum.getContainerKey(name);
315
323
  let apiEnum = parentApiItem.tryGetMemberByKey(containerKey);
316
324
  if (apiEnum === undefined) {
@@ -319,14 +327,20 @@ class ApiModelGenerator {
319
327
  const docComment = apiItemMetadata.tsdocComment;
320
328
  const releaseTag = apiItemMetadata.effectiveReleaseTag;
321
329
  const preserveMemberOrder = this._collector.extractorConfig.enumMemberOrder === api_extractor_model_1.EnumMemberOrder.Preserve;
322
- const isExported = this._isExported(astDeclaration.astSymbol.rootAstSymbol);
323
- apiEnum = new api_extractor_model_1.ApiEnum({ name, docComment, releaseTag, excerptTokens, preserveMemberOrder, isExported });
330
+ apiEnum = new api_extractor_model_1.ApiEnum({
331
+ name,
332
+ docComment,
333
+ releaseTag,
334
+ excerptTokens,
335
+ preserveMemberOrder,
336
+ isExported
337
+ });
324
338
  parentApiItem.addMember(apiEnum);
325
339
  }
326
- this._processChildDeclarations(astDeclaration, exportedName, apiEnum);
340
+ this._processChildDeclarations(astDeclaration, Object.assign(Object.assign({}, context), { parentApiItem: apiEnum }));
327
341
  }
328
- _processApiEnumMember(astDeclaration, exportedName, parentApiItem) {
329
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
342
+ _processApiEnumMember(astDeclaration, context) {
343
+ const { name, parentApiItem } = context;
330
344
  const containerKey = api_extractor_model_1.ApiEnumMember.getContainerKey(name);
331
345
  let apiEnumMember = parentApiItem.tryGetMemberByKey(containerKey);
332
346
  if (apiEnumMember === undefined) {
@@ -351,8 +365,8 @@ class ApiModelGenerator {
351
365
  parentApiItem.addMember(apiEnumMember);
352
366
  }
353
367
  }
354
- _processApiFunction(astDeclaration, exportedName, parentApiItem) {
355
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
368
+ _processApiFunction(astDeclaration, context) {
369
+ const { name, isExported, parentApiItem } = context;
356
370
  const overloadIndex = this._collector.getOverloadIndex(astDeclaration);
357
371
  const containerKey = api_extractor_model_1.ApiFunction.getContainerKey(name, overloadIndex);
358
372
  let apiFunction = parentApiItem.tryGetMemberByKey(containerKey);
@@ -367,7 +381,6 @@ class ApiModelGenerator {
367
381
  const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
368
382
  const docComment = apiItemMetadata.tsdocComment;
369
383
  const releaseTag = apiItemMetadata.effectiveReleaseTag;
370
- const isExported = this._isExported(astDeclaration.astSymbol.rootAstSymbol);
371
384
  apiFunction = new api_extractor_model_1.ApiFunction({
372
385
  name,
373
386
  docComment,
@@ -382,7 +395,8 @@ class ApiModelGenerator {
382
395
  parentApiItem.addMember(apiFunction);
383
396
  }
384
397
  }
385
- _processApiIndexSignature(astDeclaration, exportedName, parentApiItem) {
398
+ _processApiIndexSignature(astDeclaration, context) {
399
+ const { parentApiItem } = context;
386
400
  const overloadIndex = this._collector.getOverloadIndex(astDeclaration);
387
401
  const containerKey = api_extractor_model_1.ApiIndexSignature.getContainerKey(overloadIndex);
388
402
  let apiIndexSignature = parentApiItem.tryGetMemberByKey(containerKey);
@@ -409,8 +423,8 @@ class ApiModelGenerator {
409
423
  parentApiItem.addMember(apiIndexSignature);
410
424
  }
411
425
  }
412
- _processApiInterface(astDeclaration, exportedName, parentApiItem) {
413
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
426
+ _processApiInterface(astDeclaration, context) {
427
+ const { name, isExported, parentApiItem } = context;
414
428
  const containerKey = api_extractor_model_1.ApiInterface.getContainerKey(name);
415
429
  let apiInterface = parentApiItem.tryGetMemberByKey(containerKey);
416
430
  if (apiInterface === undefined) {
@@ -431,7 +445,6 @@ class ApiModelGenerator {
431
445
  const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
432
446
  const docComment = apiItemMetadata.tsdocComment;
433
447
  const releaseTag = apiItemMetadata.effectiveReleaseTag;
434
- const isExported = this._isExported(astDeclaration.astSymbol.rootAstSymbol);
435
448
  apiInterface = new api_extractor_model_1.ApiInterface({
436
449
  name,
437
450
  docComment,
@@ -443,10 +456,10 @@ class ApiModelGenerator {
443
456
  });
444
457
  parentApiItem.addMember(apiInterface);
445
458
  }
446
- this._processChildDeclarations(astDeclaration, exportedName, apiInterface);
459
+ this._processChildDeclarations(astDeclaration, Object.assign(Object.assign({}, context), { parentApiItem: apiInterface }));
447
460
  }
448
- _processApiMethod(astDeclaration, exportedName, parentApiItem) {
449
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
461
+ _processApiMethod(astDeclaration, context) {
462
+ const { name, parentApiItem } = context;
450
463
  const isStatic = (astDeclaration.modifierFlags & ts.ModifierFlags.Static) !== 0;
451
464
  const overloadIndex = this._collector.getOverloadIndex(astDeclaration);
452
465
  const containerKey = api_extractor_model_1.ApiMethod.getContainerKey(name, isStatic, overloadIndex);
@@ -483,8 +496,8 @@ class ApiModelGenerator {
483
496
  parentApiItem.addMember(apiMethod);
484
497
  }
485
498
  }
486
- _processApiMethodSignature(astDeclaration, exportedName, parentApiItem) {
487
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
499
+ _processApiMethodSignature(astDeclaration, context) {
500
+ const { name, parentApiItem } = context;
488
501
  const overloadIndex = this._collector.getOverloadIndex(astDeclaration);
489
502
  const containerKey = api_extractor_model_1.ApiMethodSignature.getContainerKey(name, overloadIndex);
490
503
  let apiMethodSignature = parentApiItem.tryGetMemberByKey(containerKey);
@@ -514,8 +527,8 @@ class ApiModelGenerator {
514
527
  parentApiItem.addMember(apiMethodSignature);
515
528
  }
516
529
  }
517
- _processApiNamespace(astDeclaration, exportedName, parentApiItem) {
518
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
530
+ _processApiNamespace(astDeclaration, context) {
531
+ const { name, isExported, parentApiItem } = context;
519
532
  const containerKey = api_extractor_model_1.ApiNamespace.getContainerKey(name);
520
533
  let apiNamespace = parentApiItem.tryGetMemberByKey(containerKey);
521
534
  if (apiNamespace === undefined) {
@@ -523,14 +536,13 @@ class ApiModelGenerator {
523
536
  const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
524
537
  const docComment = apiItemMetadata.tsdocComment;
525
538
  const releaseTag = apiItemMetadata.effectiveReleaseTag;
526
- const isExported = this._isExported(astDeclaration.astSymbol.rootAstSymbol);
527
539
  apiNamespace = new api_extractor_model_1.ApiNamespace({ name, docComment, releaseTag, excerptTokens, isExported });
528
540
  parentApiItem.addMember(apiNamespace);
529
541
  }
530
- this._processChildDeclarations(astDeclaration, exportedName, apiNamespace);
542
+ this._processChildDeclarations(astDeclaration, Object.assign(Object.assign({}, context), { parentApiItem: apiNamespace }));
531
543
  }
532
- _processApiProperty(astDeclaration, exportedName, parentApiItem) {
533
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
544
+ _processApiProperty(astDeclaration, context) {
545
+ const { name, parentApiItem } = context;
534
546
  const isStatic = (astDeclaration.modifierFlags & ts.ModifierFlags.Static) !== 0;
535
547
  const containerKey = api_extractor_model_1.ApiProperty.getContainerKey(name, isStatic);
536
548
  let apiProperty = parentApiItem.tryGetMemberByKey(containerKey);
@@ -578,8 +590,8 @@ class ApiModelGenerator {
578
590
  // we assume its signature is identical, because the language requires that.
579
591
  }
580
592
  }
581
- _processApiPropertySignature(astDeclaration, exportedName, parentApiItem) {
582
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
593
+ _processApiPropertySignature(astDeclaration, context) {
594
+ const { name, parentApiItem } = context;
583
595
  const containerKey = api_extractor_model_1.ApiPropertySignature.getContainerKey(name);
584
596
  let apiPropertySignature = parentApiItem.tryGetMemberByKey(containerKey);
585
597
  if (apiPropertySignature === undefined) {
@@ -609,8 +621,8 @@ class ApiModelGenerator {
609
621
  // we assume its signature is identical, because the language requires that.
610
622
  }
611
623
  }
612
- _processApiTypeAlias(astDeclaration, exportedName, parentApiItem) {
613
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
624
+ _processApiTypeAlias(astDeclaration, context) {
625
+ const { name, isExported, parentApiItem } = context;
614
626
  const containerKey = api_extractor_model_1.ApiTypeAlias.getContainerKey(name);
615
627
  let apiTypeAlias = parentApiItem.tryGetMemberByKey(containerKey);
616
628
  if (apiTypeAlias === undefined) {
@@ -623,7 +635,6 @@ class ApiModelGenerator {
623
635
  const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
624
636
  const docComment = apiItemMetadata.tsdocComment;
625
637
  const releaseTag = apiItemMetadata.effectiveReleaseTag;
626
- const isExported = this._isExported(astDeclaration.astSymbol.rootAstSymbol);
627
638
  apiTypeAlias = new api_extractor_model_1.ApiTypeAlias({
628
639
  name,
629
640
  docComment,
@@ -636,8 +647,8 @@ class ApiModelGenerator {
636
647
  parentApiItem.addMember(apiTypeAlias);
637
648
  }
638
649
  }
639
- _processApiVariable(astDeclaration, exportedName, parentApiItem) {
640
- const name = exportedName ? exportedName : astDeclaration.astSymbol.localName;
650
+ _processApiVariable(astDeclaration, context) {
651
+ const { name, isExported, parentApiItem } = context;
641
652
  const containerKey = api_extractor_model_1.ApiVariable.getContainerKey(name);
642
653
  let apiVariable = parentApiItem.tryGetMemberByKey(containerKey);
643
654
  if (apiVariable === undefined) {
@@ -655,7 +666,6 @@ class ApiModelGenerator {
655
666
  const docComment = apiItemMetadata.tsdocComment;
656
667
  const releaseTag = apiItemMetadata.effectiveReleaseTag;
657
668
  const isReadonly = this._isReadonly(astDeclaration);
658
- const isExported = this._isExported(astDeclaration.astSymbol.rootAstSymbol);
659
669
  apiVariable = new api_extractor_model_1.ApiVariable({
660
670
  name,
661
671
  docComment,
@@ -740,15 +750,6 @@ class ApiModelGenerator {
740
750
  }
741
751
  }
742
752
  }
743
- _isExported(astEntity) {
744
- // Collector entities are only created for root symbols.
745
- const entity = this._collector.tryGetCollectorEntity(astEntity);
746
- if (!entity) {
747
- // This should never happen.
748
- throw new node_core_library_1.InternalError(`Failed to get collector entity for AstEntity "${astEntity.localName}"`);
749
- }
750
- return entity.exported;
751
- }
752
753
  }
753
754
  exports.ApiModelGenerator = ApiModelGenerator;
754
755
  //# sourceMappingURL=ApiModelGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiModelGenerator.js","sourceRoot":"","sources":["../../src/generators/ApiModelGenerator.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\n/* eslint-disable no-bitwise */\n\nimport * as ts from 'typescript';\nimport * as tsdoc from '@microsoft/tsdoc';\nimport {\n ApiModel,\n ApiClass,\n ApiPackage,\n ApiEntryPoint,\n ApiMethod,\n ApiNamespace,\n ApiInterface,\n ApiPropertySignature,\n ApiItemContainerMixin,\n ReleaseTag,\n ApiProperty,\n ApiMethodSignature,\n IApiParameterOptions,\n ApiEnum,\n ApiEnumMember,\n IExcerptTokenRange,\n IExcerptToken,\n ApiConstructor,\n ApiConstructSignature,\n ApiFunction,\n ApiIndexSignature,\n ApiVariable,\n ApiTypeAlias,\n ApiCallSignature,\n IApiTypeParameterOptions,\n EnumMemberOrder\n} from '@microsoft/api-extractor-model';\n\nimport { Collector } from '../collector/Collector';\nimport { CollectorEntity } from '../collector/CollectorEntity';\nimport { AstDeclaration } from '../analyzer/AstDeclaration';\nimport { ExcerptBuilder, IExcerptBuilderNodeToCapture } from './ExcerptBuilder';\nimport { AstSymbol } from '../analyzer/AstSymbol';\nimport { DeclarationReferenceGenerator } from './DeclarationReferenceGenerator';\nimport { ApiItemMetadata } from '../collector/ApiItemMetadata';\nimport { DeclarationMetadata } from '../collector/DeclarationMetadata';\nimport { AstNamespaceImport } from '../analyzer/AstNamespaceImport';\nimport { AstEntity } from '../analyzer/AstEntity';\nimport { AstModule } from '../analyzer/AstModule';\nimport { TypeScriptInternals } from '../analyzer/TypeScriptInternals';\nimport { InternalError } from '@rushstack/node-core-library';\n\nexport class ApiModelGenerator {\n private readonly _collector: Collector;\n private readonly _apiModel: ApiModel;\n private readonly _referenceGenerator: DeclarationReferenceGenerator;\n\n public constructor(collector: Collector) {\n this._collector = collector;\n this._apiModel = new ApiModel();\n this._referenceGenerator = new DeclarationReferenceGenerator(collector);\n }\n\n public get apiModel(): ApiModel {\n return this._apiModel;\n }\n\n public buildApiPackage(): ApiPackage {\n const packageDocComment: tsdoc.DocComment | undefined = this._collector.workingPackage.tsdocComment;\n\n const apiPackage: ApiPackage = new ApiPackage({\n name: this._collector.workingPackage.name,\n docComment: packageDocComment,\n tsdocConfiguration: this._collector.extractorConfig.tsdocConfiguration\n });\n this._apiModel.addMember(apiPackage);\n\n const apiEntryPoint: ApiEntryPoint = new ApiEntryPoint({ name: '' });\n apiPackage.addMember(apiEntryPoint);\n\n for (const entity of this._collector.entities) {\n // Note that we don't process entities that have parents, because those entities will be recursively\n // processed by the parent.\n if (\n !entity.hasParents &&\n (entity.consumable || this._collector.extractorConfig.docModelIncludeForgottenExports)\n ) {\n this._processAstEntity(entity.astEntity, entity.nameForEmit, apiEntryPoint);\n }\n }\n\n return apiPackage;\n }\n\n private _processAstEntity(\n astEntity: AstEntity,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n if (astEntity instanceof AstSymbol) {\n // Skip ancillary declarations; we will process them with the main declaration\n for (const astDeclaration of this._collector.getNonAncillaryDeclarations(astEntity)) {\n this._processDeclaration(astDeclaration, exportedName, parentApiItem);\n }\n return;\n }\n\n if (astEntity instanceof AstNamespaceImport) {\n // Note that a single API item can belong to two different AstNamespaceImport namespaces. For example:\n //\n // // file.ts defines \"thing()\"\n // import * as example1 from \"./file\";\n // import * as example2 from \"./file\";\n //\n // // ...so here we end up with example1.thing() and example2.thing()\n // export { example1, example2 }\n //\n // The current logic does not try to associate \"thing()\" with a specific parent. Instead\n // the API documentation will show duplicated entries for example1.thing() and example2.thing().\n //\n // This could be improved in the future, but it requires a stable mechanism for choosing an associated parent.\n // For thoughts about this: https://github.com/microsoft/rushstack/issues/1308\n this._processAstNamespaceImport(astEntity, exportedName, parentApiItem);\n return;\n }\n\n // TODO: Figure out how to represent reexported AstImport objects. Basically we need to introduce a new\n // ApiItem subclass for \"export alias\", similar to a type alias, but representing declarations of the\n // form \"export { X } from 'external-package'\". We can also use this to solve GitHub issue #950.\n }\n\n private _processAstNamespaceImport(\n astNamespaceImport: AstNamespaceImport,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const astModule: AstModule = astNamespaceImport.astModule;\n const name: string = exportedName ? exportedName : astModule.moduleSymbol.name;\n const containerKey: string = ApiNamespace.getContainerKey(name);\n const isExported: boolean = this._isExported(astNamespaceImport);\n\n let apiNamespace: ApiNamespace | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiNamespace;\n\n if (apiNamespace === undefined) {\n apiNamespace = new ApiNamespace({\n name,\n docComment: undefined,\n releaseTag: ReleaseTag.None,\n excerptTokens: [],\n isExported\n });\n parentApiItem.addMember(apiNamespace);\n }\n\n astModule.astModuleExportInfo!.exportedLocalEntities.forEach(\n (exportedEntity: AstEntity, exportedName: string) => {\n this._processAstEntity(exportedEntity, exportedName, apiNamespace!);\n }\n );\n }\n\n private _processDeclaration(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n if ((astDeclaration.modifierFlags & ts.ModifierFlags.Private) !== 0) {\n return; // trim out private declarations\n }\n\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n if (releaseTag === ReleaseTag.Internal || releaseTag === ReleaseTag.Alpha) {\n return; // trim out items marked as \"@internal\" or \"@alpha\"\n }\n\n switch (astDeclaration.declaration.kind) {\n case ts.SyntaxKind.CallSignature:\n this._processApiCallSignature(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.Constructor:\n this._processApiConstructor(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.ConstructSignature:\n this._processApiConstructSignature(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.ClassDeclaration:\n this._processApiClass(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.EnumDeclaration:\n this._processApiEnum(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.EnumMember:\n this._processApiEnumMember(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.FunctionDeclaration:\n this._processApiFunction(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.GetAccessor:\n this._processApiProperty(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.SetAccessor:\n this._processApiProperty(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.IndexSignature:\n this._processApiIndexSignature(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.InterfaceDeclaration:\n this._processApiInterface(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.MethodDeclaration:\n this._processApiMethod(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.MethodSignature:\n this._processApiMethodSignature(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.ModuleDeclaration:\n this._processApiNamespace(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.PropertyDeclaration:\n this._processApiProperty(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.PropertySignature:\n this._processApiPropertySignature(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.TypeAliasDeclaration:\n this._processApiTypeAlias(astDeclaration, exportedName, parentApiItem);\n break;\n\n case ts.SyntaxKind.VariableDeclaration:\n this._processApiVariable(astDeclaration, exportedName, parentApiItem);\n break;\n\n default:\n // ignore unknown types\n }\n }\n\n private _processChildDeclarations(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n for (const childDeclaration of astDeclaration.children) {\n this._processDeclaration(childDeclaration, undefined, parentApiItem);\n }\n }\n\n private _processApiCallSignature(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiCallSignature.getContainerKey(overloadIndex);\n\n let apiCallSignature: ApiCallSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiCallSignature;\n\n if (apiCallSignature === undefined) {\n const callSignature: ts.CallSignatureDeclaration =\n astDeclaration.declaration as ts.CallSignatureDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: callSignature.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n callSignature.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n callSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiCallSignature = new ApiCallSignature({\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiCallSignature);\n }\n }\n\n private _processApiConstructor(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiConstructor.getContainerKey(overloadIndex);\n\n let apiConstructor: ApiConstructor | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiConstructor;\n\n if (apiConstructor === undefined) {\n const constructorDeclaration: ts.ConstructorDeclaration =\n astDeclaration.declaration as ts.ConstructorDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n constructorDeclaration.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isProtected: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;\n\n apiConstructor = new ApiConstructor({\n docComment,\n releaseTag,\n isProtected,\n parameters,\n overloadIndex,\n excerptTokens\n });\n\n parentApiItem.addMember(apiConstructor);\n }\n }\n\n private _processApiClass(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n const containerKey: string = ApiClass.getContainerKey(name);\n\n let apiClass: ApiClass | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiClass;\n\n if (apiClass === undefined) {\n const classDeclaration: ts.ClassDeclaration = astDeclaration.declaration as ts.ClassDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n classDeclaration.typeParameters\n );\n\n let extendsTokenRange: IExcerptTokenRange | undefined = undefined;\n const implementsTokenRanges: IExcerptTokenRange[] = [];\n\n for (const heritageClause of classDeclaration.heritageClauses || []) {\n if (heritageClause.token === ts.SyntaxKind.ExtendsKeyword) {\n extendsTokenRange = ExcerptBuilder.createEmptyTokenRange();\n if (heritageClause.types.length > 0) {\n nodesToCapture.push({ node: heritageClause.types[0], tokenRange: extendsTokenRange });\n }\n } else if (heritageClause.token === ts.SyntaxKind.ImplementsKeyword) {\n for (const heritageType of heritageClause.types) {\n const implementsTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n implementsTokenRanges.push(implementsTokenRange);\n nodesToCapture.push({ node: heritageType, tokenRange: implementsTokenRange });\n }\n }\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isExported: boolean = this._isExported(astDeclaration.astSymbol.rootAstSymbol);\n\n apiClass = new ApiClass({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRange,\n implementsTokenRanges,\n isExported\n });\n\n parentApiItem.addMember(apiClass);\n }\n\n this._processChildDeclarations(astDeclaration, exportedName, apiClass);\n }\n\n private _processApiConstructSignature(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiConstructSignature.getContainerKey(overloadIndex);\n\n let apiConstructSignature: ApiConstructSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiConstructSignature;\n\n if (apiConstructSignature === undefined) {\n const constructSignature: ts.ConstructSignatureDeclaration =\n astDeclaration.declaration as ts.ConstructSignatureDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: constructSignature.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n constructSignature.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n constructSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiConstructSignature = new ApiConstructSignature({\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiConstructSignature);\n }\n }\n\n private _processApiEnum(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n const containerKey: string = ApiEnum.getContainerKey(name);\n\n let apiEnum: ApiEnum | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiEnum;\n\n if (apiEnum === undefined) {\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, []);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const preserveMemberOrder: boolean =\n this._collector.extractorConfig.enumMemberOrder === EnumMemberOrder.Preserve;\n const isExported: boolean = this._isExported(astDeclaration.astSymbol.rootAstSymbol);\n\n apiEnum = new ApiEnum({ name, docComment, releaseTag, excerptTokens, preserveMemberOrder, isExported });\n parentApiItem.addMember(apiEnum);\n }\n\n this._processChildDeclarations(astDeclaration, exportedName, apiEnum);\n }\n\n private _processApiEnumMember(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n const containerKey: string = ApiEnumMember.getContainerKey(name);\n\n let apiEnumMember: ApiEnumMember | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiEnumMember;\n\n if (apiEnumMember === undefined) {\n const enumMember: ts.EnumMember = astDeclaration.declaration as ts.EnumMember;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n let initializerTokenRange: IExcerptTokenRange | undefined = undefined;\n if (enumMember.initializer) {\n initializerTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: enumMember.initializer, tokenRange: initializerTokenRange });\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiEnumMember = new ApiEnumMember({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n initializerTokenRange\n });\n\n parentApiItem.addMember(apiEnumMember);\n }\n }\n\n private _processApiFunction(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiFunction.getContainerKey(name, overloadIndex);\n\n let apiFunction: ApiFunction | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiFunction;\n\n if (apiFunction === undefined) {\n const functionDeclaration: ts.FunctionDeclaration =\n astDeclaration.declaration as ts.FunctionDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: functionDeclaration.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n functionDeclaration.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n functionDeclaration.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isExported: boolean = this._isExported(astDeclaration.astSymbol.rootAstSymbol);\n\n apiFunction = new ApiFunction({\n name,\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange,\n isExported\n });\n\n parentApiItem.addMember(apiFunction);\n }\n }\n\n private _processApiIndexSignature(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiIndexSignature.getContainerKey(overloadIndex);\n\n let apiIndexSignature: ApiIndexSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiIndexSignature;\n\n if (apiIndexSignature === undefined) {\n const indexSignature: ts.IndexSignatureDeclaration =\n astDeclaration.declaration as ts.IndexSignatureDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: indexSignature.type, tokenRange: returnTypeTokenRange });\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n indexSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n\n apiIndexSignature = new ApiIndexSignature({\n docComment,\n releaseTag,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange,\n isReadonly\n });\n\n parentApiItem.addMember(apiIndexSignature);\n }\n }\n\n private _processApiInterface(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n const containerKey: string = ApiInterface.getContainerKey(name);\n\n let apiInterface: ApiInterface | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiInterface;\n\n if (apiInterface === undefined) {\n const interfaceDeclaration: ts.InterfaceDeclaration =\n astDeclaration.declaration as ts.InterfaceDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n interfaceDeclaration.typeParameters\n );\n\n const extendsTokenRanges: IExcerptTokenRange[] = [];\n\n for (const heritageClause of interfaceDeclaration.heritageClauses || []) {\n if (heritageClause.token === ts.SyntaxKind.ExtendsKeyword) {\n for (const heritageType of heritageClause.types) {\n const extendsTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n extendsTokenRanges.push(extendsTokenRange);\n nodesToCapture.push({ node: heritageType, tokenRange: extendsTokenRange });\n }\n }\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isExported: boolean = this._isExported(astDeclaration.astSymbol.rootAstSymbol);\n\n apiInterface = new ApiInterface({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRanges,\n isExported\n });\n\n parentApiItem.addMember(apiInterface);\n }\n\n this._processChildDeclarations(astDeclaration, exportedName, apiInterface);\n }\n\n private _processApiMethod(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n\n const isStatic: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Static) !== 0;\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiMethod.getContainerKey(name, isStatic, overloadIndex);\n\n let apiMethod: ApiMethod | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiMethod;\n\n if (apiMethod === undefined) {\n const methodDeclaration: ts.MethodDeclaration = astDeclaration.declaration as ts.MethodDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: methodDeclaration.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n methodDeclaration.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n methodDeclaration.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n if (releaseTag === ReleaseTag.Internal || releaseTag === ReleaseTag.Alpha) {\n return; // trim out items marked as \"@internal\" or \"@alpha\"\n }\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n const isProtected: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;\n\n apiMethod = new ApiMethod({\n name,\n docComment,\n releaseTag,\n isProtected,\n isStatic,\n isOptional,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiMethod);\n }\n }\n\n private _processApiMethodSignature(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiMethodSignature.getContainerKey(name, overloadIndex);\n\n let apiMethodSignature: ApiMethodSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiMethodSignature;\n\n if (apiMethodSignature === undefined) {\n const methodSignature: ts.MethodSignature = astDeclaration.declaration as ts.MethodSignature;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: methodSignature.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n methodSignature.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n methodSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n\n apiMethodSignature = new ApiMethodSignature({\n name,\n docComment,\n releaseTag,\n isOptional,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiMethodSignature);\n }\n }\n\n private _processApiNamespace(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n const containerKey: string = ApiNamespace.getContainerKey(name);\n\n let apiNamespace: ApiNamespace | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiNamespace;\n\n if (apiNamespace === undefined) {\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, []);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isExported: boolean = this._isExported(astDeclaration.astSymbol.rootAstSymbol);\n\n apiNamespace = new ApiNamespace({ name, docComment, releaseTag, excerptTokens, isExported });\n parentApiItem.addMember(apiNamespace);\n }\n\n this._processChildDeclarations(astDeclaration, exportedName, apiNamespace);\n }\n\n private _processApiProperty(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n\n const isStatic: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Static) !== 0;\n\n const containerKey: string = ApiProperty.getContainerKey(name, isStatic);\n\n let apiProperty: ApiProperty | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiProperty;\n\n if (apiProperty === undefined) {\n const declaration: ts.Declaration = astDeclaration.declaration;\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const propertyTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n let propertyTypeNode: ts.TypeNode | undefined;\n\n if (ts.isPropertyDeclaration(declaration) || ts.isGetAccessorDeclaration(declaration)) {\n propertyTypeNode = declaration.type;\n }\n\n if (ts.isSetAccessorDeclaration(declaration)) {\n // Note that TypeScript always reports an error if a setter does not have exactly one parameter.\n propertyTypeNode = declaration.parameters[0].type;\n }\n\n nodesToCapture.push({ node: propertyTypeNode, tokenRange: propertyTypeTokenRange });\n\n let initializerTokenRange: IExcerptTokenRange | undefined = undefined;\n if (ts.isPropertyDeclaration(declaration) && declaration.initializer) {\n initializerTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: declaration.initializer, tokenRange: initializerTokenRange });\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n const isProtected: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n\n apiProperty = new ApiProperty({\n name,\n docComment,\n releaseTag,\n isProtected,\n isStatic,\n isOptional,\n isReadonly,\n excerptTokens,\n propertyTypeTokenRange,\n initializerTokenRange\n });\n parentApiItem.addMember(apiProperty);\n } else {\n // If the property was already declared before (via a merged interface declaration),\n // we assume its signature is identical, because the language requires that.\n }\n }\n\n private _processApiPropertySignature(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n const containerKey: string = ApiPropertySignature.getContainerKey(name);\n\n let apiPropertySignature: ApiPropertySignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiPropertySignature;\n\n if (apiPropertySignature === undefined) {\n const propertySignature: ts.PropertySignature = astDeclaration.declaration as ts.PropertySignature;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const propertyTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: propertySignature.type, tokenRange: propertyTypeTokenRange });\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n\n apiPropertySignature = new ApiPropertySignature({\n name,\n docComment,\n releaseTag,\n isOptional,\n excerptTokens,\n propertyTypeTokenRange,\n isReadonly\n });\n\n parentApiItem.addMember(apiPropertySignature);\n } else {\n // If the property was already declared before (via a merged interface declaration),\n // we assume its signature is identical, because the language requires that.\n }\n }\n\n private _processApiTypeAlias(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n\n const containerKey: string = ApiTypeAlias.getContainerKey(name);\n\n let apiTypeAlias: ApiTypeAlias | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiTypeAlias;\n\n if (apiTypeAlias === undefined) {\n const typeAliasDeclaration: ts.TypeAliasDeclaration =\n astDeclaration.declaration as ts.TypeAliasDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n typeAliasDeclaration.typeParameters\n );\n\n const typeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: typeAliasDeclaration.type, tokenRange: typeTokenRange });\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isExported: boolean = this._isExported(astDeclaration.astSymbol.rootAstSymbol);\n\n apiTypeAlias = new ApiTypeAlias({\n name,\n docComment,\n typeParameters,\n releaseTag,\n excerptTokens,\n typeTokenRange,\n isExported\n });\n\n parentApiItem.addMember(apiTypeAlias);\n }\n }\n\n private _processApiVariable(\n astDeclaration: AstDeclaration,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astDeclaration.astSymbol.localName;\n\n const containerKey: string = ApiVariable.getContainerKey(name);\n\n let apiVariable: ApiVariable | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiVariable;\n\n if (apiVariable === undefined) {\n const variableDeclaration: ts.VariableDeclaration =\n astDeclaration.declaration as ts.VariableDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const variableTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: variableDeclaration.type, tokenRange: variableTypeTokenRange });\n\n let initializerTokenRange: IExcerptTokenRange | undefined = undefined;\n if (variableDeclaration.initializer) {\n initializerTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: variableDeclaration.initializer, tokenRange: initializerTokenRange });\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n const isExported: boolean = this._isExported(astDeclaration.astSymbol.rootAstSymbol);\n\n apiVariable = new ApiVariable({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n variableTypeTokenRange,\n initializerTokenRange,\n isReadonly,\n isExported\n });\n\n parentApiItem.addMember(apiVariable);\n }\n }\n\n /**\n * @param nodesToCapture - A list of child nodes whose token ranges we want to capture\n */\n private _buildExcerptTokens(\n astDeclaration: AstDeclaration,\n nodesToCapture: IExcerptBuilderNodeToCapture[]\n ): IExcerptToken[] {\n const excerptTokens: IExcerptToken[] = [];\n\n // Build the main declaration\n ExcerptBuilder.addDeclaration(excerptTokens, astDeclaration, nodesToCapture, this._referenceGenerator);\n\n const declarationMetadata: DeclarationMetadata = this._collector.fetchDeclarationMetadata(astDeclaration);\n\n // Add any ancillary declarations\n for (const ancillaryDeclaration of declarationMetadata.ancillaryDeclarations) {\n ExcerptBuilder.addBlankLine(excerptTokens);\n ExcerptBuilder.addDeclaration(\n excerptTokens,\n ancillaryDeclaration,\n nodesToCapture,\n this._referenceGenerator\n );\n }\n\n return excerptTokens;\n }\n\n private _captureTypeParameters(\n nodesToCapture: IExcerptBuilderNodeToCapture[],\n typeParameterNodes: ts.NodeArray<ts.TypeParameterDeclaration> | undefined\n ): IApiTypeParameterOptions[] {\n const typeParameters: IApiTypeParameterOptions[] = [];\n if (typeParameterNodes) {\n for (const typeParameter of typeParameterNodes) {\n const constraintTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: typeParameter.constraint, tokenRange: constraintTokenRange });\n\n const defaultTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: typeParameter.default, tokenRange: defaultTypeTokenRange });\n\n typeParameters.push({\n typeParameterName: typeParameter.name.getText().trim(),\n constraintTokenRange,\n defaultTypeTokenRange\n });\n }\n }\n return typeParameters;\n }\n\n private _captureParameters(\n nodesToCapture: IExcerptBuilderNodeToCapture[],\n parameterNodes: ts.NodeArray<ts.ParameterDeclaration>\n ): IApiParameterOptions[] {\n const parameters: IApiParameterOptions[] = [];\n for (const parameter of parameterNodes) {\n const parameterTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: parameter.type, tokenRange: parameterTypeTokenRange });\n parameters.push({\n parameterName: parameter.name.getText().trim(),\n parameterTypeTokenRange,\n isOptional: this._collector.typeChecker.isOptionalParameter(parameter)\n });\n }\n return parameters;\n }\n\n private _isReadonly(astDeclaration: AstDeclaration): boolean {\n switch (astDeclaration.declaration.kind) {\n case ts.SyntaxKind.GetAccessor:\n case ts.SyntaxKind.IndexSignature:\n case ts.SyntaxKind.PropertyDeclaration:\n case ts.SyntaxKind.PropertySignature:\n case ts.SyntaxKind.SetAccessor:\n case ts.SyntaxKind.VariableDeclaration: {\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const declarationMetadata: DeclarationMetadata =\n this._collector.fetchDeclarationMetadata(astDeclaration);\n\n const hasReadonlyModifier: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Readonly) !== 0;\n const hasReadonlyDocTag: boolean = !!docComment?.modifierTagSet?.hasTagName('@readonly');\n const isGetterWithNoSetter: boolean =\n ts.isGetAccessorDeclaration(astDeclaration.declaration) &&\n declarationMetadata.ancillaryDeclarations.length === 0;\n const isVarConst: boolean =\n ts.isVariableDeclaration(astDeclaration.declaration) &&\n TypeScriptInternals.isVarConst(astDeclaration.declaration);\n\n return hasReadonlyModifier || hasReadonlyDocTag || isGetterWithNoSetter || isVarConst;\n }\n default: {\n // Readonly-ness does not make sense for any other declaration kind.\n return false;\n }\n }\n }\n\n private _isExported(astEntity: AstEntity): boolean {\n // Collector entities are only created for root symbols.\n const entity: CollectorEntity | undefined = this._collector.tryGetCollectorEntity(astEntity);\n\n if (!entity) {\n // This should never happen.\n throw new InternalError(`Failed to get collector entity for AstEntity \"${astEntity.localName}\"`);\n }\n\n return entity.exported;\n }\n}\n"]}
1
+ {"version":3,"file":"ApiModelGenerator.js","sourceRoot":"","sources":["../../src/generators/ApiModelGenerator.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\n/* eslint-disable no-bitwise */\n\nimport * as ts from 'typescript';\nimport * as tsdoc from '@microsoft/tsdoc';\nimport {\n ApiModel,\n ApiClass,\n ApiPackage,\n ApiEntryPoint,\n ApiMethod,\n ApiNamespace,\n ApiInterface,\n ApiPropertySignature,\n ApiItemContainerMixin,\n ReleaseTag,\n ApiProperty,\n ApiMethodSignature,\n IApiParameterOptions,\n ApiEnum,\n ApiEnumMember,\n IExcerptTokenRange,\n IExcerptToken,\n ApiConstructor,\n ApiConstructSignature,\n ApiFunction,\n ApiIndexSignature,\n ApiVariable,\n ApiTypeAlias,\n ApiCallSignature,\n IApiTypeParameterOptions,\n EnumMemberOrder\n} from '@microsoft/api-extractor-model';\n\nimport { Collector } from '../collector/Collector';\nimport { AstDeclaration } from '../analyzer/AstDeclaration';\nimport { ExcerptBuilder, IExcerptBuilderNodeToCapture } from './ExcerptBuilder';\nimport { AstSymbol } from '../analyzer/AstSymbol';\nimport { DeclarationReferenceGenerator } from './DeclarationReferenceGenerator';\nimport { ApiItemMetadata } from '../collector/ApiItemMetadata';\nimport { DeclarationMetadata } from '../collector/DeclarationMetadata';\nimport { AstNamespaceImport } from '../analyzer/AstNamespaceImport';\nimport { AstEntity } from '../analyzer/AstEntity';\nimport { AstModule } from '../analyzer/AstModule';\nimport { TypeScriptInternals } from '../analyzer/TypeScriptInternals';\n\ninterface IProcessAstEntityContext {\n name: string;\n isExported: boolean;\n parentApiItem: ApiItemContainerMixin;\n}\n\nexport class ApiModelGenerator {\n private readonly _collector: Collector;\n private readonly _apiModel: ApiModel;\n private readonly _referenceGenerator: DeclarationReferenceGenerator;\n\n public constructor(collector: Collector) {\n this._collector = collector;\n this._apiModel = new ApiModel();\n this._referenceGenerator = new DeclarationReferenceGenerator(collector);\n }\n\n public get apiModel(): ApiModel {\n return this._apiModel;\n }\n\n public buildApiPackage(): ApiPackage {\n const packageDocComment: tsdoc.DocComment | undefined = this._collector.workingPackage.tsdocComment;\n\n const apiPackage: ApiPackage = new ApiPackage({\n name: this._collector.workingPackage.name,\n docComment: packageDocComment,\n tsdocConfiguration: this._collector.extractorConfig.tsdocConfiguration\n });\n this._apiModel.addMember(apiPackage);\n\n const apiEntryPoint: ApiEntryPoint = new ApiEntryPoint({ name: '' });\n apiPackage.addMember(apiEntryPoint);\n\n for (const entity of this._collector.entities) {\n // Only process entities that are exported from the entry point. Entities that are exported from\n // `AstNamespaceImport` entities will be processed by `_processAstNamespaceImport`. However, if\n // we are including forgotten exports, then process everything.\n if (entity.exportedFromEntryPoint || this._collector.extractorConfig.docModelIncludeForgottenExports) {\n this._processAstEntity(entity.astEntity, {\n name: entity.nameForEmit!,\n isExported: entity.exportedFromEntryPoint,\n parentApiItem: apiEntryPoint\n });\n }\n }\n\n return apiPackage;\n }\n\n private _processAstEntity(astEntity: AstEntity, context: IProcessAstEntityContext): void {\n if (astEntity instanceof AstSymbol) {\n // Skip ancillary declarations; we will process them with the main declaration\n for (const astDeclaration of this._collector.getNonAncillaryDeclarations(astEntity)) {\n this._processDeclaration(astDeclaration, context);\n }\n return;\n }\n\n if (astEntity instanceof AstNamespaceImport) {\n // Note that a single API item can belong to two different AstNamespaceImport namespaces. For example:\n //\n // // file.ts defines \"thing()\"\n // import * as example1 from \"./file\";\n // import * as example2 from \"./file\";\n //\n // // ...so here we end up with example1.thing() and example2.thing()\n // export { example1, example2 }\n //\n // The current logic does not try to associate \"thing()\" with a specific parent. Instead\n // the API documentation will show duplicated entries for example1.thing() and example2.thing().\n //\n // This could be improved in the future, but it requires a stable mechanism for choosing an associated parent.\n // For thoughts about this: https://github.com/microsoft/rushstack/issues/1308\n this._processAstNamespaceImport(astEntity, context);\n return;\n }\n\n // TODO: Figure out how to represent reexported AstImport objects. Basically we need to introduce a new\n // ApiItem subclass for \"export alias\", similar to a type alias, but representing declarations of the\n // form \"export { X } from 'external-package'\". We can also use this to solve GitHub issue #950.\n }\n\n private _processAstNamespaceImport(\n astNamespaceImport: AstNamespaceImport,\n context: IProcessAstEntityContext\n ): void {\n const astModule: AstModule = astNamespaceImport.astModule;\n const { name, isExported, parentApiItem } = context;\n const containerKey: string = ApiNamespace.getContainerKey(name);\n\n let apiNamespace: ApiNamespace | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiNamespace;\n\n if (apiNamespace === undefined) {\n apiNamespace = new ApiNamespace({\n name,\n docComment: undefined,\n releaseTag: ReleaseTag.None,\n excerptTokens: [],\n isExported\n });\n parentApiItem.addMember(apiNamespace);\n }\n\n astModule.astModuleExportInfo!.exportedLocalEntities.forEach(\n (exportedEntity: AstEntity, exportedName: string) => {\n this._processAstEntity(exportedEntity, {\n name: exportedName,\n isExported: true,\n parentApiItem: apiNamespace!\n });\n }\n );\n }\n\n private _processDeclaration(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n if ((astDeclaration.modifierFlags & ts.ModifierFlags.Private) !== 0) {\n return; // trim out private declarations\n }\n\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n if (releaseTag === ReleaseTag.Internal || releaseTag === ReleaseTag.Alpha) {\n return; // trim out items marked as \"@internal\" or \"@alpha\"\n }\n\n switch (astDeclaration.declaration.kind) {\n case ts.SyntaxKind.CallSignature:\n this._processApiCallSignature(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.Constructor:\n this._processApiConstructor(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.ConstructSignature:\n this._processApiConstructSignature(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.ClassDeclaration:\n this._processApiClass(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.EnumDeclaration:\n this._processApiEnum(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.EnumMember:\n this._processApiEnumMember(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.FunctionDeclaration:\n this._processApiFunction(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.GetAccessor:\n this._processApiProperty(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.SetAccessor:\n this._processApiProperty(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.IndexSignature:\n this._processApiIndexSignature(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.InterfaceDeclaration:\n this._processApiInterface(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.MethodDeclaration:\n this._processApiMethod(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.MethodSignature:\n this._processApiMethodSignature(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.ModuleDeclaration:\n this._processApiNamespace(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.PropertyDeclaration:\n this._processApiProperty(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.PropertySignature:\n this._processApiPropertySignature(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.TypeAliasDeclaration:\n this._processApiTypeAlias(astDeclaration, context);\n break;\n\n case ts.SyntaxKind.VariableDeclaration:\n this._processApiVariable(astDeclaration, context);\n break;\n\n default:\n // ignore unknown types\n }\n }\n\n private _processChildDeclarations(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n for (const childDeclaration of astDeclaration.children) {\n this._processDeclaration(childDeclaration, {\n ...context,\n name: childDeclaration.astSymbol.localName\n });\n }\n }\n\n private _processApiCallSignature(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { parentApiItem } = context;\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiCallSignature.getContainerKey(overloadIndex);\n\n let apiCallSignature: ApiCallSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiCallSignature;\n\n if (apiCallSignature === undefined) {\n const callSignature: ts.CallSignatureDeclaration =\n astDeclaration.declaration as ts.CallSignatureDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: callSignature.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n callSignature.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n callSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiCallSignature = new ApiCallSignature({\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiCallSignature);\n }\n }\n\n private _processApiConstructor(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { parentApiItem } = context;\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiConstructor.getContainerKey(overloadIndex);\n\n let apiConstructor: ApiConstructor | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiConstructor;\n\n if (apiConstructor === undefined) {\n const constructorDeclaration: ts.ConstructorDeclaration =\n astDeclaration.declaration as ts.ConstructorDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n constructorDeclaration.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isProtected: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;\n\n apiConstructor = new ApiConstructor({\n docComment,\n releaseTag,\n isProtected,\n parameters,\n overloadIndex,\n excerptTokens\n });\n\n parentApiItem.addMember(apiConstructor);\n }\n }\n\n private _processApiClass(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, isExported, parentApiItem } = context;\n const containerKey: string = ApiClass.getContainerKey(name);\n\n let apiClass: ApiClass | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiClass;\n\n if (apiClass === undefined) {\n const classDeclaration: ts.ClassDeclaration = astDeclaration.declaration as ts.ClassDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n classDeclaration.typeParameters\n );\n\n let extendsTokenRange: IExcerptTokenRange | undefined = undefined;\n const implementsTokenRanges: IExcerptTokenRange[] = [];\n\n for (const heritageClause of classDeclaration.heritageClauses || []) {\n if (heritageClause.token === ts.SyntaxKind.ExtendsKeyword) {\n extendsTokenRange = ExcerptBuilder.createEmptyTokenRange();\n if (heritageClause.types.length > 0) {\n nodesToCapture.push({ node: heritageClause.types[0], tokenRange: extendsTokenRange });\n }\n } else if (heritageClause.token === ts.SyntaxKind.ImplementsKeyword) {\n for (const heritageType of heritageClause.types) {\n const implementsTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n implementsTokenRanges.push(implementsTokenRange);\n nodesToCapture.push({ node: heritageType, tokenRange: implementsTokenRange });\n }\n }\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiClass = new ApiClass({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRange,\n implementsTokenRanges,\n isExported\n });\n\n parentApiItem.addMember(apiClass);\n }\n\n this._processChildDeclarations(astDeclaration, {\n ...context,\n parentApiItem: apiClass\n });\n }\n\n private _processApiConstructSignature(\n astDeclaration: AstDeclaration,\n context: IProcessAstEntityContext\n ): void {\n const { parentApiItem } = context;\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiConstructSignature.getContainerKey(overloadIndex);\n\n let apiConstructSignature: ApiConstructSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiConstructSignature;\n\n if (apiConstructSignature === undefined) {\n const constructSignature: ts.ConstructSignatureDeclaration =\n astDeclaration.declaration as ts.ConstructSignatureDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: constructSignature.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n constructSignature.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n constructSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiConstructSignature = new ApiConstructSignature({\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiConstructSignature);\n }\n }\n\n private _processApiEnum(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, isExported, parentApiItem } = context;\n const containerKey: string = ApiEnum.getContainerKey(name);\n\n let apiEnum: ApiEnum | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiEnum;\n\n if (apiEnum === undefined) {\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, []);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const preserveMemberOrder: boolean =\n this._collector.extractorConfig.enumMemberOrder === EnumMemberOrder.Preserve;\n\n apiEnum = new ApiEnum({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n preserveMemberOrder,\n isExported\n });\n parentApiItem.addMember(apiEnum);\n }\n\n this._processChildDeclarations(astDeclaration, {\n ...context,\n parentApiItem: apiEnum\n });\n }\n\n private _processApiEnumMember(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, parentApiItem } = context;\n const containerKey: string = ApiEnumMember.getContainerKey(name);\n\n let apiEnumMember: ApiEnumMember | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiEnumMember;\n\n if (apiEnumMember === undefined) {\n const enumMember: ts.EnumMember = astDeclaration.declaration as ts.EnumMember;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n let initializerTokenRange: IExcerptTokenRange | undefined = undefined;\n if (enumMember.initializer) {\n initializerTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: enumMember.initializer, tokenRange: initializerTokenRange });\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiEnumMember = new ApiEnumMember({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n initializerTokenRange\n });\n\n parentApiItem.addMember(apiEnumMember);\n }\n }\n\n private _processApiFunction(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, isExported, parentApiItem } = context;\n\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiFunction.getContainerKey(name, overloadIndex);\n\n let apiFunction: ApiFunction | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiFunction;\n\n if (apiFunction === undefined) {\n const functionDeclaration: ts.FunctionDeclaration =\n astDeclaration.declaration as ts.FunctionDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: functionDeclaration.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n functionDeclaration.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n functionDeclaration.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiFunction = new ApiFunction({\n name,\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange,\n isExported\n });\n\n parentApiItem.addMember(apiFunction);\n }\n }\n\n private _processApiIndexSignature(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { parentApiItem } = context;\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiIndexSignature.getContainerKey(overloadIndex);\n\n let apiIndexSignature: ApiIndexSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiIndexSignature;\n\n if (apiIndexSignature === undefined) {\n const indexSignature: ts.IndexSignatureDeclaration =\n astDeclaration.declaration as ts.IndexSignatureDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: indexSignature.type, tokenRange: returnTypeTokenRange });\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n indexSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n\n apiIndexSignature = new ApiIndexSignature({\n docComment,\n releaseTag,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange,\n isReadonly\n });\n\n parentApiItem.addMember(apiIndexSignature);\n }\n }\n\n private _processApiInterface(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, isExported, parentApiItem } = context;\n const containerKey: string = ApiInterface.getContainerKey(name);\n\n let apiInterface: ApiInterface | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiInterface;\n\n if (apiInterface === undefined) {\n const interfaceDeclaration: ts.InterfaceDeclaration =\n astDeclaration.declaration as ts.InterfaceDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n interfaceDeclaration.typeParameters\n );\n\n const extendsTokenRanges: IExcerptTokenRange[] = [];\n\n for (const heritageClause of interfaceDeclaration.heritageClauses || []) {\n if (heritageClause.token === ts.SyntaxKind.ExtendsKeyword) {\n for (const heritageType of heritageClause.types) {\n const extendsTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n extendsTokenRanges.push(extendsTokenRange);\n nodesToCapture.push({ node: heritageType, tokenRange: extendsTokenRange });\n }\n }\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiInterface = new ApiInterface({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRanges,\n isExported\n });\n\n parentApiItem.addMember(apiInterface);\n }\n\n this._processChildDeclarations(astDeclaration, {\n ...context,\n parentApiItem: apiInterface\n });\n }\n\n private _processApiMethod(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, parentApiItem } = context;\n const isStatic: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Static) !== 0;\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiMethod.getContainerKey(name, isStatic, overloadIndex);\n\n let apiMethod: ApiMethod | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiMethod;\n\n if (apiMethod === undefined) {\n const methodDeclaration: ts.MethodDeclaration = astDeclaration.declaration as ts.MethodDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: methodDeclaration.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n methodDeclaration.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n methodDeclaration.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n if (releaseTag === ReleaseTag.Internal || releaseTag === ReleaseTag.Alpha) {\n return; // trim out items marked as \"@internal\" or \"@alpha\"\n }\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n const isProtected: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;\n\n apiMethod = new ApiMethod({\n name,\n docComment,\n releaseTag,\n isProtected,\n isStatic,\n isOptional,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiMethod);\n }\n }\n\n private _processApiMethodSignature(\n astDeclaration: AstDeclaration,\n context: IProcessAstEntityContext\n ): void {\n const { name, parentApiItem } = context;\n const overloadIndex: number = this._collector.getOverloadIndex(astDeclaration);\n const containerKey: string = ApiMethodSignature.getContainerKey(name, overloadIndex);\n\n let apiMethodSignature: ApiMethodSignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiMethodSignature;\n\n if (apiMethodSignature === undefined) {\n const methodSignature: ts.MethodSignature = astDeclaration.declaration as ts.MethodSignature;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const returnTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: methodSignature.type, tokenRange: returnTypeTokenRange });\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n methodSignature.typeParameters\n );\n\n const parameters: IApiParameterOptions[] = this._captureParameters(\n nodesToCapture,\n methodSignature.parameters\n );\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n\n apiMethodSignature = new ApiMethodSignature({\n name,\n docComment,\n releaseTag,\n isOptional,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\n });\n\n parentApiItem.addMember(apiMethodSignature);\n }\n }\n\n private _processApiNamespace(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, isExported, parentApiItem } = context;\n const containerKey: string = ApiNamespace.getContainerKey(name);\n\n let apiNamespace: ApiNamespace | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiNamespace;\n\n if (apiNamespace === undefined) {\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, []);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiNamespace = new ApiNamespace({ name, docComment, releaseTag, excerptTokens, isExported });\n parentApiItem.addMember(apiNamespace);\n }\n\n this._processChildDeclarations(astDeclaration, {\n ...context,\n parentApiItem: apiNamespace\n });\n }\n\n private _processApiProperty(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, parentApiItem } = context;\n const isStatic: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Static) !== 0;\n const containerKey: string = ApiProperty.getContainerKey(name, isStatic);\n\n let apiProperty: ApiProperty | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiProperty;\n\n if (apiProperty === undefined) {\n const declaration: ts.Declaration = astDeclaration.declaration;\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const propertyTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n let propertyTypeNode: ts.TypeNode | undefined;\n\n if (ts.isPropertyDeclaration(declaration) || ts.isGetAccessorDeclaration(declaration)) {\n propertyTypeNode = declaration.type;\n }\n\n if (ts.isSetAccessorDeclaration(declaration)) {\n // Note that TypeScript always reports an error if a setter does not have exactly one parameter.\n propertyTypeNode = declaration.parameters[0].type;\n }\n\n nodesToCapture.push({ node: propertyTypeNode, tokenRange: propertyTypeTokenRange });\n\n let initializerTokenRange: IExcerptTokenRange | undefined = undefined;\n if (ts.isPropertyDeclaration(declaration) && declaration.initializer) {\n initializerTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: declaration.initializer, tokenRange: initializerTokenRange });\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n const isProtected: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n\n apiProperty = new ApiProperty({\n name,\n docComment,\n releaseTag,\n isProtected,\n isStatic,\n isOptional,\n isReadonly,\n excerptTokens,\n propertyTypeTokenRange,\n initializerTokenRange\n });\n parentApiItem.addMember(apiProperty);\n } else {\n // If the property was already declared before (via a merged interface declaration),\n // we assume its signature is identical, because the language requires that.\n }\n }\n\n private _processApiPropertySignature(\n astDeclaration: AstDeclaration,\n context: IProcessAstEntityContext\n ): void {\n const { name, parentApiItem } = context;\n const containerKey: string = ApiPropertySignature.getContainerKey(name);\n\n let apiPropertySignature: ApiPropertySignature | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiPropertySignature;\n\n if (apiPropertySignature === undefined) {\n const propertySignature: ts.PropertySignature = astDeclaration.declaration as ts.PropertySignature;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const propertyTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: propertySignature.type, tokenRange: propertyTypeTokenRange });\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isOptional: boolean =\n (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n\n apiPropertySignature = new ApiPropertySignature({\n name,\n docComment,\n releaseTag,\n isOptional,\n excerptTokens,\n propertyTypeTokenRange,\n isReadonly\n });\n\n parentApiItem.addMember(apiPropertySignature);\n } else {\n // If the property was already declared before (via a merged interface declaration),\n // we assume its signature is identical, because the language requires that.\n }\n }\n\n private _processApiTypeAlias(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, isExported, parentApiItem } = context;\n\n const containerKey: string = ApiTypeAlias.getContainerKey(name);\n\n let apiTypeAlias: ApiTypeAlias | undefined = parentApiItem.tryGetMemberByKey(\n containerKey\n ) as ApiTypeAlias;\n\n if (apiTypeAlias === undefined) {\n const typeAliasDeclaration: ts.TypeAliasDeclaration =\n astDeclaration.declaration as ts.TypeAliasDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const typeParameters: IApiTypeParameterOptions[] = this._captureTypeParameters(\n nodesToCapture,\n typeAliasDeclaration.typeParameters\n );\n\n const typeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: typeAliasDeclaration.type, tokenRange: typeTokenRange });\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n apiTypeAlias = new ApiTypeAlias({\n name,\n docComment,\n typeParameters,\n releaseTag,\n excerptTokens,\n typeTokenRange,\n isExported\n });\n\n parentApiItem.addMember(apiTypeAlias);\n }\n }\n\n private _processApiVariable(astDeclaration: AstDeclaration, context: IProcessAstEntityContext): void {\n const { name, isExported, parentApiItem } = context;\n\n const containerKey: string = ApiVariable.getContainerKey(name);\n\n let apiVariable: ApiVariable | undefined = parentApiItem.tryGetMemberByKey(containerKey) as ApiVariable;\n\n if (apiVariable === undefined) {\n const variableDeclaration: ts.VariableDeclaration =\n astDeclaration.declaration as ts.VariableDeclaration;\n\n const nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const variableTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: variableDeclaration.type, tokenRange: variableTypeTokenRange });\n\n let initializerTokenRange: IExcerptTokenRange | undefined = undefined;\n if (variableDeclaration.initializer) {\n initializerTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: variableDeclaration.initializer, tokenRange: initializerTokenRange });\n }\n\n const excerptTokens: IExcerptToken[] = this._buildExcerptTokens(astDeclaration, nodesToCapture);\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const releaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n const isReadonly: boolean = this._isReadonly(astDeclaration);\n\n apiVariable = new ApiVariable({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n variableTypeTokenRange,\n initializerTokenRange,\n isReadonly,\n isExported\n });\n\n parentApiItem.addMember(apiVariable);\n }\n }\n\n /**\n * @param nodesToCapture - A list of child nodes whose token ranges we want to capture\n */\n private _buildExcerptTokens(\n astDeclaration: AstDeclaration,\n nodesToCapture: IExcerptBuilderNodeToCapture[]\n ): IExcerptToken[] {\n const excerptTokens: IExcerptToken[] = [];\n\n // Build the main declaration\n ExcerptBuilder.addDeclaration(excerptTokens, astDeclaration, nodesToCapture, this._referenceGenerator);\n\n const declarationMetadata: DeclarationMetadata = this._collector.fetchDeclarationMetadata(astDeclaration);\n\n // Add any ancillary declarations\n for (const ancillaryDeclaration of declarationMetadata.ancillaryDeclarations) {\n ExcerptBuilder.addBlankLine(excerptTokens);\n ExcerptBuilder.addDeclaration(\n excerptTokens,\n ancillaryDeclaration,\n nodesToCapture,\n this._referenceGenerator\n );\n }\n\n return excerptTokens;\n }\n\n private _captureTypeParameters(\n nodesToCapture: IExcerptBuilderNodeToCapture[],\n typeParameterNodes: ts.NodeArray<ts.TypeParameterDeclaration> | undefined\n ): IApiTypeParameterOptions[] {\n const typeParameters: IApiTypeParameterOptions[] = [];\n if (typeParameterNodes) {\n for (const typeParameter of typeParameterNodes) {\n const constraintTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: typeParameter.constraint, tokenRange: constraintTokenRange });\n\n const defaultTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: typeParameter.default, tokenRange: defaultTypeTokenRange });\n\n typeParameters.push({\n typeParameterName: typeParameter.name.getText().trim(),\n constraintTokenRange,\n defaultTypeTokenRange\n });\n }\n }\n return typeParameters;\n }\n\n private _captureParameters(\n nodesToCapture: IExcerptBuilderNodeToCapture[],\n parameterNodes: ts.NodeArray<ts.ParameterDeclaration>\n ): IApiParameterOptions[] {\n const parameters: IApiParameterOptions[] = [];\n for (const parameter of parameterNodes) {\n const parameterTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: parameter.type, tokenRange: parameterTypeTokenRange });\n parameters.push({\n parameterName: parameter.name.getText().trim(),\n parameterTypeTokenRange,\n isOptional: this._collector.typeChecker.isOptionalParameter(parameter)\n });\n }\n return parameters;\n }\n\n private _isReadonly(astDeclaration: AstDeclaration): boolean {\n switch (astDeclaration.declaration.kind) {\n case ts.SyntaxKind.GetAccessor:\n case ts.SyntaxKind.IndexSignature:\n case ts.SyntaxKind.PropertyDeclaration:\n case ts.SyntaxKind.PropertySignature:\n case ts.SyntaxKind.SetAccessor:\n case ts.SyntaxKind.VariableDeclaration: {\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const declarationMetadata: DeclarationMetadata =\n this._collector.fetchDeclarationMetadata(astDeclaration);\n\n const hasReadonlyModifier: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Readonly) !== 0;\n const hasReadonlyDocTag: boolean = !!docComment?.modifierTagSet?.hasTagName('@readonly');\n const isGetterWithNoSetter: boolean =\n ts.isGetAccessorDeclaration(astDeclaration.declaration) &&\n declarationMetadata.ancillaryDeclarations.length === 0;\n const isVarConst: boolean =\n ts.isVariableDeclaration(astDeclaration.declaration) &&\n TypeScriptInternals.isVarConst(astDeclaration.declaration);\n\n return hasReadonlyModifier || hasReadonlyDocTag || isGetterWithNoSetter || isVarConst;\n }\n default: {\n // Readonly-ness does not make sense for any other declaration kind.\n return false;\n }\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/api-extractor",
3
- "version": "7.30.0",
3
+ "version": "7.30.1",
4
4
  "description": "Analyze the exported API for a TypeScript library and generate reviews, documentation, and .d.ts rollups",
5
5
  "keywords": [
6
6
  "typescript",