@microsoft/api-extractor 7.24.1 → 7.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/analyzer/ExportAnalyzer.d.ts.map +1 -1
- package/lib/analyzer/ExportAnalyzer.js +12 -2
- package/lib/analyzer/ExportAnalyzer.js.map +1 -1
- package/lib/analyzer/TypeScriptInternals.d.ts +11 -1
- package/lib/analyzer/TypeScriptInternals.d.ts.map +1 -1
- package/lib/analyzer/TypeScriptInternals.js +19 -3
- package/lib/analyzer/TypeScriptInternals.js.map +1 -1
- package/lib/generators/ApiModelGenerator.d.ts +1 -0
- package/lib/generators/ApiModelGenerator.d.ts.map +1 -1
- package/lib/generators/ApiModelGenerator.js +36 -2
- package/lib/generators/ApiModelGenerator.js.map +1 -1
- package/lib/schemas/api-extractor-template.json +2 -2
- package/package.json +8 -8
package/dist/tsdoc-metadata.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/ExportAnalyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,GAAG,SAAS,CAAC;IAEvE,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CACrC;AAED;;;GAGG;AACH,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,qBAAqB,EAAE,EAAE,CAAC,MAAM,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsB;IAC3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAElD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA8D;IAGxG,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAgD;IAE9F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwD;IACzF,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAiD;gBAG3F,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,EACxC,cAAc,EAAE,eAAe;IAQjC;;;;;;OAMG;IACI,4BAA4B,CACjC,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,eAAe,EAAE,mBAAmB,GAAG,SAAS,EAChD,UAAU,EAAE,OAAO,GAClB,SAAS;IAoFZ;;;;;;;OAOG;IACH,OAAO,CAAC,8BAA8B;IAiDtC;;OAEG;IACI,wBAAwB,CAAC,mBAAmB,EAAE,SAAS,GAAG,mBAAmB;IAepF;;;OAGG;IACH,OAAO,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"ExportAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/ExportAnalyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,GAAG,SAAS,CAAC;IAEvE,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CACrC;AAED;;;GAGG;AACH,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,qBAAqB,EAAE,EAAE,CAAC,MAAM,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsB;IAC3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAElD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA8D;IAGxG,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAgD;IAE9F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwD;IACzF,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAiD;gBAG3F,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,EACxC,cAAc,EAAE,eAAe;IAQjC;;;;;;OAMG;IACI,4BAA4B,CACjC,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,eAAe,EAAE,mBAAmB,GAAG,SAAS,EAChD,UAAU,EAAE,OAAO,GAClB,SAAS;IAoFZ;;;;;;;OAOG;IACH,OAAO,CAAC,8BAA8B;IAiDtC;;OAEG;IACI,wBAAwB,CAAC,mBAAmB,EAAE,SAAS,GAAG,mBAAmB;IAepF;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA2C7B;;;;;OAKG;IACI,6BAA6B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO;IAIxE,OAAO,CAAC,2BAA2B;IAgDnC;;;;OAIG;IACI,wBAAwB,CAC7B,MAAM,EAAE,EAAE,CAAC,MAAM,EACjB,yBAAyB,EAAE,OAAO,GACjC,SAAS,GAAG,SAAS;IA4DjB,0CAA0C,CAC/C,IAAI,EAAE,EAAE,CAAC,cAAc,EACvB,yBAAyB,EAAE,OAAO,GACjC,SAAS,GAAG,SAAS;IA0FxB,OAAO,CAAC,0BAA0B;IA4ElC,OAAO,CAAC,0BAA0B;IAoKlC,OAAO,CAAC,MAAM,CAAC,cAAc;IAO7B,OAAO,CAAC,8BAA8B;IAatC,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACI,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;IAK/F,OAAO,CAAC,wBAAwB;IAoDhC,OAAO,CAAC,yBAAyB;IAWjC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA2DhC,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,mBAAmB;CAgB5B"}
|
|
@@ -187,7 +187,13 @@ class ExportAnalyzer {
|
|
|
187
187
|
*/
|
|
188
188
|
_isExternalModulePath(importOrExportDeclaration, moduleSpecifier) {
|
|
189
189
|
var _a;
|
|
190
|
-
const
|
|
190
|
+
const specifier = ts.isImportTypeNode(importOrExportDeclaration)
|
|
191
|
+
? importOrExportDeclaration.argument
|
|
192
|
+
: importOrExportDeclaration.moduleSpecifier;
|
|
193
|
+
const mode = specifier && ts.isStringLiteralLike(specifier)
|
|
194
|
+
? TypeScriptInternals_1.TypeScriptInternals.getModeForUsageLocation(importOrExportDeclaration.getSourceFile(), specifier)
|
|
195
|
+
: undefined;
|
|
196
|
+
const resolvedModule = TypeScriptInternals_1.TypeScriptInternals.getResolvedModule(importOrExportDeclaration.getSourceFile(), moduleSpecifier, mode);
|
|
191
197
|
if (resolvedModule === undefined) {
|
|
192
198
|
// The TS compiler API `getResolvedModule` cannot resolve ambient modules. Thus, to match API Extractor's
|
|
193
199
|
// previous behavior, simply treat all ambient modules as external. This bug is tracked by
|
|
@@ -655,7 +661,11 @@ class ExportAnalyzer {
|
|
|
655
661
|
*/
|
|
656
662
|
_fetchSpecifierAstModule(importOrExportDeclaration, exportSymbol) {
|
|
657
663
|
const moduleSpecifier = this._getModuleSpecifier(importOrExportDeclaration);
|
|
658
|
-
const
|
|
664
|
+
const mode = importOrExportDeclaration.moduleSpecifier &&
|
|
665
|
+
ts.isStringLiteralLike(importOrExportDeclaration.moduleSpecifier)
|
|
666
|
+
? TypeScriptInternals_1.TypeScriptInternals.getModeForUsageLocation(importOrExportDeclaration.getSourceFile(), importOrExportDeclaration.moduleSpecifier)
|
|
667
|
+
: undefined;
|
|
668
|
+
const resolvedModule = TypeScriptInternals_1.TypeScriptInternals.getResolvedModule(importOrExportDeclaration.getSourceFile(), moduleSpecifier, mode);
|
|
659
669
|
if (resolvedModule === undefined) {
|
|
660
670
|
// Encountered in https://github.com/microsoft/rushstack/issues/1914.
|
|
661
671
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportAnalyzer.js","sourceRoot":"","sources":["../../src/analyzer/ExportAnalyzer.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,+CAAiC;AACjC,oEAA6D;AAE7D,2DAAwD;AACxD,2CAAwC;AACxC,2CAA0E;AAC1E,2CAA6D;AAC7D,+DAA4D;AAC5D,+EAA4E;AAG5E,6DAA0D;AAC1D,mDAAgD;AAgChD;;;;;;;;;GASG;AACH,MAAa,cAAc;IAczB,YACE,OAAmB,EACnB,WAA2B,EAC3B,mBAAwC,EACxC,cAA+B;QAZhB,8BAAyB,GAA8B,IAAI,GAAG,EAAwB,CAAC;QAExG,4CAA4C;QAC3B,kCAA6B,GAAuB,IAAI,GAAG,EAAiB,CAAC;QAE7E,qBAAgB,GAA2B,IAAI,GAAG,EAAqB,CAAC;QACxE,gCAA2B,GAAuC,IAAI,GAAG,EAAE,CAAC;QAQ3F,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;QAChD,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACI,4BAA4B,CACjC,UAAyB,EACzB,eAAgD,EAChD,UAAmB;QAEnB,MAAM,YAAY,GAAc,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEjG,iEAAiE;QACjE,gFAAgF;QAChF,oDAAoD;QACpD,IAAI,SAAS,GAA0B,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,EAAE;YACd,wGAAwG;YACxG,MAAM,kBAAkB,GACtB,eAAe,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;YAE5F,SAAS,GAAG,IAAI,qBAAS,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAE5E,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAE5D,IAAI,SAAS,CAAC,UAAU,EAAE;gBACxB,6GAA6G;gBAC7G,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE;oBAC/E,IAAI,kBAAkB,KAAK,SAAS,EAAE;wBACpC,MAAM,IAAI,iCAAa,CACrB,8EAA8E,CAC/E,CAAC;qBACH;oBAED,MAAM,cAAc,GAAc,qCAAiB,CAAC,aAAa,CAC/D,cAAc,EACd,IAAI,CAAC,YAAY,CAClB,CAAC;oBAEF,0DAA0D;oBAC1D,MAAM,oBAAoB,GACxB,qCAAiB,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;oBACvD,IAAI,oBAAoB,EAAE;wBACxB,MAAM,SAAS,GAA0B,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;4BAC3E,cAAc,EAAE,cAAc;4BAC9B,UAAU,EAAE,SAAS,CAAC,UAAU;4BAChC,sBAAsB,EAAE,IAAI;4BAC5B,YAAY,EAAE,IAAI;yBACnB,CAAC,CAAC;wBAEH,IAAI,CAAC,SAAS,EAAE;4BACd,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK;gCAC5D,yDAA2B,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CACtE,CAAC;yBACH;wBAED,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;qBACtE;iBACF;aACF;iBAAM;gBACL,mEAAmE;gBAEnE,IAAI,YAAY,CAAC,OAAO,EAAE;oBACxB,8FAA8F;oBAC9F,8CAA8C;oBAC9C,MAAM,gBAAgB,GAA0B,YAAY,CAAC,OAAO,CAAC,GAAG,CACtE,EAAE,CAAC,kBAAkB,CAAC,UAAU,CACjC,CAAC;oBACF,IAAI,gBAAgB,EAAE;wBACpB,KAAK,MAAM,qBAAqB,IAAI,gBAAgB,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE;4BAC5E,IAAI,EAAE,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EAAE;gCACjD,MAAM,kBAAkB,GAA0B,IAAI,CAAC,wBAAwB,CAC7E,qBAAqB,EACrB,gBAAgB,CACjB,CAAC;gCAEF,IAAI,kBAAkB,KAAK,SAAS,EAAE;oCACpC,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;iCACvD;6BACF;iCAAM;gCACL,uEAAuE;gCACvE,oCAAoC;6BACrC;yBACF;qBACF;iBACF;aACF;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;OAOG;IACK,8BAA8B,CACpC,UAAyB,EACzB,eAAgD;QAEhD,MAAM,YAAY,GAA0B,yCAAmB,CAAC,0BAA0B,CACxF,UAAU,EACV,IAAI,CAAC,YAAY,CAClB,CAAC;QACF,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,8EAA8E;YAC9E,OAAO,YAAY,CAAC;SACrB;QAED,IAAI,eAAe,KAAK,SAAS,EAAE;YACjC,wGAAwG;YACxG,mDAAmD;YAEnD,sCAAsC;YACtC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC9E,6FAA6F;gBAC7F,IAAI,cAAc,GAA0B,yCAAmB,CAAC,yBAAyB,CACvF,eAAe,CAAC,qBAAqB,EACrC,IAAI,CAAC,YAAY,CAClB,CAAC;gBAEF,IAAI,cAAc,KAAK,SAAS,EAAE;oBAChC,wGAAwG;oBACxG,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;iBAC5F;gBAED,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,eAAe,CAAC,qBAAqB,EAAE;oBAC5F,iFAAiF;oBACjF,MAAM,MAAM,GAA0B,yCAAmB,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;oBAC1F,IAAI,MAAM,KAAK,SAAS,EAAE;wBACxB,2CAA2C;wBAC3C,sCAAsC;wBACtC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;4BACrD,4EAA4E;4BAC5E,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;4BACnD,OAAO,MAAM,CAAC;yBACf;qBACF;iBACF;aACF;SACF;QAED,MAAM,IAAI,iCAAa,CAAC,kCAAkC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACI,wBAAwB,CAAC,mBAA8B;QAC5D,IAAI,mBAAmB,CAAC,UAAU,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;SACrF;QAED,IAAI,mBAAmB,CAAC,mBAAmB,KAAK,SAAS,EAAE;YACzD,MAAM,mBAAmB,GAAwB,IAAI,+BAAmB,EAAE,CAAC;YAE3E,IAAI,CAAC,2BAA2B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,IAAI,GAAG,EAAa,CAAC,CAAC;YAEjG,mBAAmB,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;SAC/D;QACD,OAAO,mBAAmB,CAAC,mBAAmB,CAAC;IACjD,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAC3B,yBAA0F,EAC1F,eAAuB;;QAEvB,MAAM,cAAc,GAAsC,yCAAmB,CAAC,iBAAiB,CAC7F,yBAAyB,CAAC,aAAa,EAAE,EACzC,eAAe,CAChB,CAAC;QAEF,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,yGAAyG;YACzG,0FAA0F;YAC1F,sDAAsD;YACtD,OAAO,IAAI,CAAC;SACb;QAED,gEAAgE;QAChE,MAAM,WAAW,GAAuB,MAAA,cAAc,CAAC,SAAS,0CAAE,IAAI,CAAC;QACvE,IAAI,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YAC3E,OAAO,KAAK,CAAC;SACd;QAED,IAAI,cAAc,CAAC,uBAAuB,KAAK,SAAS,EAAE;YACxD,wGAAwG;YACxG,4BAA4B;YAC5B,MAAM,IAAI,iCAAa,CACrB,uCAAuC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,gBAAgB;gBACpF,yDAA2B,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAC3E,CAAC;SACH;QAED,OAAO,cAAc,CAAC,uBAAuB,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACI,6BAA6B,CAAC,UAAyB;QAC5D,OAAO,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAEO,2BAA2B,CACjC,mBAAwC,EACxC,SAAoB,EACpB,iBAAiC;QAEjC,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YACpC,OAAO;SACR;QACD,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEjC,IAAI,SAAS,CAAC,UAAU,EAAE;YACxB,mBAAmB,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAChE;aAAM;YACL,qDAAqD;YACrD,IAAI,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE;gBAClC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE;oBAClE,QAAQ,UAAU,EAAE;wBAClB,KAAK,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC;wBACtC,KAAK,EAAE,CAAC,kBAAkB,CAAC,YAAY;4BACrC,MAAM;wBACR;4BACE,kFAAkF;4BAClF,IAAI,UAAU,KAAK,EAAE,CAAC,kBAAkB,CAAC,OAAO,IAAI,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE;gCAChF,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;oCACrE,MAAM,SAAS,GAAc,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oCAEtF,IAAI,SAAS,YAAY,qBAAS,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;wCAC3D,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;qCACzC;oCAED,IAAI,SAAS,YAAY,uCAAkB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE;wCAC9E,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;qCACzC;oCAED,mBAAmB,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;iCAC7E;6BACF;4BACD,MAAM;qBACT;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,KAAK,MAAM,kBAAkB,IAAI,SAAS,CAAC,mBAAmB,EAAE;gBAC9D,IAAI,CAAC,2BAA2B,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;aAC9F;SACF;IACH,CAAC;IAED;;;;OAIG;IACI,wBAAwB,CAC7B,MAAiB,EACjB,yBAAkC;QAElC,sCAAsC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YAChE,uFAAuF;YACvF,WAAW;YACX,EAAE;YACF,oCAAoC;YACpC,iBAAiB;YACjB,IAAI;YACJ,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,OAAO,GAAc,MAAM,CAAC;QAEhC,IAAI,yBAAyB,EAAE;YAC7B,OAAO,GAAG,qCAAiB,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SACtE;aAAM;YACL,SAAS;gBACP,uFAAuF;gBACvF,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE;oBACpD,IAAI,gBAAuC,CAAC;oBAC5C,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACzE,IAAI,gBAAgB,KAAK,SAAS,EAAE;wBAClC,OAAO,gBAAgB,CAAC;qBACzB;oBACD,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACzE,IAAI,gBAAgB,KAAK,SAAS,EAAE;wBAClC,OAAO,gBAAgB,CAAC;qBACzB;iBACF;gBAED,sCAAsC;gBACtC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;oBAC3C,MAAM;iBACP;gBAED,MAAM,YAAY,GAAc,yCAAmB,CAAC,yBAAyB,CAC3E,OAAO,EACP,IAAI,CAAC,YAAY,CAClB,CAAC;gBACF,wCAAwC;gBACxC,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,OAAO,EAAE;oBAC7C,MAAM;iBACP;gBAED,OAAO,GAAG,YAAY,CAAC;aACxB;SACF;QAED,+CAA+C;QAC/C,MAAM,SAAS,GAA0B,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;YAC3E,cAAc,EAAE,OAAO;YACvB,UAAU,EAAE,yBAAyB;YACrC,sBAAsB,EAAE,KAAK;YAC7B,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,0CAA0C,CAC/C,IAAuB,EACvB,yBAAkC;QAElC,MAAM,kBAAkB,GAAuB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAEpF,IAAI,kBAAkB,EAAE;YACtB,IAAI,UAAkB,CAAC;YACvB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,iBAAiB;gBACjB,8DAA8D;gBAC9D,EAAE;gBACF,uBAAuB;gBACvB,oBAAoB;gBACpB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;aAC9C;iBAAM;gBACL,iBAAiB;gBACjB,sCAAsC;gBACtC,EAAE;gBACF,uBAAuB;gBACvB,yBAAyB;gBAEzB,UAAU,GAAG,6BAAa,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;aACxE;YAED,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;gBACrC,UAAU,EAAE,yBAAa,CAAC,UAAU;gBACpC,UAAU,EAAE,UAAU;gBACtB,UAAU,EAAE,kBAAkB;gBAC9B,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;SACJ;QAED,gCAAgC;QAChC,MAAM,cAAc,GAAsC,IAAI,CAAC,SAAS;YACtE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;gBACnD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;gBACtB,CAAC,CAAC,IAAI,CAAC,SAAS;YAClB,CAAC,CAAC,IAAI,CAAC;QAET,uFAAuF;QACvF,MAAM,YAAY,GAA0B,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAClG,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,iCAAa,CACrB,oCAAoC,IAAI,CAAC,OAAO,EAAE,IAAI;gBACpD,yDAA2B,CAAC,iBAAiB,CAAC,IAAI,CAAC,CACtD,CAAC;SACH;QAED,IAAI,cAAc,GAAc,YAAY,CAAC;QAC7C,SAAS;YACP,MAAM,mBAAmB,GAA0B,IAAI,CAAC,wBAAwB,CAC9E,cAAc,EACd,yBAAyB,CAC1B,CAAC;YAEF,IAAI,mBAAmB,EAAE;gBACvB,OAAO,mBAAmB,CAAC;aAC5B;YAED,MAAM,kBAAkB,GACtB,cAAc,CAAC,YAAY,IAAK,cAAc,CAAC,YAAY,CAAC,CAAC,CAAyB,CAAC;YAEzF,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE;gBAC9E,OAAO,IAAI,CAAC,0CAA0C,CACpD,kBAAuC,EACvC,yBAAyB,CAC1B,CAAC;aACH;YAED,sCAAsC;YACtC,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;gBAClD,MAAM;aACP;YAED,MAAM,YAAY,GAAc,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,cAAc,EAAE;gBACpD,MAAM;aACP;YAED,cAAc,GAAG,YAAY,CAAC;SAC/B;QAED,MAAM,SAAS,GAA0B,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;YAC3E,cAAc,EAAE,cAAc;YAC9B,UAAU,EAAE,yBAAyB;YACrC,sBAAsB,EAAE,KAAK;YAC7B,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,0BAA0B,CAChC,WAA2B,EAC3B,iBAA4B;QAE5B,MAAM,iBAAiB,GACrB,qCAAiB,CAAC,eAAe,CAAuB,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAExG,IAAI,iBAAiB,EAAE;YACrB,IAAI,UAAU,GAAuB,SAAS,CAAC;YAE/C,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE;gBACtD,WAAW;gBACX,kCAAkC;gBAClC,EAAE;gBACF,qBAAqB;gBACrB,yCAAyC;gBACzC,kBAAkB;gBAClB,yCAAyC;gBACzC,kBAAkB;gBAClB,qDAAqD;gBACrD,uCAAuC;gBACvC,wCAAwC;gBACxC,qCAAqC;gBACrC,qCAAqC;gBACrC,6BAA6B;gBAE7B,wCAAwC;gBACxC,MAAM,eAAe,GAAuB,WAAiC,CAAC;gBAC9E,UAAU,GAAG,CAAC,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;aACtF;iBAAM,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE;gBAC7D,WAAW;gBACX,uCAAuC;gBACvC,EAAE;gBACF,qBAAqB;gBACrB,yCAAyC;gBACzC,qBAAqB;gBACrB,sCAAsC;gBACtC,mCAAmC;gBACnC,wCAAwC;gBACxC,qCAAqC;gBACrC,oCAAoC;gBACpC,6BAA6B;gBAE7B,kFAAkF;gBAClF,MAAM,IAAI,KAAK,CACb,qEAAqE;oBACnE,uEAAuE;oBACvE,yDAA2B,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAC7D,CAAC;aACH;iBAAM;gBACL,MAAM,IAAI,iCAAa,CACrB,0CAA0C,WAAW,CAAC,OAAO,EAAE,IAAI;oBACjE,yDAA2B,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAC7D,CAAC;aACH;YAED,mDAAmD;YACnD,IAAI,iBAAiB,CAAC,eAAe,EAAE;gBACrC,MAAM,kBAAkB,GAAuB,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;gBAEjG,IAAI,kBAAkB,KAAK,SAAS,EAAE;oBACpC,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;wBAC7C,UAAU,EAAE,yBAAa,CAAC,WAAW;wBACrC,UAAU,EAAE,kBAAkB;wBAC9B,UAAU,EAAE,UAAU;wBACtB,UAAU,EAAE,KAAK;qBAClB,CAAC,CAAC;iBACJ;gBAED,OAAO,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;aAC9F;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,0BAA0B,CAChC,WAA2B,EAC3B,iBAA4B;QAE5B,MAAM,iBAAiB,GACrB,qCAAiB,CAAC,eAAe,CAAuB,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAExG,IAAI,iBAAiB,EAAE;YACrB,MAAM,kBAAkB,GAAuB,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;YAEjG,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE;gBACtD,WAAW;gBACX,uCAAuC;gBACvC,EAAE;gBACF,qBAAqB;gBACrB,yCAAyC;gBACzC,kBAAkB;gBAClB,mDAAmD;gBACnD,wCAAwC;gBACxC,qCAAqC;gBACrC,0CAA0C;gBAC1C,qCAAqC;gBACrC,oCAAoC;gBACpC,6BAA6B;gBAE7B,IAAI,kBAAkB,KAAK,SAAS,EAAE;oBACpC,MAAM,SAAS,GAAc,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;oBACjG,IAAI,eAAe,GACjB,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClD,IAAI,eAAe,KAAK,SAAS,EAAE;wBACjC,eAAe,GAAG,IAAI,uCAAkB,CAAC;4BACvC,aAAa,EAAE,iBAAiB,CAAC,IAAI;4BACrC,SAAS,EAAE,SAAS;4BACpB,WAAW,EAAE,WAAW;yBACzB,CAAC,CAAC;wBACH,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;qBAClE;oBACD,OAAO,eAAe,CAAC;iBACxB;gBAED,iGAAiG;gBACjG,4BAA4B;gBAC5B,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;oBACrC,UAAU,EAAE,yBAAa,CAAC,UAAU;oBACpC,UAAU,EAAE,iBAAiB,CAAC,IAAI;oBAClC,UAAU,EAAE,kBAAkB;oBAC9B,UAAU,EAAE,cAAc,CAAC,cAAc,CAAC,iBAAiB,CAAC;iBAC7D,CAAC,CAAC;aACJ;YAED,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE;gBACtD,WAAW;gBACX,oCAAoC;gBACpC,EAAE;gBACF,qBAAqB;gBACrB,yCAAyC;gBACzC,kBAAkB;gBAClB,oBAAoB;gBACpB,2CAA2C;gBAC3C,oBAAoB;gBACpB,uDAAuD;gBACvD,iCAAiC;gBACjC,uCAAuC;gBACvC,2BAA2B;gBAC3B,yCAAyC;gBACzC,0CAA0C;gBAC1C,qCAAqC;gBACrC,oCAAoC;gBACpC,6BAA6B;gBAE7B,wCAAwC;gBACxC,MAAM,eAAe,GAAuB,WAAiC,CAAC;gBAC9E,MAAM,UAAU,GAAW,CAAC,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;gBAEnG,IAAI,kBAAkB,KAAK,SAAS,EAAE;oBACpC,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;wBAC7C,UAAU,EAAE,yBAAa,CAAC,WAAW;wBACrC,UAAU,EAAE,kBAAkB;wBAC9B,UAAU,EAAE,UAAU;wBACtB,UAAU,EAAE,cAAc,CAAC,cAAc,CAAC,iBAAiB,CAAC;qBAC7D,CAAC,CAAC;iBACJ;gBAED,OAAO,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;aAC9F;iBAAM,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE;gBAC1D,WAAW;gBACX,gCAAgC;gBAChC,EAAE;gBACF,qBAAqB;gBACrB,yCAAyC;gBACzC,+DAA+D;gBAC/D,2BAA2B;gBAC3B,mCAAmC;gBACnC,oBAAoB;gBACpB,2CAA2C;gBAC3C,oBAAoB;gBACpB,2BAA2B;gBAC3B,yCAAyC;gBACzC,0CAA0C;gBAC1C,qCAAqC;gBACrC,gCAAgC;gBAChC,6BAA6B;gBAE7B,MAAM,YAAY,GAAoB,WAA8B,CAAC;gBACrE,MAAM,UAAU,GAAW,YAAY,CAAC,IAAI;oBAC1C,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;oBACpC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAElC,IAAI,kBAAkB,KAAK,SAAS,EAAE;oBACpC,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;wBAC7C,UAAU,EAAE,yBAAa,CAAC,aAAa;wBACvC,UAAU,EAAE,kBAAkB;wBAC9B,UAAU;wBACV,UAAU,EAAE,cAAc,CAAC,cAAc,CAAC,iBAAiB,CAAC;qBAC7D,CAAC,CAAC;iBACJ;gBAED,OAAO,IAAI,CAAC,8BAA8B,CACxC,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAC7B,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;aACH;iBAAM;gBACL,MAAM,IAAI,iCAAa,CACrB,0CAA0C,WAAW,CAAC,OAAO,EAAE,IAAI;oBACjE,yDAA2B,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAC7D,CAAC;aACH;SACF;QAED,IAAI,EAAE,CAAC,yBAAyB,CAAC,WAAW,CAAC,EAAE;YAC7C,WAAW;YACX,oCAAoC;YACpC,EAAE;YACF,2BAA2B;YAC3B,yCAAyC;YACzC,qCAAqC;YACrC,sCAAsC;YACtC,6BAA6B;YAC7B,qCAAqC;YACrC,+BAA+B;YAC/B,qCAAqC;YACrC,gCAAgC;YAChC,6BAA6B;YAC7B,IAAI,EAAE,CAAC,yBAAyB,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE;gBAC7D,IAAI,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE;oBAClE,MAAM,YAAY,GAAW,yCAAmB,CAAC,4BAA4B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAChG,MAAM,kBAAkB,GAAW,yCAAmB,CAAC,4BAA4B,CACjF,WAAW,CAAC,eAAe,CAAC,UAAU,CACvC,CAAC;oBAEF,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;wBAC7C,UAAU,EAAE,yBAAa,CAAC,YAAY;wBACtC,UAAU,EAAE,kBAAkB;wBAC9B,UAAU,EAAE,YAAY;wBACxB,UAAU,EAAE,KAAK;qBAClB,CAAC,CAAC;iBACJ;aACF;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,iBAAuC;QACnE,IAAI,iBAAiB,CAAC,YAAY,EAAE;YAClC,OAAO,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC;SACpD;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,8BAA8B,CACpC,UAAkB,EAClB,yBAAsE,EACtE,YAAuB;QAEvB,MAAM,kBAAkB,GAAc,IAAI,CAAC,wBAAwB,CACjE,yBAAyB,EACzB,YAAY,CACb,CAAC;QACF,MAAM,SAAS,GAAc,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QACxF,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,UAAkB,EAAE,SAAoB;QACpE,MAAM,iBAAiB,GAAmB,IAAI,GAAG,EAAa,CAAC;QAC/D,MAAM,SAAS,GAA0B,IAAI,CAAC,wBAAwB,CACpE,UAAU,EACV,SAAS,EACT,iBAAiB,CAClB,CAAC;QACF,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAM,IAAI,iCAAa,CACrB,gCAAgC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAClG,CAAC;SACH;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,uBAAuB,CAAC,UAAkB,EAAE,SAAoB;QACrE,MAAM,iBAAiB,GAAmB,IAAI,GAAG,EAAa,CAAC;QAC/D,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACjF,CAAC;IAEO,wBAAwB,CAC9B,UAAkB,EAClB,SAAoB,EACpB,iBAAiC;QAEjC,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YACpC,OAAO,SAAS,CAAC;SAClB;QACD,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEjC,IAAI,SAAS,GAA0B,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxF,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,OAAO,SAAS,CAAC;SAClB;QAED,2BAA2B;QAC3B,MAAM,iBAAiB,GAAgB,EAAE,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAI,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE;YAClC,MAAM,YAAY,GAA0B,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAClG,IAAI,YAAY,EAAE;gBAChB,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;gBAE9E,IAAI,SAAS,KAAK,SAAS,EAAE;oBAC3B,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,sBAAsB;oBACnF,OAAO,SAAS,CAAC;iBAClB;aACF;SACF;QAED,+BAA+B;QAC/B,KAAK,MAAM,kBAAkB,IAAI,SAAS,CAAC,mBAAmB,EAAE;YAC9D,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;YAE7F,IAAI,SAAS,KAAK,SAAS,EAAE;gBAC3B,IAAI,kBAAkB,CAAC,kBAAkB,KAAK,SAAS,EAAE;oBACvD,mFAAmF;oBACnF,MAAM,SAAS,GAAc,SAAsB,CAAC;oBACpD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,cAAc,EAAE;wBACpD,UAAU,EAAE,yBAAa,CAAC,WAAW;wBACrC,UAAU,EAAE,kBAAkB,CAAC,kBAAkB;wBACjD,UAAU,EAAE,UAAU;wBACtB,UAAU,EAAE,KAAK;qBAClB,CAAC,CAAC;iBACJ;gBAED,OAAO,SAAS,CAAC;aAClB;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,yBAAyB,CAC/B,yBAA0F;QAE1F,MAAM,eAAe,GAAW,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,eAAe,CAAC,EAAE;YAC1E,OAAO,eAAe,CAAC;SACxB;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACK,wBAAwB,CAC9B,yBAAsE,EACtE,YAAuB;QAEvB,MAAM,eAAe,GAAW,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;QACpF,MAAM,cAAc,GAAsC,yCAAmB,CAAC,iBAAiB,CAC7F,yBAAyB,CAAC,aAAa,EAAE,EACzC,eAAe,CAChB,CAAC;QAEF,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,qEAAqE;YACrE,EAAE;YACF,sGAAsG;YACtG,wGAAwG;YACxG,4DAA4D;YAC5D,MAAM,IAAI,iCAAa,CACrB,qDAAqD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI;gBACtF,yDAA2B,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAC3E,CAAC;SACH;QAED,oGAAoG;QACpG,wFAAwF;QACxF,MAAM,gBAAgB,GAA8B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAC7E,cAAc,CAAC,gBAAgB,CAChC,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE;YACrB,kGAAkG;YAClG,oDAAoD;YACpD,MAAM,IAAI,iCAAa,CACrB,oCAAoC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI;gBACrF,yDAA2B,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAC3E,CAAC;SACH;QAED,MAAM,UAAU,GAAY,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;QACnG,MAAM,eAAe,GAAwB;YAC3C,eAAe,EAAE,eAAe;YAChC,qBAAqB,EAAE,YAAY;SACpC,CAAC;QACF,MAAM,kBAAkB,GAAc,IAAI,CAAC,4BAA4B,CACrE,gBAAgB,EAChB,eAAe,EACf,UAAU,CACX,CAAC;QAEF,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAEO,eAAe,CAAC,YAAmC,EAAE,OAA0B;QACrF,MAAM,GAAG,GAAW,qBAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,SAAS,GAA0B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtE,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,GAAG,IAAI,qBAAS,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAE1C,IAAI,YAAY,EAAE;gBAChB,MAAM,cAAc,GAAc,qCAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEnG,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;oBACxD,cAAc,EAAE,cAAc;oBAC9B,UAAU,EAAE,IAAI;oBAChB,sBAAsB,EAAE,KAAK;oBAC7B,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;aACJ;SACF;aAAM;YACL,4EAA4E;YAC5E,oDAAoD;YACpD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;gBACvB,SAAS,CAAC,oBAAoB,GAAG,KAAK,CAAC;aACxC;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,mBAAmB,CACzB,yBAA0F;QAE1F,uGAAuG;QACvG,MAAM,eAAe,GACnB,qCAAiB,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;QAElE,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,iCAAa,CACrB,oCAAoC;gBAClC,yDAA2B,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAC3E,CAAC;SACH;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAn4BD,wCAm4BC","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';\nimport { InternalError } from '@rushstack/node-core-library';\n\nimport { TypeScriptHelpers } from './TypeScriptHelpers';\nimport { AstSymbol } from './AstSymbol';\nimport { AstImport, IAstImportOptions, AstImportKind } from './AstImport';\nimport { AstModule, AstModuleExportInfo } from './AstModule';\nimport { TypeScriptInternals } from './TypeScriptInternals';\nimport { SourceFileLocationFormatter } from './SourceFileLocationFormatter';\nimport { IFetchAstSymbolOptions } from './AstSymbolTable';\nimport { AstEntity } from './AstEntity';\nimport { AstNamespaceImport } from './AstNamespaceImport';\nimport { SyntaxHelpers } from './SyntaxHelpers';\n\n/**\n * Exposes the minimal APIs from AstSymbolTable that are needed by ExportAnalyzer.\n *\n * In particular, we want ExportAnalyzer to be able to call AstSymbolTable._fetchAstSymbol() even though it\n * is a very private API that should not be exposed to any other components.\n */\nexport interface IAstSymbolTable {\n fetchAstSymbol(options: IFetchAstSymbolOptions): AstSymbol | undefined;\n\n analyze(astEntity: AstEntity): void;\n}\n\n/**\n * Used with ExportAnalyzer.fetchAstModuleBySourceFile() to provide contextual information about how the source file\n * was imported.\n */\ninterface IAstModuleReference {\n /**\n * For example, if we are following a statement like `import { X } from 'some-package'`, this will be the\n * string `\"some-package\"`.\n */\n moduleSpecifier: string;\n\n /**\n * For example, if we are following a statement like `import { X } from 'some-package'`, this will be the\n * symbol for `X`.\n */\n moduleSpecifierSymbol: ts.Symbol;\n}\n\n/**\n * The ExportAnalyzer is an internal part of AstSymbolTable that has been moved out into its own source file\n * because it is a complex and mostly self-contained algorithm.\n *\n * Its job is to build up AstModule objects by crawling import statements to discover where declarations come from.\n * This is conceptually the same as the compiler's own TypeChecker.getExportsOfModule(), except that when\n * ExportAnalyzer encounters a declaration that was imported from an external package, it remembers how it was imported\n * (i.e. the AstImport object). Today the compiler API does not expose this information, which is crucial for\n * generating .d.ts rollups.\n */\nexport class ExportAnalyzer {\n private readonly _program: ts.Program;\n private readonly _typeChecker: ts.TypeChecker;\n private readonly _bundledPackageNames: ReadonlySet<string>;\n private readonly _astSymbolTable: IAstSymbolTable;\n\n private readonly _astModulesByModuleSymbol: Map<ts.Symbol, AstModule> = new Map<ts.Symbol, AstModule>();\n\n // Used with isImportableAmbientSourceFile()\n private readonly _importableAmbientSourceFiles: Set<ts.SourceFile> = new Set<ts.SourceFile>();\n\n private readonly _astImportsByKey: Map<string, AstImport> = new Map<string, AstImport>();\n private readonly _astNamespaceImportByModule: Map<AstModule, AstNamespaceImport> = new Map();\n\n public constructor(\n program: ts.Program,\n typeChecker: ts.TypeChecker,\n bundledPackageNames: ReadonlySet<string>,\n astSymbolTable: IAstSymbolTable\n ) {\n this._program = program;\n this._typeChecker = typeChecker;\n this._bundledPackageNames = bundledPackageNames;\n this._astSymbolTable = astSymbolTable;\n }\n\n /**\n * For a given source file, this analyzes all of its exports and produces an AstModule object.\n *\n * @param moduleReference - contextual information about the import statement that took us to this source file.\n * or `undefined` if this source file is the initial entry point\n * @param isExternal - whether the given `moduleReference` is external.\n */\n public fetchAstModuleFromSourceFile(\n sourceFile: ts.SourceFile,\n moduleReference: IAstModuleReference | undefined,\n isExternal: boolean\n ): AstModule {\n const moduleSymbol: ts.Symbol = this._getModuleSymbolFromSourceFile(sourceFile, moduleReference);\n\n // Don't traverse into a module that we already processed before:\n // The compiler allows m1 to have \"export * from 'm2'\" and \"export * from 'm3'\",\n // even if m2 and m3 both have \"export * from 'm4'\".\n let astModule: AstModule | undefined = this._astModulesByModuleSymbol.get(moduleSymbol);\n if (!astModule) {\n // (If moduleReference === undefined, then this is the entry point of the local project being analyzed.)\n const externalModulePath: string | undefined =\n moduleReference !== undefined && isExternal ? moduleReference.moduleSpecifier : undefined;\n\n astModule = new AstModule({ sourceFile, moduleSymbol, externalModulePath });\n\n this._astModulesByModuleSymbol.set(moduleSymbol, astModule);\n\n if (astModule.isExternal) {\n // It's an external package, so do the special simplified analysis that doesn't crawl into referenced modules\n for (const exportedSymbol of this._typeChecker.getExportsOfModule(moduleSymbol)) {\n if (externalModulePath === undefined) {\n throw new InternalError(\n 'Failed assertion: externalModulePath=undefined but astModule.isExternal=true'\n );\n }\n\n const followedSymbol: ts.Symbol = TypeScriptHelpers.followAliases(\n exportedSymbol,\n this._typeChecker\n );\n\n // Ignore virtual symbols that don't have any declarations\n const arbitraryDeclaration: ts.Declaration | undefined =\n TypeScriptHelpers.tryGetADeclaration(followedSymbol);\n if (arbitraryDeclaration) {\n const astSymbol: AstSymbol | undefined = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: followedSymbol,\n isExternal: astModule.isExternal,\n includeNominalAnalysis: true,\n addIfMissing: true\n });\n\n if (!astSymbol) {\n throw new Error(\n `Unsupported export ${JSON.stringify(exportedSymbol.name)}:\\n` +\n SourceFileLocationFormatter.formatDeclaration(arbitraryDeclaration)\n );\n }\n\n astModule.cachedExportedEntities.set(exportedSymbol.name, astSymbol);\n }\n }\n } else {\n // The module is part of the local project, so do the full analysis\n\n if (moduleSymbol.exports) {\n // The \"export * from 'module-name';\" declarations are all attached to a single virtual symbol\n // whose name is InternalSymbolName.ExportStar\n const exportStarSymbol: ts.Symbol | undefined = moduleSymbol.exports.get(\n ts.InternalSymbolName.ExportStar\n );\n if (exportStarSymbol) {\n for (const exportStarDeclaration of exportStarSymbol.getDeclarations() || []) {\n if (ts.isExportDeclaration(exportStarDeclaration)) {\n const starExportedModule: AstModule | undefined = this._fetchSpecifierAstModule(\n exportStarDeclaration,\n exportStarSymbol\n );\n\n if (starExportedModule !== undefined) {\n astModule.starExportedModules.add(starExportedModule);\n }\n } else {\n // Ignore ExportDeclaration nodes that don't match the expected pattern\n // TODO: Should we report a warning?\n }\n }\n }\n }\n }\n }\n\n return astModule;\n }\n\n /**\n * Retrieves the symbol for the module corresponding to the ts.SourceFile that is being imported/exported.\n *\n * @remarks\n * The `module` keyword can be used to declare multiple TypeScript modules inside a single source file.\n * (This is a deprecated construct and mainly used for typings such as `@types/node`.) In this situation,\n * `moduleReference` helps us to fish out the correct module symbol.\n */\n private _getModuleSymbolFromSourceFile(\n sourceFile: ts.SourceFile,\n moduleReference: IAstModuleReference | undefined\n ): ts.Symbol {\n const moduleSymbol: ts.Symbol | undefined = TypeScriptInternals.tryGetSymbolForDeclaration(\n sourceFile,\n this._typeChecker\n );\n if (moduleSymbol !== undefined) {\n // This is the normal case. The SourceFile acts is a module and has a symbol.\n return moduleSymbol;\n }\n\n if (moduleReference !== undefined) {\n // But there is also an elaborate case where the source file contains one or more \"module\" declarations,\n // and our moduleReference took us to one of those.\n\n // eslint-disable-next-line no-bitwise\n if ((moduleReference.moduleSpecifierSymbol.flags & ts.SymbolFlags.Alias) !== 0) {\n // Follow the import/export declaration to one hop the exported item inside the target module\n let followedSymbol: ts.Symbol | undefined = TypeScriptInternals.getImmediateAliasedSymbol(\n moduleReference.moduleSpecifierSymbol,\n this._typeChecker\n );\n\n if (followedSymbol === undefined) {\n // This is a workaround for a compiler bug where getImmediateAliasedSymbol() sometimes returns undefined\n followedSymbol = this._typeChecker.getAliasedSymbol(moduleReference.moduleSpecifierSymbol);\n }\n\n if (followedSymbol !== undefined && followedSymbol !== moduleReference.moduleSpecifierSymbol) {\n // The parent of the exported symbol will be the module that we're importing from\n const parent: ts.Symbol | undefined = TypeScriptInternals.getSymbolParent(followedSymbol);\n if (parent !== undefined) {\n // Make sure the thing we found is a module\n // eslint-disable-next-line no-bitwise\n if ((parent.flags & ts.SymbolFlags.ValueModule) !== 0) {\n // Record that that this is an ambient module that can also be imported from\n this._importableAmbientSourceFiles.add(sourceFile);\n return parent;\n }\n }\n }\n }\n }\n\n throw new InternalError('Unable to determine module for: ' + sourceFile.fileName);\n }\n\n /**\n * Implementation of {@link AstSymbolTable.fetchAstModuleExportInfo}.\n */\n public fetchAstModuleExportInfo(entryPointAstModule: AstModule): AstModuleExportInfo {\n if (entryPointAstModule.isExternal) {\n throw new Error('fetchAstModuleExportInfo() is not supported for external modules');\n }\n\n if (entryPointAstModule.astModuleExportInfo === undefined) {\n const astModuleExportInfo: AstModuleExportInfo = new AstModuleExportInfo();\n\n this._collectAllExportsRecursive(astModuleExportInfo, entryPointAstModule, new Set<AstModule>());\n\n entryPointAstModule.astModuleExportInfo = astModuleExportInfo;\n }\n return entryPointAstModule.astModuleExportInfo;\n }\n\n /**\n * Returns true if the module specifier refers to an external package. Ignores packages listed in the\n * \"bundledPackages\" setting from the api-extractor.json config file.\n */\n private _isExternalModulePath(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration | ts.ImportTypeNode,\n moduleSpecifier: string\n ): boolean {\n const resolvedModule: ts.ResolvedModuleFull | undefined = TypeScriptInternals.getResolvedModule(\n importOrExportDeclaration.getSourceFile(),\n moduleSpecifier\n );\n\n if (resolvedModule === undefined) {\n // The TS compiler API `getResolvedModule` cannot resolve ambient modules. Thus, to match API Extractor's\n // previous behavior, simply treat all ambient modules as external. This bug is tracked by\n // https://github.com/microsoft/rushstack/issues/3335.\n return true;\n }\n\n // Either something like `jquery` or `@microsoft/api-extractor`.\n const packageName: string | undefined = resolvedModule.packageId?.name;\n if (packageName !== undefined && this._bundledPackageNames.has(packageName)) {\n return false;\n }\n\n if (resolvedModule.isExternalLibraryImport === undefined) {\n // This presumably means the compiler couldn't figure out whether the module was external, but we're not\n // sure how this can happen.\n throw new InternalError(\n `Cannot determine whether the module ${JSON.stringify(moduleSpecifier)} is external\\n` +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n return resolvedModule.isExternalLibraryImport;\n }\n\n /**\n * Returns true if when we analyzed sourceFile, we found that it contains an \"export=\" statement that allows\n * it to behave /either/ as an ambient module /or/ as a regular importable module. In this case,\n * `AstSymbolTable._fetchAstSymbol()` will analyze its symbols even though `TypeScriptHelpers.isAmbient()`\n * returns true.\n */\n public isImportableAmbientSourceFile(sourceFile: ts.SourceFile): boolean {\n return this._importableAmbientSourceFiles.has(sourceFile);\n }\n\n private _collectAllExportsRecursive(\n astModuleExportInfo: AstModuleExportInfo,\n astModule: AstModule,\n visitedAstModules: Set<AstModule>\n ): void {\n if (visitedAstModules.has(astModule)) {\n return;\n }\n visitedAstModules.add(astModule);\n\n if (astModule.isExternal) {\n astModuleExportInfo.starExportedExternalModules.add(astModule);\n } else {\n // Fetch each of the explicit exports for this module\n if (astModule.moduleSymbol.exports) {\n astModule.moduleSymbol.exports.forEach((exportSymbol, exportName) => {\n switch (exportName) {\n case ts.InternalSymbolName.ExportStar:\n case ts.InternalSymbolName.ExportEquals:\n break;\n default:\n // Don't collect the \"export default\" symbol unless this is the entry point module\n if (exportName !== ts.InternalSymbolName.Default || visitedAstModules.size === 1) {\n if (!astModuleExportInfo.exportedLocalEntities.has(exportSymbol.name)) {\n const astEntity: AstEntity = this._getExportOfAstModule(exportSymbol.name, astModule);\n\n if (astEntity instanceof AstSymbol && !astEntity.isExternal) {\n this._astSymbolTable.analyze(astEntity);\n }\n\n if (astEntity instanceof AstNamespaceImport && !astEntity.astModule.isExternal) {\n this._astSymbolTable.analyze(astEntity);\n }\n\n astModuleExportInfo.exportedLocalEntities.set(exportSymbol.name, astEntity);\n }\n }\n break;\n }\n });\n }\n\n for (const starExportedModule of astModule.starExportedModules) {\n this._collectAllExportsRecursive(astModuleExportInfo, starExportedModule, visitedAstModules);\n }\n }\n }\n\n /**\n * For a given symbol (which was encountered in the specified sourceFile), this fetches the AstEntity that it\n * refers to. For example, if a particular interface describes the return value of a function, this API can help\n * us determine a TSDoc declaration reference for that symbol (if the symbol is exported).\n */\n public fetchReferencedAstEntity(\n symbol: ts.Symbol,\n referringModuleIsExternal: boolean\n ): AstEntity | undefined {\n // eslint-disable-next-line no-bitwise\n if ((symbol.flags & ts.SymbolFlags.FunctionScopedVariable) !== 0) {\n // If a symbol refers back to part of its own definition, don't follow that rabbit hole\n // Example:\n //\n // function f(x: number): typeof x {\n // return 123;\n // }\n return undefined;\n }\n\n let current: ts.Symbol = symbol;\n\n if (referringModuleIsExternal) {\n current = TypeScriptHelpers.followAliases(symbol, this._typeChecker);\n } else {\n for (;;) {\n // Is this symbol an import/export that we need to follow to find the real declaration?\n for (const declaration of current.declarations || []) {\n let matchedAstEntity: AstEntity | undefined;\n matchedAstEntity = this._tryMatchExportDeclaration(declaration, current);\n if (matchedAstEntity !== undefined) {\n return matchedAstEntity;\n }\n matchedAstEntity = this._tryMatchImportDeclaration(declaration, current);\n if (matchedAstEntity !== undefined) {\n return matchedAstEntity;\n }\n }\n\n // eslint-disable-next-line no-bitwise\n if (!(current.flags & ts.SymbolFlags.Alias)) {\n break;\n }\n\n const currentAlias: ts.Symbol = TypeScriptInternals.getImmediateAliasedSymbol(\n current,\n this._typeChecker\n );\n // Stop if we reach the end of the chain\n if (!currentAlias || currentAlias === current) {\n break;\n }\n\n current = currentAlias;\n }\n }\n\n // Otherwise, assume it is a normal declaration\n const astSymbol: AstSymbol | undefined = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: current,\n isExternal: referringModuleIsExternal,\n includeNominalAnalysis: false,\n addIfMissing: true\n });\n\n return astSymbol;\n }\n\n public fetchReferencedAstEntityFromImportTypeNode(\n node: ts.ImportTypeNode,\n referringModuleIsExternal: boolean\n ): AstEntity | undefined {\n const externalModulePath: string | undefined = this._tryGetExternalModulePath(node);\n\n if (externalModulePath) {\n let exportName: string;\n if (node.qualifier) {\n // Example input:\n // import('api-extractor-lib1-test').Lib1GenericType<number>\n //\n // Extracted qualifier:\n // Lib1GenericType\n exportName = node.qualifier.getText().trim();\n } else {\n // Example input:\n // import('api-extractor-lib1-test')\n //\n // Extracted qualifier:\n // apiExtractorLib1Test\n\n exportName = SyntaxHelpers.makeCamelCaseIdentifier(externalModulePath);\n }\n\n return this._fetchAstImport(undefined, {\n importKind: AstImportKind.ImportType,\n exportName: exportName,\n modulePath: externalModulePath,\n isTypeOnly: false\n });\n }\n\n // Internal reference: AstSymbol\n const rightMostToken: ts.Identifier | ts.ImportTypeNode = node.qualifier\n ? node.qualifier.kind === ts.SyntaxKind.QualifiedName\n ? node.qualifier.right\n : node.qualifier\n : node;\n\n // There is no symbol property in a ImportTypeNode, obtain the associated export symbol\n const exportSymbol: ts.Symbol | undefined = this._typeChecker.getSymbolAtLocation(rightMostToken);\n if (!exportSymbol) {\n throw new InternalError(\n `Symbol not found for identifier: ${node.getText()}\\n` +\n SourceFileLocationFormatter.formatDeclaration(node)\n );\n }\n\n let followedSymbol: ts.Symbol = exportSymbol;\n for (;;) {\n const referencedAstEntity: AstEntity | undefined = this.fetchReferencedAstEntity(\n followedSymbol,\n referringModuleIsExternal\n );\n\n if (referencedAstEntity) {\n return referencedAstEntity;\n }\n\n const followedSymbolNode: ts.Node | ts.ImportTypeNode | undefined =\n followedSymbol.declarations && (followedSymbol.declarations[0] as ts.Node | undefined);\n\n if (followedSymbolNode && followedSymbolNode.kind === ts.SyntaxKind.ImportType) {\n return this.fetchReferencedAstEntityFromImportTypeNode(\n followedSymbolNode as ts.ImportTypeNode,\n referringModuleIsExternal\n );\n }\n\n // eslint-disable-next-line no-bitwise\n if (!(followedSymbol.flags & ts.SymbolFlags.Alias)) {\n break;\n }\n\n const currentAlias: ts.Symbol = this._typeChecker.getAliasedSymbol(followedSymbol);\n if (!currentAlias || currentAlias === followedSymbol) {\n break;\n }\n\n followedSymbol = currentAlias;\n }\n\n const astSymbol: AstSymbol | undefined = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: followedSymbol,\n isExternal: referringModuleIsExternal,\n includeNominalAnalysis: false,\n addIfMissing: true\n });\n\n return astSymbol;\n }\n\n private _tryMatchExportDeclaration(\n declaration: ts.Declaration,\n declarationSymbol: ts.Symbol\n ): AstEntity | undefined {\n const exportDeclaration: ts.ExportDeclaration | undefined =\n TypeScriptHelpers.findFirstParent<ts.ExportDeclaration>(declaration, ts.SyntaxKind.ExportDeclaration);\n\n if (exportDeclaration) {\n let exportName: string | undefined = undefined;\n\n if (declaration.kind === ts.SyntaxKind.ExportSpecifier) {\n // EXAMPLE:\n // \"export { A } from './file-a';\"\n //\n // ExportDeclaration:\n // ExportKeyword: pre=[export] sep=[ ]\n // NamedExports:\n // FirstPunctuation: pre=[{] sep=[ ]\n // SyntaxList:\n // ExportSpecifier: <------------- declaration\n // Identifier: pre=[A] sep=[ ]\n // CloseBraceToken: pre=[}] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['./file-a']\n // SemicolonToken: pre=[;]\n\n // Example: \" ExportName as RenamedName\"\n const exportSpecifier: ts.ExportSpecifier = declaration as ts.ExportSpecifier;\n exportName = (exportSpecifier.propertyName || exportSpecifier.name).getText().trim();\n } else if (declaration.kind === ts.SyntaxKind.NamespaceExport) {\n // EXAMPLE:\n // \"export * as theLib from 'the-lib';\"\n //\n // ExportDeclaration:\n // ExportKeyword: pre=[export] sep=[ ]\n // NamespaceExport:\n // AsteriskToken: pre=[*] sep=[ ]\n // AsKeyword: pre=[as] sep=[ ]\n // Identifier: pre=[theLib] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['the-lib']\n // SemicolonToken: pre=[;]\n\n // Issue tracking this feature: https://github.com/microsoft/rushstack/issues/2780\n throw new Error(\n `The \"export * as ___\" syntax is not supported yet; as a workaround,` +\n ` use \"import * as ___\" with a separate \"export { ___ }\" declaration\\n` +\n SourceFileLocationFormatter.formatDeclaration(declaration)\n );\n } else {\n throw new InternalError(\n `Unimplemented export declaration kind: ${declaration.getText()}\\n` +\n SourceFileLocationFormatter.formatDeclaration(declaration)\n );\n }\n\n // Ignore \"export { A }\" without a module specifier\n if (exportDeclaration.moduleSpecifier) {\n const externalModulePath: string | undefined = this._tryGetExternalModulePath(exportDeclaration);\n\n if (externalModulePath !== undefined) {\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.NamedImport,\n modulePath: externalModulePath,\n exportName: exportName,\n isTypeOnly: false\n });\n }\n\n return this._getExportOfSpecifierAstModule(exportName, exportDeclaration, declarationSymbol);\n }\n }\n\n return undefined;\n }\n\n private _tryMatchImportDeclaration(\n declaration: ts.Declaration,\n declarationSymbol: ts.Symbol\n ): AstEntity | undefined {\n const importDeclaration: ts.ImportDeclaration | undefined =\n TypeScriptHelpers.findFirstParent<ts.ImportDeclaration>(declaration, ts.SyntaxKind.ImportDeclaration);\n\n if (importDeclaration) {\n const externalModulePath: string | undefined = this._tryGetExternalModulePath(importDeclaration);\n\n if (declaration.kind === ts.SyntaxKind.NamespaceImport) {\n // EXAMPLE:\n // \"import * as theLib from 'the-lib';\"\n //\n // ImportDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // ImportClause:\n // NamespaceImport: <------------- declaration\n // AsteriskToken: pre=[*] sep=[ ]\n // AsKeyword: pre=[as] sep=[ ]\n // Identifier: pre=[theLib] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['the-lib']\n // SemicolonToken: pre=[;]\n\n if (externalModulePath === undefined) {\n const astModule: AstModule = this._fetchSpecifierAstModule(importDeclaration, declarationSymbol);\n let namespaceImport: AstNamespaceImport | undefined =\n this._astNamespaceImportByModule.get(astModule);\n if (namespaceImport === undefined) {\n namespaceImport = new AstNamespaceImport({\n namespaceName: declarationSymbol.name,\n astModule: astModule,\n declaration: declaration\n });\n this._astNamespaceImportByModule.set(astModule, namespaceImport);\n }\n return namespaceImport;\n }\n\n // Here importSymbol=undefined because {@inheritDoc} and such are not going to work correctly for\n // a package or source file.\n return this._fetchAstImport(undefined, {\n importKind: AstImportKind.StarImport,\n exportName: declarationSymbol.name,\n modulePath: externalModulePath,\n isTypeOnly: ExportAnalyzer._getIsTypeOnly(importDeclaration)\n });\n }\n\n if (declaration.kind === ts.SyntaxKind.ImportSpecifier) {\n // EXAMPLE:\n // \"import { A, B } from 'the-lib';\"\n //\n // ImportDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // ImportClause:\n // NamedImports:\n // FirstPunctuation: pre=[{] sep=[ ]\n // SyntaxList:\n // ImportSpecifier: <------------- declaration\n // Identifier: pre=[A]\n // CommaToken: pre=[,] sep=[ ]\n // ImportSpecifier:\n // Identifier: pre=[B] sep=[ ]\n // CloseBraceToken: pre=[}] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['the-lib']\n // SemicolonToken: pre=[;]\n\n // Example: \" ExportName as RenamedName\"\n const importSpecifier: ts.ImportSpecifier = declaration as ts.ImportSpecifier;\n const exportName: string = (importSpecifier.propertyName || importSpecifier.name).getText().trim();\n\n if (externalModulePath !== undefined) {\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.NamedImport,\n modulePath: externalModulePath,\n exportName: exportName,\n isTypeOnly: ExportAnalyzer._getIsTypeOnly(importDeclaration)\n });\n }\n\n return this._getExportOfSpecifierAstModule(exportName, importDeclaration, declarationSymbol);\n } else if (declaration.kind === ts.SyntaxKind.ImportClause) {\n // EXAMPLE:\n // \"import A, { B } from './A';\"\n //\n // ImportDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // ImportClause: <------------- declaration (referring to A)\n // Identifier: pre=[A]\n // CommaToken: pre=[,] sep=[ ]\n // NamedImports:\n // FirstPunctuation: pre=[{] sep=[ ]\n // SyntaxList:\n // ImportSpecifier:\n // Identifier: pre=[B] sep=[ ]\n // CloseBraceToken: pre=[}] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['./A']\n // SemicolonToken: pre=[;]\n\n const importClause: ts.ImportClause = declaration as ts.ImportClause;\n const exportName: string = importClause.name\n ? importClause.name.getText().trim()\n : ts.InternalSymbolName.Default;\n\n if (externalModulePath !== undefined) {\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.DefaultImport,\n modulePath: externalModulePath,\n exportName,\n isTypeOnly: ExportAnalyzer._getIsTypeOnly(importDeclaration)\n });\n }\n\n return this._getExportOfSpecifierAstModule(\n ts.InternalSymbolName.Default,\n importDeclaration,\n declarationSymbol\n );\n } else {\n throw new InternalError(\n `Unimplemented import declaration kind: ${declaration.getText()}\\n` +\n SourceFileLocationFormatter.formatDeclaration(declaration)\n );\n }\n }\n\n if (ts.isImportEqualsDeclaration(declaration)) {\n // EXAMPLE:\n // import myLib = require('my-lib');\n //\n // ImportEqualsDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // Identifier: pre=[myLib] sep=[ ]\n // FirstAssignment: pre=[=] sep=[ ]\n // ExternalModuleReference:\n // RequireKeyword: pre=[require]\n // OpenParenToken: pre=[(]\n // StringLiteral: pre=['my-lib']\n // CloseParenToken: pre=[)]\n // SemicolonToken: pre=[;]\n if (ts.isExternalModuleReference(declaration.moduleReference)) {\n if (ts.isStringLiteralLike(declaration.moduleReference.expression)) {\n const variableName: string = TypeScriptInternals.getTextOfIdentifierOrLiteral(declaration.name);\n const externalModuleName: string = TypeScriptInternals.getTextOfIdentifierOrLiteral(\n declaration.moduleReference.expression\n );\n\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.EqualsImport,\n modulePath: externalModuleName,\n exportName: variableName,\n isTypeOnly: false\n });\n }\n }\n }\n\n return undefined;\n }\n\n private static _getIsTypeOnly(importDeclaration: ts.ImportDeclaration): boolean {\n if (importDeclaration.importClause) {\n return !!importDeclaration.importClause.isTypeOnly;\n }\n return false;\n }\n\n private _getExportOfSpecifierAstModule(\n exportName: string,\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration,\n exportSymbol: ts.Symbol\n ): AstEntity {\n const specifierAstModule: AstModule = this._fetchSpecifierAstModule(\n importOrExportDeclaration,\n exportSymbol\n );\n const astEntity: AstEntity = this._getExportOfAstModule(exportName, specifierAstModule);\n return astEntity;\n }\n\n private _getExportOfAstModule(exportName: string, astModule: AstModule): AstEntity {\n const visitedAstModules: Set<AstModule> = new Set<AstModule>();\n const astEntity: AstEntity | undefined = this._tryGetExportOfAstModule(\n exportName,\n astModule,\n visitedAstModules\n );\n if (astEntity === undefined) {\n throw new InternalError(\n `Unable to analyze the export ${JSON.stringify(exportName)} in\\n` + astModule.sourceFile.fileName\n );\n }\n return astEntity;\n }\n\n /**\n * Implementation of {@link AstSymbolTable.tryGetExportOfAstModule}.\n */\n public tryGetExportOfAstModule(exportName: string, astModule: AstModule): AstEntity | undefined {\n const visitedAstModules: Set<AstModule> = new Set<AstModule>();\n return this._tryGetExportOfAstModule(exportName, astModule, visitedAstModules);\n }\n\n private _tryGetExportOfAstModule(\n exportName: string,\n astModule: AstModule,\n visitedAstModules: Set<AstModule>\n ): AstEntity | undefined {\n if (visitedAstModules.has(astModule)) {\n return undefined;\n }\n visitedAstModules.add(astModule);\n\n let astEntity: AstEntity | undefined = astModule.cachedExportedEntities.get(exportName);\n if (astEntity !== undefined) {\n return astEntity;\n }\n\n // Try the explicit exports\n const escapedExportName: ts.__String = ts.escapeLeadingUnderscores(exportName);\n if (astModule.moduleSymbol.exports) {\n const exportSymbol: ts.Symbol | undefined = astModule.moduleSymbol.exports.get(escapedExportName);\n if (exportSymbol) {\n astEntity = this.fetchReferencedAstEntity(exportSymbol, astModule.isExternal);\n\n if (astEntity !== undefined) {\n astModule.cachedExportedEntities.set(exportName, astEntity); // cache for next time\n return astEntity;\n }\n }\n }\n\n // Try each of the star imports\n for (const starExportedModule of astModule.starExportedModules) {\n astEntity = this._tryGetExportOfAstModule(exportName, starExportedModule, visitedAstModules);\n\n if (astEntity !== undefined) {\n if (starExportedModule.externalModulePath !== undefined) {\n // This entity was obtained from an external module, so return an AstImport instead\n const astSymbol: AstSymbol = astEntity as AstSymbol;\n return this._fetchAstImport(astSymbol.followedSymbol, {\n importKind: AstImportKind.NamedImport,\n modulePath: starExportedModule.externalModulePath,\n exportName: exportName,\n isTypeOnly: false\n });\n }\n\n return astEntity;\n }\n }\n\n return undefined;\n }\n\n private _tryGetExternalModulePath(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration | ts.ImportTypeNode\n ): string | undefined {\n const moduleSpecifier: string = this._getModuleSpecifier(importOrExportDeclaration);\n if (this._isExternalModulePath(importOrExportDeclaration, moduleSpecifier)) {\n return moduleSpecifier;\n }\n\n return undefined;\n }\n\n /**\n * Given an ImportDeclaration of the form `export { X } from \"___\";`, this interprets the module specifier (`\"___\"`)\n * and fetches the corresponding AstModule object.\n */\n private _fetchSpecifierAstModule(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration,\n exportSymbol: ts.Symbol\n ): AstModule {\n const moduleSpecifier: string = this._getModuleSpecifier(importOrExportDeclaration);\n const resolvedModule: ts.ResolvedModuleFull | undefined = TypeScriptInternals.getResolvedModule(\n importOrExportDeclaration.getSourceFile(),\n moduleSpecifier\n );\n\n if (resolvedModule === undefined) {\n // Encountered in https://github.com/microsoft/rushstack/issues/1914.\n //\n // It's also possible for this to occur with ambient modules. However, in practice this doesn't happen\n // as API Extractor treats all ambient modules as external per the logic in `_isExternalModulePath`, and\n // thus this code path is never reached for ambient modules.\n throw new InternalError(\n `getResolvedModule() could not resolve module name ${JSON.stringify(moduleSpecifier)}\\n` +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n // Map the filename back to the corresponding SourceFile. This circuitous approach is needed because\n // we have no way to access the compiler's internal resolveExternalModuleName() function\n const moduleSourceFile: ts.SourceFile | undefined = this._program.getSourceFile(\n resolvedModule.resolvedFileName\n );\n if (!moduleSourceFile) {\n // This should not happen, since getResolvedModule() specifically looks up names that the compiler\n // found in export declarations for this source file\n throw new InternalError(\n `getSourceFile() failed to locate ${JSON.stringify(resolvedModule.resolvedFileName)}\\n` +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n const isExternal: boolean = this._isExternalModulePath(importOrExportDeclaration, moduleSpecifier);\n const moduleReference: IAstModuleReference = {\n moduleSpecifier: moduleSpecifier,\n moduleSpecifierSymbol: exportSymbol\n };\n const specifierAstModule: AstModule = this.fetchAstModuleFromSourceFile(\n moduleSourceFile,\n moduleReference,\n isExternal\n );\n\n return specifierAstModule;\n }\n\n private _fetchAstImport(importSymbol: ts.Symbol | undefined, options: IAstImportOptions): AstImport {\n const key: string = AstImport.getKey(options);\n\n let astImport: AstImport | undefined = this._astImportsByKey.get(key);\n\n if (!astImport) {\n astImport = new AstImport(options);\n this._astImportsByKey.set(key, astImport);\n\n if (importSymbol) {\n const followedSymbol: ts.Symbol = TypeScriptHelpers.followAliases(importSymbol, this._typeChecker);\n\n astImport.astSymbol = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: followedSymbol,\n isExternal: true,\n includeNominalAnalysis: false,\n addIfMissing: true\n });\n }\n } else {\n // If we encounter at least one import that does not use the type-only form,\n // then the .d.ts rollup will NOT use \"import type\".\n if (!options.isTypeOnly) {\n astImport.isTypeOnlyEverywhere = false;\n }\n }\n\n return astImport;\n }\n\n private _getModuleSpecifier(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration | ts.ImportTypeNode\n ): string {\n // The name of the module, which could be like \"./SomeLocalFile' or like 'external-package/entry/point'\n const moduleSpecifier: string | undefined =\n TypeScriptHelpers.getModuleSpecifier(importOrExportDeclaration);\n\n if (!moduleSpecifier) {\n throw new InternalError(\n 'Unable to parse module specifier\\n' +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n return moduleSpecifier;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExportAnalyzer.js","sourceRoot":"","sources":["../../src/analyzer/ExportAnalyzer.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';\nimport { InternalError } from '@rushstack/node-core-library';\n\nimport { TypeScriptHelpers } from './TypeScriptHelpers';\nimport { AstSymbol } from './AstSymbol';\nimport { AstImport, IAstImportOptions, AstImportKind } from './AstImport';\nimport { AstModule, AstModuleExportInfo } from './AstModule';\nimport { TypeScriptInternals } from './TypeScriptInternals';\nimport { SourceFileLocationFormatter } from './SourceFileLocationFormatter';\nimport { IFetchAstSymbolOptions } from './AstSymbolTable';\nimport { AstEntity } from './AstEntity';\nimport { AstNamespaceImport } from './AstNamespaceImport';\nimport { SyntaxHelpers } from './SyntaxHelpers';\n\n/**\n * Exposes the minimal APIs from AstSymbolTable that are needed by ExportAnalyzer.\n *\n * In particular, we want ExportAnalyzer to be able to call AstSymbolTable._fetchAstSymbol() even though it\n * is a very private API that should not be exposed to any other components.\n */\nexport interface IAstSymbolTable {\n fetchAstSymbol(options: IFetchAstSymbolOptions): AstSymbol | undefined;\n\n analyze(astEntity: AstEntity): void;\n}\n\n/**\n * Used with ExportAnalyzer.fetchAstModuleBySourceFile() to provide contextual information about how the source file\n * was imported.\n */\ninterface IAstModuleReference {\n /**\n * For example, if we are following a statement like `import { X } from 'some-package'`, this will be the\n * string `\"some-package\"`.\n */\n moduleSpecifier: string;\n\n /**\n * For example, if we are following a statement like `import { X } from 'some-package'`, this will be the\n * symbol for `X`.\n */\n moduleSpecifierSymbol: ts.Symbol;\n}\n\n/**\n * The ExportAnalyzer is an internal part of AstSymbolTable that has been moved out into its own source file\n * because it is a complex and mostly self-contained algorithm.\n *\n * Its job is to build up AstModule objects by crawling import statements to discover where declarations come from.\n * This is conceptually the same as the compiler's own TypeChecker.getExportsOfModule(), except that when\n * ExportAnalyzer encounters a declaration that was imported from an external package, it remembers how it was imported\n * (i.e. the AstImport object). Today the compiler API does not expose this information, which is crucial for\n * generating .d.ts rollups.\n */\nexport class ExportAnalyzer {\n private readonly _program: ts.Program;\n private readonly _typeChecker: ts.TypeChecker;\n private readonly _bundledPackageNames: ReadonlySet<string>;\n private readonly _astSymbolTable: IAstSymbolTable;\n\n private readonly _astModulesByModuleSymbol: Map<ts.Symbol, AstModule> = new Map<ts.Symbol, AstModule>();\n\n // Used with isImportableAmbientSourceFile()\n private readonly _importableAmbientSourceFiles: Set<ts.SourceFile> = new Set<ts.SourceFile>();\n\n private readonly _astImportsByKey: Map<string, AstImport> = new Map<string, AstImport>();\n private readonly _astNamespaceImportByModule: Map<AstModule, AstNamespaceImport> = new Map();\n\n public constructor(\n program: ts.Program,\n typeChecker: ts.TypeChecker,\n bundledPackageNames: ReadonlySet<string>,\n astSymbolTable: IAstSymbolTable\n ) {\n this._program = program;\n this._typeChecker = typeChecker;\n this._bundledPackageNames = bundledPackageNames;\n this._astSymbolTable = astSymbolTable;\n }\n\n /**\n * For a given source file, this analyzes all of its exports and produces an AstModule object.\n *\n * @param moduleReference - contextual information about the import statement that took us to this source file.\n * or `undefined` if this source file is the initial entry point\n * @param isExternal - whether the given `moduleReference` is external.\n */\n public fetchAstModuleFromSourceFile(\n sourceFile: ts.SourceFile,\n moduleReference: IAstModuleReference | undefined,\n isExternal: boolean\n ): AstModule {\n const moduleSymbol: ts.Symbol = this._getModuleSymbolFromSourceFile(sourceFile, moduleReference);\n\n // Don't traverse into a module that we already processed before:\n // The compiler allows m1 to have \"export * from 'm2'\" and \"export * from 'm3'\",\n // even if m2 and m3 both have \"export * from 'm4'\".\n let astModule: AstModule | undefined = this._astModulesByModuleSymbol.get(moduleSymbol);\n if (!astModule) {\n // (If moduleReference === undefined, then this is the entry point of the local project being analyzed.)\n const externalModulePath: string | undefined =\n moduleReference !== undefined && isExternal ? moduleReference.moduleSpecifier : undefined;\n\n astModule = new AstModule({ sourceFile, moduleSymbol, externalModulePath });\n\n this._astModulesByModuleSymbol.set(moduleSymbol, astModule);\n\n if (astModule.isExternal) {\n // It's an external package, so do the special simplified analysis that doesn't crawl into referenced modules\n for (const exportedSymbol of this._typeChecker.getExportsOfModule(moduleSymbol)) {\n if (externalModulePath === undefined) {\n throw new InternalError(\n 'Failed assertion: externalModulePath=undefined but astModule.isExternal=true'\n );\n }\n\n const followedSymbol: ts.Symbol = TypeScriptHelpers.followAliases(\n exportedSymbol,\n this._typeChecker\n );\n\n // Ignore virtual symbols that don't have any declarations\n const arbitraryDeclaration: ts.Declaration | undefined =\n TypeScriptHelpers.tryGetADeclaration(followedSymbol);\n if (arbitraryDeclaration) {\n const astSymbol: AstSymbol | undefined = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: followedSymbol,\n isExternal: astModule.isExternal,\n includeNominalAnalysis: true,\n addIfMissing: true\n });\n\n if (!astSymbol) {\n throw new Error(\n `Unsupported export ${JSON.stringify(exportedSymbol.name)}:\\n` +\n SourceFileLocationFormatter.formatDeclaration(arbitraryDeclaration)\n );\n }\n\n astModule.cachedExportedEntities.set(exportedSymbol.name, astSymbol);\n }\n }\n } else {\n // The module is part of the local project, so do the full analysis\n\n if (moduleSymbol.exports) {\n // The \"export * from 'module-name';\" declarations are all attached to a single virtual symbol\n // whose name is InternalSymbolName.ExportStar\n const exportStarSymbol: ts.Symbol | undefined = moduleSymbol.exports.get(\n ts.InternalSymbolName.ExportStar\n );\n if (exportStarSymbol) {\n for (const exportStarDeclaration of exportStarSymbol.getDeclarations() || []) {\n if (ts.isExportDeclaration(exportStarDeclaration)) {\n const starExportedModule: AstModule | undefined = this._fetchSpecifierAstModule(\n exportStarDeclaration,\n exportStarSymbol\n );\n\n if (starExportedModule !== undefined) {\n astModule.starExportedModules.add(starExportedModule);\n }\n } else {\n // Ignore ExportDeclaration nodes that don't match the expected pattern\n // TODO: Should we report a warning?\n }\n }\n }\n }\n }\n }\n\n return astModule;\n }\n\n /**\n * Retrieves the symbol for the module corresponding to the ts.SourceFile that is being imported/exported.\n *\n * @remarks\n * The `module` keyword can be used to declare multiple TypeScript modules inside a single source file.\n * (This is a deprecated construct and mainly used for typings such as `@types/node`.) In this situation,\n * `moduleReference` helps us to fish out the correct module symbol.\n */\n private _getModuleSymbolFromSourceFile(\n sourceFile: ts.SourceFile,\n moduleReference: IAstModuleReference | undefined\n ): ts.Symbol {\n const moduleSymbol: ts.Symbol | undefined = TypeScriptInternals.tryGetSymbolForDeclaration(\n sourceFile,\n this._typeChecker\n );\n if (moduleSymbol !== undefined) {\n // This is the normal case. The SourceFile acts is a module and has a symbol.\n return moduleSymbol;\n }\n\n if (moduleReference !== undefined) {\n // But there is also an elaborate case where the source file contains one or more \"module\" declarations,\n // and our moduleReference took us to one of those.\n\n // eslint-disable-next-line no-bitwise\n if ((moduleReference.moduleSpecifierSymbol.flags & ts.SymbolFlags.Alias) !== 0) {\n // Follow the import/export declaration to one hop the exported item inside the target module\n let followedSymbol: ts.Symbol | undefined = TypeScriptInternals.getImmediateAliasedSymbol(\n moduleReference.moduleSpecifierSymbol,\n this._typeChecker\n );\n\n if (followedSymbol === undefined) {\n // This is a workaround for a compiler bug where getImmediateAliasedSymbol() sometimes returns undefined\n followedSymbol = this._typeChecker.getAliasedSymbol(moduleReference.moduleSpecifierSymbol);\n }\n\n if (followedSymbol !== undefined && followedSymbol !== moduleReference.moduleSpecifierSymbol) {\n // The parent of the exported symbol will be the module that we're importing from\n const parent: ts.Symbol | undefined = TypeScriptInternals.getSymbolParent(followedSymbol);\n if (parent !== undefined) {\n // Make sure the thing we found is a module\n // eslint-disable-next-line no-bitwise\n if ((parent.flags & ts.SymbolFlags.ValueModule) !== 0) {\n // Record that that this is an ambient module that can also be imported from\n this._importableAmbientSourceFiles.add(sourceFile);\n return parent;\n }\n }\n }\n }\n }\n\n throw new InternalError('Unable to determine module for: ' + sourceFile.fileName);\n }\n\n /**\n * Implementation of {@link AstSymbolTable.fetchAstModuleExportInfo}.\n */\n public fetchAstModuleExportInfo(entryPointAstModule: AstModule): AstModuleExportInfo {\n if (entryPointAstModule.isExternal) {\n throw new Error('fetchAstModuleExportInfo() is not supported for external modules');\n }\n\n if (entryPointAstModule.astModuleExportInfo === undefined) {\n const astModuleExportInfo: AstModuleExportInfo = new AstModuleExportInfo();\n\n this._collectAllExportsRecursive(astModuleExportInfo, entryPointAstModule, new Set<AstModule>());\n\n entryPointAstModule.astModuleExportInfo = astModuleExportInfo;\n }\n return entryPointAstModule.astModuleExportInfo;\n }\n\n /**\n * Returns true if the module specifier refers to an external package. Ignores packages listed in the\n * \"bundledPackages\" setting from the api-extractor.json config file.\n */\n private _isExternalModulePath(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration | ts.ImportTypeNode,\n moduleSpecifier: string\n ): boolean {\n const specifier: ts.TypeNode | ts.Expression | undefined = ts.isImportTypeNode(importOrExportDeclaration)\n ? importOrExportDeclaration.argument\n : importOrExportDeclaration.moduleSpecifier;\n const mode: ts.ModuleKind.CommonJS | ts.ModuleKind.ESNext | undefined =\n specifier && ts.isStringLiteralLike(specifier)\n ? TypeScriptInternals.getModeForUsageLocation(importOrExportDeclaration.getSourceFile(), specifier)\n : undefined;\n\n const resolvedModule: ts.ResolvedModuleFull | undefined = TypeScriptInternals.getResolvedModule(\n importOrExportDeclaration.getSourceFile(),\n moduleSpecifier,\n mode\n );\n\n if (resolvedModule === undefined) {\n // The TS compiler API `getResolvedModule` cannot resolve ambient modules. Thus, to match API Extractor's\n // previous behavior, simply treat all ambient modules as external. This bug is tracked by\n // https://github.com/microsoft/rushstack/issues/3335.\n return true;\n }\n\n // Either something like `jquery` or `@microsoft/api-extractor`.\n const packageName: string | undefined = resolvedModule.packageId?.name;\n if (packageName !== undefined && this._bundledPackageNames.has(packageName)) {\n return false;\n }\n\n if (resolvedModule.isExternalLibraryImport === undefined) {\n // This presumably means the compiler couldn't figure out whether the module was external, but we're not\n // sure how this can happen.\n throw new InternalError(\n `Cannot determine whether the module ${JSON.stringify(moduleSpecifier)} is external\\n` +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n return resolvedModule.isExternalLibraryImport;\n }\n\n /**\n * Returns true if when we analyzed sourceFile, we found that it contains an \"export=\" statement that allows\n * it to behave /either/ as an ambient module /or/ as a regular importable module. In this case,\n * `AstSymbolTable._fetchAstSymbol()` will analyze its symbols even though `TypeScriptHelpers.isAmbient()`\n * returns true.\n */\n public isImportableAmbientSourceFile(sourceFile: ts.SourceFile): boolean {\n return this._importableAmbientSourceFiles.has(sourceFile);\n }\n\n private _collectAllExportsRecursive(\n astModuleExportInfo: AstModuleExportInfo,\n astModule: AstModule,\n visitedAstModules: Set<AstModule>\n ): void {\n if (visitedAstModules.has(astModule)) {\n return;\n }\n visitedAstModules.add(astModule);\n\n if (astModule.isExternal) {\n astModuleExportInfo.starExportedExternalModules.add(astModule);\n } else {\n // Fetch each of the explicit exports for this module\n if (astModule.moduleSymbol.exports) {\n astModule.moduleSymbol.exports.forEach((exportSymbol, exportName) => {\n switch (exportName) {\n case ts.InternalSymbolName.ExportStar:\n case ts.InternalSymbolName.ExportEquals:\n break;\n default:\n // Don't collect the \"export default\" symbol unless this is the entry point module\n if (exportName !== ts.InternalSymbolName.Default || visitedAstModules.size === 1) {\n if (!astModuleExportInfo.exportedLocalEntities.has(exportSymbol.name)) {\n const astEntity: AstEntity = this._getExportOfAstModule(exportSymbol.name, astModule);\n\n if (astEntity instanceof AstSymbol && !astEntity.isExternal) {\n this._astSymbolTable.analyze(astEntity);\n }\n\n if (astEntity instanceof AstNamespaceImport && !astEntity.astModule.isExternal) {\n this._astSymbolTable.analyze(astEntity);\n }\n\n astModuleExportInfo.exportedLocalEntities.set(exportSymbol.name, astEntity);\n }\n }\n break;\n }\n });\n }\n\n for (const starExportedModule of astModule.starExportedModules) {\n this._collectAllExportsRecursive(astModuleExportInfo, starExportedModule, visitedAstModules);\n }\n }\n }\n\n /**\n * For a given symbol (which was encountered in the specified sourceFile), this fetches the AstEntity that it\n * refers to. For example, if a particular interface describes the return value of a function, this API can help\n * us determine a TSDoc declaration reference for that symbol (if the symbol is exported).\n */\n public fetchReferencedAstEntity(\n symbol: ts.Symbol,\n referringModuleIsExternal: boolean\n ): AstEntity | undefined {\n // eslint-disable-next-line no-bitwise\n if ((symbol.flags & ts.SymbolFlags.FunctionScopedVariable) !== 0) {\n // If a symbol refers back to part of its own definition, don't follow that rabbit hole\n // Example:\n //\n // function f(x: number): typeof x {\n // return 123;\n // }\n return undefined;\n }\n\n let current: ts.Symbol = symbol;\n\n if (referringModuleIsExternal) {\n current = TypeScriptHelpers.followAliases(symbol, this._typeChecker);\n } else {\n for (;;) {\n // Is this symbol an import/export that we need to follow to find the real declaration?\n for (const declaration of current.declarations || []) {\n let matchedAstEntity: AstEntity | undefined;\n matchedAstEntity = this._tryMatchExportDeclaration(declaration, current);\n if (matchedAstEntity !== undefined) {\n return matchedAstEntity;\n }\n matchedAstEntity = this._tryMatchImportDeclaration(declaration, current);\n if (matchedAstEntity !== undefined) {\n return matchedAstEntity;\n }\n }\n\n // eslint-disable-next-line no-bitwise\n if (!(current.flags & ts.SymbolFlags.Alias)) {\n break;\n }\n\n const currentAlias: ts.Symbol = TypeScriptInternals.getImmediateAliasedSymbol(\n current,\n this._typeChecker\n );\n // Stop if we reach the end of the chain\n if (!currentAlias || currentAlias === current) {\n break;\n }\n\n current = currentAlias;\n }\n }\n\n // Otherwise, assume it is a normal declaration\n const astSymbol: AstSymbol | undefined = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: current,\n isExternal: referringModuleIsExternal,\n includeNominalAnalysis: false,\n addIfMissing: true\n });\n\n return astSymbol;\n }\n\n public fetchReferencedAstEntityFromImportTypeNode(\n node: ts.ImportTypeNode,\n referringModuleIsExternal: boolean\n ): AstEntity | undefined {\n const externalModulePath: string | undefined = this._tryGetExternalModulePath(node);\n\n if (externalModulePath) {\n let exportName: string;\n if (node.qualifier) {\n // Example input:\n // import('api-extractor-lib1-test').Lib1GenericType<number>\n //\n // Extracted qualifier:\n // Lib1GenericType\n exportName = node.qualifier.getText().trim();\n } else {\n // Example input:\n // import('api-extractor-lib1-test')\n //\n // Extracted qualifier:\n // apiExtractorLib1Test\n\n exportName = SyntaxHelpers.makeCamelCaseIdentifier(externalModulePath);\n }\n\n return this._fetchAstImport(undefined, {\n importKind: AstImportKind.ImportType,\n exportName: exportName,\n modulePath: externalModulePath,\n isTypeOnly: false\n });\n }\n\n // Internal reference: AstSymbol\n const rightMostToken: ts.Identifier | ts.ImportTypeNode = node.qualifier\n ? node.qualifier.kind === ts.SyntaxKind.QualifiedName\n ? node.qualifier.right\n : node.qualifier\n : node;\n\n // There is no symbol property in a ImportTypeNode, obtain the associated export symbol\n const exportSymbol: ts.Symbol | undefined = this._typeChecker.getSymbolAtLocation(rightMostToken);\n if (!exportSymbol) {\n throw new InternalError(\n `Symbol not found for identifier: ${node.getText()}\\n` +\n SourceFileLocationFormatter.formatDeclaration(node)\n );\n }\n\n let followedSymbol: ts.Symbol = exportSymbol;\n for (;;) {\n const referencedAstEntity: AstEntity | undefined = this.fetchReferencedAstEntity(\n followedSymbol,\n referringModuleIsExternal\n );\n\n if (referencedAstEntity) {\n return referencedAstEntity;\n }\n\n const followedSymbolNode: ts.Node | ts.ImportTypeNode | undefined =\n followedSymbol.declarations && (followedSymbol.declarations[0] as ts.Node | undefined);\n\n if (followedSymbolNode && followedSymbolNode.kind === ts.SyntaxKind.ImportType) {\n return this.fetchReferencedAstEntityFromImportTypeNode(\n followedSymbolNode as ts.ImportTypeNode,\n referringModuleIsExternal\n );\n }\n\n // eslint-disable-next-line no-bitwise\n if (!(followedSymbol.flags & ts.SymbolFlags.Alias)) {\n break;\n }\n\n const currentAlias: ts.Symbol = this._typeChecker.getAliasedSymbol(followedSymbol);\n if (!currentAlias || currentAlias === followedSymbol) {\n break;\n }\n\n followedSymbol = currentAlias;\n }\n\n const astSymbol: AstSymbol | undefined = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: followedSymbol,\n isExternal: referringModuleIsExternal,\n includeNominalAnalysis: false,\n addIfMissing: true\n });\n\n return astSymbol;\n }\n\n private _tryMatchExportDeclaration(\n declaration: ts.Declaration,\n declarationSymbol: ts.Symbol\n ): AstEntity | undefined {\n const exportDeclaration: ts.ExportDeclaration | undefined =\n TypeScriptHelpers.findFirstParent<ts.ExportDeclaration>(declaration, ts.SyntaxKind.ExportDeclaration);\n\n if (exportDeclaration) {\n let exportName: string | undefined = undefined;\n\n if (declaration.kind === ts.SyntaxKind.ExportSpecifier) {\n // EXAMPLE:\n // \"export { A } from './file-a';\"\n //\n // ExportDeclaration:\n // ExportKeyword: pre=[export] sep=[ ]\n // NamedExports:\n // FirstPunctuation: pre=[{] sep=[ ]\n // SyntaxList:\n // ExportSpecifier: <------------- declaration\n // Identifier: pre=[A] sep=[ ]\n // CloseBraceToken: pre=[}] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['./file-a']\n // SemicolonToken: pre=[;]\n\n // Example: \" ExportName as RenamedName\"\n const exportSpecifier: ts.ExportSpecifier = declaration as ts.ExportSpecifier;\n exportName = (exportSpecifier.propertyName || exportSpecifier.name).getText().trim();\n } else if (declaration.kind === ts.SyntaxKind.NamespaceExport) {\n // EXAMPLE:\n // \"export * as theLib from 'the-lib';\"\n //\n // ExportDeclaration:\n // ExportKeyword: pre=[export] sep=[ ]\n // NamespaceExport:\n // AsteriskToken: pre=[*] sep=[ ]\n // AsKeyword: pre=[as] sep=[ ]\n // Identifier: pre=[theLib] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['the-lib']\n // SemicolonToken: pre=[;]\n\n // Issue tracking this feature: https://github.com/microsoft/rushstack/issues/2780\n throw new Error(\n `The \"export * as ___\" syntax is not supported yet; as a workaround,` +\n ` use \"import * as ___\" with a separate \"export { ___ }\" declaration\\n` +\n SourceFileLocationFormatter.formatDeclaration(declaration)\n );\n } else {\n throw new InternalError(\n `Unimplemented export declaration kind: ${declaration.getText()}\\n` +\n SourceFileLocationFormatter.formatDeclaration(declaration)\n );\n }\n\n // Ignore \"export { A }\" without a module specifier\n if (exportDeclaration.moduleSpecifier) {\n const externalModulePath: string | undefined = this._tryGetExternalModulePath(exportDeclaration);\n\n if (externalModulePath !== undefined) {\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.NamedImport,\n modulePath: externalModulePath,\n exportName: exportName,\n isTypeOnly: false\n });\n }\n\n return this._getExportOfSpecifierAstModule(exportName, exportDeclaration, declarationSymbol);\n }\n }\n\n return undefined;\n }\n\n private _tryMatchImportDeclaration(\n declaration: ts.Declaration,\n declarationSymbol: ts.Symbol\n ): AstEntity | undefined {\n const importDeclaration: ts.ImportDeclaration | undefined =\n TypeScriptHelpers.findFirstParent<ts.ImportDeclaration>(declaration, ts.SyntaxKind.ImportDeclaration);\n\n if (importDeclaration) {\n const externalModulePath: string | undefined = this._tryGetExternalModulePath(importDeclaration);\n\n if (declaration.kind === ts.SyntaxKind.NamespaceImport) {\n // EXAMPLE:\n // \"import * as theLib from 'the-lib';\"\n //\n // ImportDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // ImportClause:\n // NamespaceImport: <------------- declaration\n // AsteriskToken: pre=[*] sep=[ ]\n // AsKeyword: pre=[as] sep=[ ]\n // Identifier: pre=[theLib] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['the-lib']\n // SemicolonToken: pre=[;]\n\n if (externalModulePath === undefined) {\n const astModule: AstModule = this._fetchSpecifierAstModule(importDeclaration, declarationSymbol);\n let namespaceImport: AstNamespaceImport | undefined =\n this._astNamespaceImportByModule.get(astModule);\n if (namespaceImport === undefined) {\n namespaceImport = new AstNamespaceImport({\n namespaceName: declarationSymbol.name,\n astModule: astModule,\n declaration: declaration\n });\n this._astNamespaceImportByModule.set(astModule, namespaceImport);\n }\n return namespaceImport;\n }\n\n // Here importSymbol=undefined because {@inheritDoc} and such are not going to work correctly for\n // a package or source file.\n return this._fetchAstImport(undefined, {\n importKind: AstImportKind.StarImport,\n exportName: declarationSymbol.name,\n modulePath: externalModulePath,\n isTypeOnly: ExportAnalyzer._getIsTypeOnly(importDeclaration)\n });\n }\n\n if (declaration.kind === ts.SyntaxKind.ImportSpecifier) {\n // EXAMPLE:\n // \"import { A, B } from 'the-lib';\"\n //\n // ImportDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // ImportClause:\n // NamedImports:\n // FirstPunctuation: pre=[{] sep=[ ]\n // SyntaxList:\n // ImportSpecifier: <------------- declaration\n // Identifier: pre=[A]\n // CommaToken: pre=[,] sep=[ ]\n // ImportSpecifier:\n // Identifier: pre=[B] sep=[ ]\n // CloseBraceToken: pre=[}] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['the-lib']\n // SemicolonToken: pre=[;]\n\n // Example: \" ExportName as RenamedName\"\n const importSpecifier: ts.ImportSpecifier = declaration as ts.ImportSpecifier;\n const exportName: string = (importSpecifier.propertyName || importSpecifier.name).getText().trim();\n\n if (externalModulePath !== undefined) {\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.NamedImport,\n modulePath: externalModulePath,\n exportName: exportName,\n isTypeOnly: ExportAnalyzer._getIsTypeOnly(importDeclaration)\n });\n }\n\n return this._getExportOfSpecifierAstModule(exportName, importDeclaration, declarationSymbol);\n } else if (declaration.kind === ts.SyntaxKind.ImportClause) {\n // EXAMPLE:\n // \"import A, { B } from './A';\"\n //\n // ImportDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // ImportClause: <------------- declaration (referring to A)\n // Identifier: pre=[A]\n // CommaToken: pre=[,] sep=[ ]\n // NamedImports:\n // FirstPunctuation: pre=[{] sep=[ ]\n // SyntaxList:\n // ImportSpecifier:\n // Identifier: pre=[B] sep=[ ]\n // CloseBraceToken: pre=[}] sep=[ ]\n // FromKeyword: pre=[from] sep=[ ]\n // StringLiteral: pre=['./A']\n // SemicolonToken: pre=[;]\n\n const importClause: ts.ImportClause = declaration as ts.ImportClause;\n const exportName: string = importClause.name\n ? importClause.name.getText().trim()\n : ts.InternalSymbolName.Default;\n\n if (externalModulePath !== undefined) {\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.DefaultImport,\n modulePath: externalModulePath,\n exportName,\n isTypeOnly: ExportAnalyzer._getIsTypeOnly(importDeclaration)\n });\n }\n\n return this._getExportOfSpecifierAstModule(\n ts.InternalSymbolName.Default,\n importDeclaration,\n declarationSymbol\n );\n } else {\n throw new InternalError(\n `Unimplemented import declaration kind: ${declaration.getText()}\\n` +\n SourceFileLocationFormatter.formatDeclaration(declaration)\n );\n }\n }\n\n if (ts.isImportEqualsDeclaration(declaration)) {\n // EXAMPLE:\n // import myLib = require('my-lib');\n //\n // ImportEqualsDeclaration:\n // ImportKeyword: pre=[import] sep=[ ]\n // Identifier: pre=[myLib] sep=[ ]\n // FirstAssignment: pre=[=] sep=[ ]\n // ExternalModuleReference:\n // RequireKeyword: pre=[require]\n // OpenParenToken: pre=[(]\n // StringLiteral: pre=['my-lib']\n // CloseParenToken: pre=[)]\n // SemicolonToken: pre=[;]\n if (ts.isExternalModuleReference(declaration.moduleReference)) {\n if (ts.isStringLiteralLike(declaration.moduleReference.expression)) {\n const variableName: string = TypeScriptInternals.getTextOfIdentifierOrLiteral(declaration.name);\n const externalModuleName: string = TypeScriptInternals.getTextOfIdentifierOrLiteral(\n declaration.moduleReference.expression\n );\n\n return this._fetchAstImport(declarationSymbol, {\n importKind: AstImportKind.EqualsImport,\n modulePath: externalModuleName,\n exportName: variableName,\n isTypeOnly: false\n });\n }\n }\n }\n\n return undefined;\n }\n\n private static _getIsTypeOnly(importDeclaration: ts.ImportDeclaration): boolean {\n if (importDeclaration.importClause) {\n return !!importDeclaration.importClause.isTypeOnly;\n }\n return false;\n }\n\n private _getExportOfSpecifierAstModule(\n exportName: string,\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration,\n exportSymbol: ts.Symbol\n ): AstEntity {\n const specifierAstModule: AstModule = this._fetchSpecifierAstModule(\n importOrExportDeclaration,\n exportSymbol\n );\n const astEntity: AstEntity = this._getExportOfAstModule(exportName, specifierAstModule);\n return astEntity;\n }\n\n private _getExportOfAstModule(exportName: string, astModule: AstModule): AstEntity {\n const visitedAstModules: Set<AstModule> = new Set<AstModule>();\n const astEntity: AstEntity | undefined = this._tryGetExportOfAstModule(\n exportName,\n astModule,\n visitedAstModules\n );\n if (astEntity === undefined) {\n throw new InternalError(\n `Unable to analyze the export ${JSON.stringify(exportName)} in\\n` + astModule.sourceFile.fileName\n );\n }\n return astEntity;\n }\n\n /**\n * Implementation of {@link AstSymbolTable.tryGetExportOfAstModule}.\n */\n public tryGetExportOfAstModule(exportName: string, astModule: AstModule): AstEntity | undefined {\n const visitedAstModules: Set<AstModule> = new Set<AstModule>();\n return this._tryGetExportOfAstModule(exportName, astModule, visitedAstModules);\n }\n\n private _tryGetExportOfAstModule(\n exportName: string,\n astModule: AstModule,\n visitedAstModules: Set<AstModule>\n ): AstEntity | undefined {\n if (visitedAstModules.has(astModule)) {\n return undefined;\n }\n visitedAstModules.add(astModule);\n\n let astEntity: AstEntity | undefined = astModule.cachedExportedEntities.get(exportName);\n if (astEntity !== undefined) {\n return astEntity;\n }\n\n // Try the explicit exports\n const escapedExportName: ts.__String = ts.escapeLeadingUnderscores(exportName);\n if (astModule.moduleSymbol.exports) {\n const exportSymbol: ts.Symbol | undefined = astModule.moduleSymbol.exports.get(escapedExportName);\n if (exportSymbol) {\n astEntity = this.fetchReferencedAstEntity(exportSymbol, astModule.isExternal);\n\n if (astEntity !== undefined) {\n astModule.cachedExportedEntities.set(exportName, astEntity); // cache for next time\n return astEntity;\n }\n }\n }\n\n // Try each of the star imports\n for (const starExportedModule of astModule.starExportedModules) {\n astEntity = this._tryGetExportOfAstModule(exportName, starExportedModule, visitedAstModules);\n\n if (astEntity !== undefined) {\n if (starExportedModule.externalModulePath !== undefined) {\n // This entity was obtained from an external module, so return an AstImport instead\n const astSymbol: AstSymbol = astEntity as AstSymbol;\n return this._fetchAstImport(astSymbol.followedSymbol, {\n importKind: AstImportKind.NamedImport,\n modulePath: starExportedModule.externalModulePath,\n exportName: exportName,\n isTypeOnly: false\n });\n }\n\n return astEntity;\n }\n }\n\n return undefined;\n }\n\n private _tryGetExternalModulePath(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration | ts.ImportTypeNode\n ): string | undefined {\n const moduleSpecifier: string = this._getModuleSpecifier(importOrExportDeclaration);\n if (this._isExternalModulePath(importOrExportDeclaration, moduleSpecifier)) {\n return moduleSpecifier;\n }\n\n return undefined;\n }\n\n /**\n * Given an ImportDeclaration of the form `export { X } from \"___\";`, this interprets the module specifier (`\"___\"`)\n * and fetches the corresponding AstModule object.\n */\n private _fetchSpecifierAstModule(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration,\n exportSymbol: ts.Symbol\n ): AstModule {\n const moduleSpecifier: string = this._getModuleSpecifier(importOrExportDeclaration);\n const mode: ts.ModuleKind.CommonJS | ts.ModuleKind.ESNext | undefined =\n importOrExportDeclaration.moduleSpecifier &&\n ts.isStringLiteralLike(importOrExportDeclaration.moduleSpecifier)\n ? TypeScriptInternals.getModeForUsageLocation(\n importOrExportDeclaration.getSourceFile(),\n importOrExportDeclaration.moduleSpecifier\n )\n : undefined;\n const resolvedModule: ts.ResolvedModuleFull | undefined = TypeScriptInternals.getResolvedModule(\n importOrExportDeclaration.getSourceFile(),\n moduleSpecifier,\n mode\n );\n\n if (resolvedModule === undefined) {\n // Encountered in https://github.com/microsoft/rushstack/issues/1914.\n //\n // It's also possible for this to occur with ambient modules. However, in practice this doesn't happen\n // as API Extractor treats all ambient modules as external per the logic in `_isExternalModulePath`, and\n // thus this code path is never reached for ambient modules.\n throw new InternalError(\n `getResolvedModule() could not resolve module name ${JSON.stringify(moduleSpecifier)}\\n` +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n // Map the filename back to the corresponding SourceFile. This circuitous approach is needed because\n // we have no way to access the compiler's internal resolveExternalModuleName() function\n const moduleSourceFile: ts.SourceFile | undefined = this._program.getSourceFile(\n resolvedModule.resolvedFileName\n );\n if (!moduleSourceFile) {\n // This should not happen, since getResolvedModule() specifically looks up names that the compiler\n // found in export declarations for this source file\n throw new InternalError(\n `getSourceFile() failed to locate ${JSON.stringify(resolvedModule.resolvedFileName)}\\n` +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n const isExternal: boolean = this._isExternalModulePath(importOrExportDeclaration, moduleSpecifier);\n const moduleReference: IAstModuleReference = {\n moduleSpecifier: moduleSpecifier,\n moduleSpecifierSymbol: exportSymbol\n };\n const specifierAstModule: AstModule = this.fetchAstModuleFromSourceFile(\n moduleSourceFile,\n moduleReference,\n isExternal\n );\n\n return specifierAstModule;\n }\n\n private _fetchAstImport(importSymbol: ts.Symbol | undefined, options: IAstImportOptions): AstImport {\n const key: string = AstImport.getKey(options);\n\n let astImport: AstImport | undefined = this._astImportsByKey.get(key);\n\n if (!astImport) {\n astImport = new AstImport(options);\n this._astImportsByKey.set(key, astImport);\n\n if (importSymbol) {\n const followedSymbol: ts.Symbol = TypeScriptHelpers.followAliases(importSymbol, this._typeChecker);\n\n astImport.astSymbol = this._astSymbolTable.fetchAstSymbol({\n followedSymbol: followedSymbol,\n isExternal: true,\n includeNominalAnalysis: false,\n addIfMissing: true\n });\n }\n } else {\n // If we encounter at least one import that does not use the type-only form,\n // then the .d.ts rollup will NOT use \"import type\".\n if (!options.isTypeOnly) {\n astImport.isTypeOnlyEverywhere = false;\n }\n }\n\n return astImport;\n }\n\n private _getModuleSpecifier(\n importOrExportDeclaration: ts.ImportDeclaration | ts.ExportDeclaration | ts.ImportTypeNode\n ): string {\n // The name of the module, which could be like \"./SomeLocalFile' or like 'external-package/entry/point'\n const moduleSpecifier: string | undefined =\n TypeScriptHelpers.getModuleSpecifier(importOrExportDeclaration);\n\n if (!moduleSpecifier) {\n throw new InternalError(\n 'Unable to parse module specifier\\n' +\n SourceFileLocationFormatter.formatDeclaration(importOrExportDeclaration)\n );\n }\n\n return moduleSpecifier;\n }\n}\n"]}
|
|
@@ -33,7 +33,13 @@ export declare class TypeScriptInternals {
|
|
|
33
33
|
* Retrieves the (cached) module resolution information for a module name that was exported from a SourceFile.
|
|
34
34
|
* The compiler populates this cache as part of analyzing the source file.
|
|
35
35
|
*/
|
|
36
|
-
static getResolvedModule(sourceFile: ts.SourceFile, moduleNameText: string): ts.ResolvedModuleFull | undefined;
|
|
36
|
+
static getResolvedModule(sourceFile: ts.SourceFile, moduleNameText: string, mode: ts.ModuleKind.CommonJS | ts.ModuleKind.ESNext | undefined): ts.ResolvedModuleFull | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Gets the mode required for module resolution required with the addition of Node16/nodenext
|
|
39
|
+
*/
|
|
40
|
+
static getModeForUsageLocation(file: {
|
|
41
|
+
impliedNodeFormat?: ts.SourceFile['impliedNodeFormat'];
|
|
42
|
+
}, usage: ts.StringLiteralLike | undefined): ts.ModuleKind.CommonJS | ts.ModuleKind.ESNext | undefined;
|
|
37
43
|
/**
|
|
38
44
|
* Returns ts.Symbol.parent if it exists.
|
|
39
45
|
*/
|
|
@@ -44,5 +50,9 @@ export declare class TypeScriptInternals {
|
|
|
44
50
|
*/
|
|
45
51
|
static tryGetLocalSymbol(declaration: ts.Declaration): ts.Symbol | undefined;
|
|
46
52
|
static getGlobalVariableAnalyzer(program: ts.Program): IGlobalVariableAnalyzer;
|
|
53
|
+
/**
|
|
54
|
+
* Returns whether a variable is declared with the const keyword
|
|
55
|
+
*/
|
|
56
|
+
static isVarConst(node: ts.VariableDeclaration | ts.VariableDeclarationList): boolean;
|
|
47
57
|
}
|
|
48
58
|
//# sourceMappingURL=TypeScriptInternals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeScriptInternals.d.ts","sourceRoot":"","sources":["../../src/analyzer/TypeScriptInternals.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAGjC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,qBAAa,mBAAmB;WAChB,yBAAyB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM;IAMlG;;;;;;;OAOG;WACW,0BAA0B,CACtC,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,EAAE,CAAC,MAAM,GAAG,SAAS;IASxB;;;OAGG;WACW,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,OAAO;IAW3D;;OAEG;WACW,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,YAAY,EAAE,GAAG,SAAS;IAO/F;;OAEG;WACW,4BAA4B,CACxC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,iBAAiB,GAAG,EAAE,CAAC,cAAc,GAC7D,MAAM;IAOT;;;OAGG;WACW,iBAAiB,CAC7B,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"TypeScriptInternals.d.ts","sourceRoot":"","sources":["../../src/analyzer/TypeScriptInternals.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAGjC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,qBAAa,mBAAmB;WAChB,yBAAyB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM;IAMlG;;;;;;;OAOG;WACW,0BAA0B,CACtC,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,EAAE,CAAC,MAAM,GAAG,SAAS;IASxB;;;OAGG;WACW,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,OAAO;IAW3D;;OAEG;WACW,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,YAAY,EAAE,GAAG,SAAS;IAO/F;;OAEG;WACW,4BAA4B,CACxC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,iBAAiB,GAAG,EAAE,CAAC,cAAc,GAC7D,MAAM;IAOT;;;OAGG;WACW,iBAAiB,CAC7B,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,GAC9D,EAAE,CAAC,kBAAkB,GAAG,SAAS;IAOpC;;OAEG;WACW,uBAAuB,CACnC,IAAI,EAAE;QAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAA;KAAE,EAChE,KAAK,EAAE,EAAE,CAAC,iBAAiB,GAAG,SAAS,GACtC,EAAE,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS;IAO5D;;OAEG;WACW,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,SAAS;IAIvE;;;OAGG;WACW,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,GAAG,SAAS;WAIrE,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,uBAAuB;IAmBrF;;OAEG;WACW,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,uBAAuB,GAAG,OAAO;CAI7F"}
|
|
@@ -84,10 +84,19 @@ class TypeScriptInternals {
|
|
|
84
84
|
* Retrieves the (cached) module resolution information for a module name that was exported from a SourceFile.
|
|
85
85
|
* The compiler populates this cache as part of analyzing the source file.
|
|
86
86
|
*/
|
|
87
|
-
static getResolvedModule(sourceFile, moduleNameText) {
|
|
87
|
+
static getResolvedModule(sourceFile, moduleNameText, mode) {
|
|
88
88
|
// Compiler internal:
|
|
89
|
-
// https://github.com/microsoft/TypeScript/blob/
|
|
90
|
-
return ts.getResolvedModule(sourceFile, moduleNameText);
|
|
89
|
+
// https://github.com/microsoft/TypeScript/blob/v4.7.2/src/compiler/utilities.ts#L161
|
|
90
|
+
return ts.getResolvedModule(sourceFile, moduleNameText, mode);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets the mode required for module resolution required with the addition of Node16/nodenext
|
|
94
|
+
*/
|
|
95
|
+
static getModeForUsageLocation(file, usage) {
|
|
96
|
+
// Compiler internal:
|
|
97
|
+
// https://github.com/microsoft/TypeScript/blob/v4.7.2/src/compiler/program.ts#L568
|
|
98
|
+
var _a, _b;
|
|
99
|
+
return (_b = (_a = ts).getModeForUsageLocation) === null || _b === void 0 ? void 0 : _b.call(_a, file, usage);
|
|
91
100
|
}
|
|
92
101
|
/**
|
|
93
102
|
* Returns ts.Symbol.parent if it exists.
|
|
@@ -119,6 +128,13 @@ class TypeScriptInternals {
|
|
|
119
128
|
}
|
|
120
129
|
return resolver;
|
|
121
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Returns whether a variable is declared with the const keyword
|
|
133
|
+
*/
|
|
134
|
+
static isVarConst(node) {
|
|
135
|
+
// Compiler internal: https://github.com/microsoft/TypeScript/blob/71286e3d49c10e0e99faac360a6bbd40f12db7b6/src/compiler/utilities.ts#L925
|
|
136
|
+
return ts.isVarConst(node);
|
|
137
|
+
}
|
|
122
138
|
}
|
|
123
139
|
exports.TypeScriptInternals = TypeScriptInternals;
|
|
124
140
|
//# sourceMappingURL=TypeScriptInternals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeScriptInternals.js","sourceRoot":"","sources":["../../src/analyzer/TypeScriptInternals.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,uDAAuD;AAEvD,+CAAiC;AACjC,oEAA6D;AAS7D,MAAa,mBAAmB;IACvB,MAAM,CAAC,yBAAyB,CAAC,MAAiB,EAAE,WAA2B;QACpF,qBAAqB;QACrB,8EAA8E;QAC9E,OAAQ,WAAmB,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,yDAAyD;IAC1H,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,0BAA0B,CACtC,WAA2B,EAC3B,OAAuB;QAEvB,IAAI,MAAM,GAA2B,WAAmB,CAAC,MAAM,CAAC;QAChE,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YACnE,MAAM,IAAI,GAAmC,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAClF,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;SAChE;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,MAAiB;QAC/C;QACE,sCAAsC;QACtC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS;YACtC,MAAc,CAAC,UAAU,KAAM,EAAU,CAAC,UAAU,CAAC,IAAI,EAC1D;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,qBAAqB,CAAC,IAAa,EAAE,IAAY;QAC7D,qBAAqB;QACrB,qFAAqF;QAErF,OAAQ,EAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,4BAA4B,CACxC,IAA8D;QAE9D,qBAAqB;QACrB,sFAAsF;QAEtF,OAAQ,EAAU,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAC7B,UAAyB,EACzB,cAAsB;
|
|
1
|
+
{"version":3,"file":"TypeScriptInternals.js","sourceRoot":"","sources":["../../src/analyzer/TypeScriptInternals.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 @typescript-eslint/no-explicit-any */\n\nimport * as ts from 'typescript';\nimport { InternalError } from '@rushstack/node-core-library';\n\n/**\n * Exposes the TypeScript compiler internals for detecting global variable names.\n */\nexport interface IGlobalVariableAnalyzer {\n hasGlobalName(name: string): boolean;\n}\n\nexport class TypeScriptInternals {\n public static getImmediateAliasedSymbol(symbol: ts.Symbol, typeChecker: ts.TypeChecker): ts.Symbol {\n // Compiler internal:\n // https://github.com/microsoft/TypeScript/blob/v3.2.2/src/compiler/checker.ts\n return (typeChecker as any).getImmediateAliasedSymbol(symbol); // eslint-disable-line @typescript-eslint/no-explicit-any\n }\n\n /**\n * Returns the Symbol for the provided Declaration. This is a workaround for a missing\n * feature of the TypeScript Compiler API. It is the only apparent way to reach\n * certain data structures, and seems to always work, but is not officially documented.\n *\n * @returns The associated Symbol. If there is no semantic information (e.g. if the\n * declaration is an extra semicolon somewhere), then \"undefined\" is returned.\n */\n public static tryGetSymbolForDeclaration(\n declaration: ts.Declaration,\n checker: ts.TypeChecker\n ): ts.Symbol | undefined {\n let symbol: ts.Symbol | undefined = (declaration as any).symbol;\n if (symbol && symbol.escapedName === ts.InternalSymbolName.Computed) {\n const name: ts.DeclarationName | undefined = ts.getNameOfDeclaration(declaration);\n symbol = (name && checker.getSymbolAtLocation(name)) || symbol;\n }\n return symbol;\n }\n\n /**\n * Returns whether the provided Symbol is a TypeScript \"late-bound\" Symbol (i.e. was created by the Checker\n * for a computed property based on its type, rather than by the Binder).\n */\n public static isLateBoundSymbol(symbol: ts.Symbol): boolean {\n if (\n // eslint-disable-next-line no-bitwise\n symbol.flags & ts.SymbolFlags.Transient &&\n (symbol as any).checkFlags === (ts as any).CheckFlags.Late\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Retrieves the comment ranges associated with the specified node.\n */\n public static getJSDocCommentRanges(node: ts.Node, text: string): ts.CommentRange[] | undefined {\n // Compiler internal:\n // https://github.com/microsoft/TypeScript/blob/v2.4.2/src/compiler/utilities.ts#L616\n\n return (ts as any).getJSDocCommentRanges.apply(this, arguments);\n }\n\n /**\n * Retrieves the (unescaped) value of an string literal, numeric literal, or identifier.\n */\n public static getTextOfIdentifierOrLiteral(\n node: ts.Identifier | ts.StringLiteralLike | ts.NumericLiteral\n ): string {\n // Compiler internal:\n // https://github.com/microsoft/TypeScript/blob/v3.2.2/src/compiler/utilities.ts#L2721\n\n return (ts as any).getTextOfIdentifierOrLiteral(node);\n }\n\n /**\n * Retrieves the (cached) module resolution information for a module name that was exported from a SourceFile.\n * The compiler populates this cache as part of analyzing the source file.\n */\n public static getResolvedModule(\n sourceFile: ts.SourceFile,\n moduleNameText: string,\n mode: ts.ModuleKind.CommonJS | ts.ModuleKind.ESNext | undefined\n ): ts.ResolvedModuleFull | undefined {\n // Compiler internal:\n // https://github.com/microsoft/TypeScript/blob/v4.7.2/src/compiler/utilities.ts#L161\n\n return (ts as any).getResolvedModule(sourceFile, moduleNameText, mode);\n }\n\n /**\n * Gets the mode required for module resolution required with the addition of Node16/nodenext\n */\n public static getModeForUsageLocation(\n file: { impliedNodeFormat?: ts.SourceFile['impliedNodeFormat'] },\n usage: ts.StringLiteralLike | undefined\n ): ts.ModuleKind.CommonJS | ts.ModuleKind.ESNext | undefined {\n // Compiler internal:\n // https://github.com/microsoft/TypeScript/blob/v4.7.2/src/compiler/program.ts#L568\n\n return (ts as any).getModeForUsageLocation?.(file, usage);\n }\n\n /**\n * Returns ts.Symbol.parent if it exists.\n */\n public static getSymbolParent(symbol: ts.Symbol): ts.Symbol | undefined {\n return (symbol as any).parent;\n }\n\n /**\n * In an statement like `export default class X { }`, the `Symbol.name` will be `default`\n * whereas the `localSymbol` is `X`.\n */\n public static tryGetLocalSymbol(declaration: ts.Declaration): ts.Symbol | undefined {\n return (declaration as any).localSymbol;\n }\n\n public static getGlobalVariableAnalyzer(program: ts.Program): IGlobalVariableAnalyzer {\n const anyProgram: any = program;\n const typeCheckerInstance: any =\n anyProgram.getDiagnosticsProducingTypeChecker ?? anyProgram.getTypeChecker;\n\n if (!typeCheckerInstance) {\n throw new InternalError('Missing Program.getDiagnosticsProducingTypeChecker or Program.getTypeChecker');\n }\n const typeChecker: any = typeCheckerInstance();\n if (!typeChecker.getEmitResolver) {\n throw new InternalError('Missing TypeChecker.getEmitResolver');\n }\n const resolver: any = typeChecker.getEmitResolver();\n if (!resolver.hasGlobalName) {\n throw new InternalError('Missing EmitResolver.hasGlobalName');\n }\n return resolver;\n }\n\n /**\n * Returns whether a variable is declared with the const keyword\n */\n public static isVarConst(node: ts.VariableDeclaration | ts.VariableDeclarationList): boolean {\n // Compiler internal: https://github.com/microsoft/TypeScript/blob/71286e3d49c10e0e99faac360a6bbd40f12db7b6/src/compiler/utilities.ts#L925\n return (ts as any).isVarConst(node);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiModelGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/ApiModelGenerator.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,QAAQ,EAER,UAAU,EAuBX,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiModelGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/ApiModelGenerator.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,QAAQ,EAER,UAAU,EAuBX,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAYnD,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;IAYvC,IAAW,QAAQ,IAAI,QAAQ,CAE9B;IAEM,eAAe,IAAI,UAAU;IAuBpC,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,mBAAmB;IA6F3B,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,wBAAwB;IAkDhC,OAAO,CAAC,sBAAsB;IA0C9B,OAAO,CAAC,gBAAgB;IA2DxB,OAAO,CAAC,6BAA6B;IAkDrC,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,mBAAmB;IAsD3B,OAAO,CAAC,yBAAyB;IA4CjC,OAAO,CAAC,oBAAoB;IAuD5B,OAAO,CAAC,iBAAiB;IA4DzB,OAAO,CAAC,0BAA0B;IAuDlC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,mBAAmB;IA4D3B,OAAO,CAAC,4BAA4B;IA6CpC,OAAO,CAAC,oBAAoB;IA6C5B,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,kBAAkB;CAiB3B"}
|
|
@@ -33,6 +33,7 @@ const ExcerptBuilder_1 = require("./ExcerptBuilder");
|
|
|
33
33
|
const AstSymbol_1 = require("../analyzer/AstSymbol");
|
|
34
34
|
const DeclarationReferenceGenerator_1 = require("./DeclarationReferenceGenerator");
|
|
35
35
|
const AstNamespaceImport_1 = require("../analyzer/AstNamespaceImport");
|
|
36
|
+
const TypeScriptInternals_1 = require("../analyzer/TypeScriptInternals");
|
|
36
37
|
class ApiModelGenerator {
|
|
37
38
|
constructor(collector) {
|
|
38
39
|
this._collector = collector;
|
|
@@ -219,9 +220,11 @@ class ApiModelGenerator {
|
|
|
219
220
|
const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
|
|
220
221
|
const docComment = apiItemMetadata.tsdocComment;
|
|
221
222
|
const releaseTag = apiItemMetadata.effectiveReleaseTag;
|
|
223
|
+
const isProtected = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;
|
|
222
224
|
apiConstructor = new api_extractor_model_1.ApiConstructor({
|
|
223
225
|
docComment,
|
|
224
226
|
releaseTag,
|
|
227
|
+
isProtected,
|
|
225
228
|
parameters,
|
|
226
229
|
overloadIndex,
|
|
227
230
|
excerptTokens
|
|
@@ -447,10 +450,12 @@ class ApiModelGenerator {
|
|
|
447
450
|
return; // trim out items marked as "@internal" or "@alpha"
|
|
448
451
|
}
|
|
449
452
|
const isOptional = (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;
|
|
453
|
+
const isProtected = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;
|
|
450
454
|
apiMethod = new api_extractor_model_1.ApiMethod({
|
|
451
455
|
name,
|
|
452
456
|
docComment,
|
|
453
457
|
releaseTag,
|
|
458
|
+
isProtected,
|
|
454
459
|
isStatic,
|
|
455
460
|
isOptional,
|
|
456
461
|
typeParameters,
|
|
@@ -530,12 +535,16 @@ class ApiModelGenerator {
|
|
|
530
535
|
const docComment = apiItemMetadata.tsdocComment;
|
|
531
536
|
const releaseTag = apiItemMetadata.effectiveReleaseTag;
|
|
532
537
|
const isOptional = (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;
|
|
538
|
+
const isProtected = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;
|
|
539
|
+
const isReadonly = this._determineReadonly(astDeclaration);
|
|
533
540
|
apiProperty = new api_extractor_model_1.ApiProperty({
|
|
534
541
|
name,
|
|
535
542
|
docComment,
|
|
536
543
|
releaseTag,
|
|
544
|
+
isProtected,
|
|
537
545
|
isStatic,
|
|
538
546
|
isOptional,
|
|
547
|
+
isReadonly,
|
|
539
548
|
excerptTokens,
|
|
540
549
|
propertyTypeTokenRange
|
|
541
550
|
});
|
|
@@ -560,13 +569,15 @@ class ApiModelGenerator {
|
|
|
560
569
|
const docComment = apiItemMetadata.tsdocComment;
|
|
561
570
|
const releaseTag = apiItemMetadata.effectiveReleaseTag;
|
|
562
571
|
const isOptional = (astDeclaration.astSymbol.followedSymbol.flags & ts.SymbolFlags.Optional) !== 0;
|
|
572
|
+
const isReadonly = this._determineReadonly(astDeclaration);
|
|
563
573
|
apiPropertySignature = new api_extractor_model_1.ApiPropertySignature({
|
|
564
574
|
name,
|
|
565
575
|
docComment,
|
|
566
576
|
releaseTag,
|
|
567
577
|
isOptional,
|
|
568
578
|
excerptTokens,
|
|
569
|
-
propertyTypeTokenRange
|
|
579
|
+
propertyTypeTokenRange,
|
|
580
|
+
isReadonly
|
|
570
581
|
});
|
|
571
582
|
parentApiItem.addMember(apiPropertySignature);
|
|
572
583
|
}
|
|
@@ -613,7 +624,15 @@ class ApiModelGenerator {
|
|
|
613
624
|
const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
|
|
614
625
|
const docComment = apiItemMetadata.tsdocComment;
|
|
615
626
|
const releaseTag = apiItemMetadata.effectiveReleaseTag;
|
|
616
|
-
|
|
627
|
+
const isReadonly = this._determineReadonly(astDeclaration);
|
|
628
|
+
apiVariable = new api_extractor_model_1.ApiVariable({
|
|
629
|
+
name,
|
|
630
|
+
docComment,
|
|
631
|
+
releaseTag,
|
|
632
|
+
excerptTokens,
|
|
633
|
+
variableTypeTokenRange,
|
|
634
|
+
isReadonly
|
|
635
|
+
});
|
|
617
636
|
parentApiItem.addMember(apiVariable);
|
|
618
637
|
}
|
|
619
638
|
}
|
|
@@ -662,6 +681,21 @@ class ApiModelGenerator {
|
|
|
662
681
|
}
|
|
663
682
|
return parameters;
|
|
664
683
|
}
|
|
684
|
+
_determineReadonly(astDeclaration) {
|
|
685
|
+
const apiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
|
|
686
|
+
const docComment = apiItemMetadata.tsdocComment;
|
|
687
|
+
const declarationMetadata = this._collector.fetchDeclarationMetadata(astDeclaration);
|
|
688
|
+
//Line 1: sees whether the readonly or const modifiers are present
|
|
689
|
+
//Line 2: sees if the TSDoc comment for @readonly is present
|
|
690
|
+
//Line 3: sees whether a getter is present for a property with no setter
|
|
691
|
+
//Line 4: sees if the var declaration has Const keyword
|
|
692
|
+
return ((astDeclaration.modifierFlags & (ts.ModifierFlags.Readonly + ts.ModifierFlags.Const)) !== 0 ||
|
|
693
|
+
(docComment !== undefined && docComment.modifierTagSet.hasTagName('@readonly')) ||
|
|
694
|
+
(declarationMetadata.ancillaryDeclarations.length === 0 &&
|
|
695
|
+
astDeclaration.declaration.kind === ts.SyntaxKind.GetAccessor) ||
|
|
696
|
+
(ts.isVariableDeclaration(astDeclaration.declaration) &&
|
|
697
|
+
TypeScriptInternals_1.TypeScriptInternals.isVarConst(astDeclaration.declaration)));
|
|
698
|
+
}
|
|
665
699
|
}
|
|
666
700
|
exports.ApiModelGenerator = ApiModelGenerator;
|
|
667
701
|
//# 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} 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';\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(\n collector.packageJsonLookup,\n collector.workingPackage.name,\n collector.program,\n collector.typeChecker,\n collector.bundledPackageNames\n );\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 // Create a CollectorEntity for each top-level export\n for (const entity of this._collector.entities) {\n if (entity.exported) {\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._processAstModule(astEntity.astModule, 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 _processAstModule(\n astModule: AstModule,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astModule.moduleSymbol.name;\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 });\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\n apiConstructor = new ApiConstructor({\n docComment,\n releaseTag,\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\n apiClass = new ApiClass({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRange,\n implementsTokenRanges\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\n apiEnum = new ApiEnum({ name, docComment, releaseTag, excerptTokens });\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 const initializerTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: enumMember.initializer, tokenRange: initializerTokenRange });\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 if (releaseTag === ReleaseTag.Internal || releaseTag === ReleaseTag.Alpha) {\n return; // trim out items marked as \"@internal\" or \"@alpha\"\n }\n\n apiFunction = new ApiFunction({\n name,\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\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\n apiIndexSignature = new ApiIndexSignature({\n docComment,\n releaseTag,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\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\n apiInterface = new ApiInterface({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRanges\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\n apiMethod = new ApiMethod({\n name,\n docComment,\n releaseTag,\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\n apiNamespace = new ApiNamespace({ name, docComment, releaseTag, excerptTokens });\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 nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const propertyTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n let propertyTypeNode: ts.TypeNode | undefined;\n\n if (\n ts.isPropertyDeclaration(astDeclaration.declaration) ||\n ts.isGetAccessorDeclaration(astDeclaration.declaration)\n ) {\n propertyTypeNode = astDeclaration.declaration.type;\n }\n\n if (ts.isSetAccessorDeclaration(astDeclaration.declaration)) {\n // Note that TypeScript always reports an error if a setter does not have exactly one parameter.\n propertyTypeNode = astDeclaration.declaration.parameters[0].type;\n }\n\n nodesToCapture.push({ node: propertyTypeNode, 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\n apiProperty = new ApiProperty({\n name,\n docComment,\n releaseTag,\n isStatic,\n isOptional,\n excerptTokens,\n propertyTypeTokenRange\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\n apiPropertySignature = new ApiPropertySignature({\n name,\n docComment,\n releaseTag,\n isOptional,\n excerptTokens,\n propertyTypeTokenRange\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\n apiTypeAlias = new ApiTypeAlias({\n name,\n docComment,\n typeParameters,\n releaseTag,\n excerptTokens,\n typeTokenRange\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 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 apiVariable = new ApiVariable({ name, docComment, releaseTag, excerptTokens, variableTypeTokenRange });\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"]}
|
|
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} 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\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(\n collector.packageJsonLookup,\n collector.workingPackage.name,\n collector.program,\n collector.typeChecker,\n collector.bundledPackageNames\n );\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 // Create a CollectorEntity for each top-level export\n for (const entity of this._collector.entities) {\n if (entity.exported) {\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._processAstModule(astEntity.astModule, 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 _processAstModule(\n astModule: AstModule,\n exportedName: string | undefined,\n parentApiItem: ApiItemContainerMixin\n ): void {\n const name: string = exportedName ? exportedName : astModule.moduleSymbol.name;\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 });\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\n apiClass = new ApiClass({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRange,\n implementsTokenRanges\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\n apiEnum = new ApiEnum({ name, docComment, releaseTag, excerptTokens });\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 const initializerTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n nodesToCapture.push({ node: enumMember.initializer, tokenRange: initializerTokenRange });\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 if (releaseTag === ReleaseTag.Internal || releaseTag === ReleaseTag.Alpha) {\n return; // trim out items marked as \"@internal\" or \"@alpha\"\n }\n\n apiFunction = new ApiFunction({\n name,\n docComment,\n releaseTag,\n typeParameters,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\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\n apiIndexSignature = new ApiIndexSignature({\n docComment,\n releaseTag,\n parameters,\n overloadIndex,\n excerptTokens,\n returnTypeTokenRange\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\n apiInterface = new ApiInterface({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n typeParameters,\n extendsTokenRanges\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\n apiNamespace = new ApiNamespace({ name, docComment, releaseTag, excerptTokens });\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 nodesToCapture: IExcerptBuilderNodeToCapture[] = [];\n\n const propertyTypeTokenRange: IExcerptTokenRange = ExcerptBuilder.createEmptyTokenRange();\n let propertyTypeNode: ts.TypeNode | undefined;\n\n if (\n ts.isPropertyDeclaration(astDeclaration.declaration) ||\n ts.isGetAccessorDeclaration(astDeclaration.declaration)\n ) {\n propertyTypeNode = astDeclaration.declaration.type;\n }\n\n if (ts.isSetAccessorDeclaration(astDeclaration.declaration)) {\n // Note that TypeScript always reports an error if a setter does not have exactly one parameter.\n propertyTypeNode = astDeclaration.declaration.parameters[0].type;\n }\n\n nodesToCapture.push({ node: propertyTypeNode, 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 isProtected: boolean = (astDeclaration.modifierFlags & ts.ModifierFlags.Protected) !== 0;\n const isReadonly: boolean = this._determineReadonly(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 });\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._determineReadonly(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\n apiTypeAlias = new ApiTypeAlias({\n name,\n docComment,\n typeParameters,\n releaseTag,\n excerptTokens,\n typeTokenRange\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 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._determineReadonly(astDeclaration);\n\n apiVariable = new ApiVariable({\n name,\n docComment,\n releaseTag,\n excerptTokens,\n variableTypeTokenRange,\n isReadonly\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 _determineReadonly(astDeclaration: AstDeclaration): boolean {\n const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);\n const docComment: tsdoc.DocComment | undefined = apiItemMetadata.tsdocComment;\n const declarationMetadata: DeclarationMetadata = this._collector.fetchDeclarationMetadata(astDeclaration);\n //Line 1: sees whether the readonly or const modifiers are present\n //Line 2: sees if the TSDoc comment for @readonly is present\n //Line 3: sees whether a getter is present for a property with no setter\n //Line 4: sees if the var declaration has Const keyword\n return (\n (astDeclaration.modifierFlags & (ts.ModifierFlags.Readonly + ts.ModifierFlags.Const)) !== 0 ||\n (docComment !== undefined && docComment.modifierTagSet.hasTagName('@readonly')) ||\n (declarationMetadata.ancillaryDeclarations.length === 0 &&\n astDeclaration.declaration.kind === ts.SyntaxKind.GetAccessor) ||\n (ts.isVariableDeclaration(astDeclaration.declaration) &&\n TypeScriptInternals.isVarConst(astDeclaration.declaration))\n );\n }\n}\n"]}
|
|
@@ -133,9 +133,9 @@
|
|
|
133
133
|
* prepend a folder token such as "<projectFolder>".
|
|
134
134
|
*
|
|
135
135
|
* SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>
|
|
136
|
-
* DEFAULT VALUE: "<projectFolder>/
|
|
136
|
+
* DEFAULT VALUE: "<projectFolder>/temp/"
|
|
137
137
|
*/
|
|
138
|
-
// "reportFolder": "<projectFolder>/
|
|
138
|
+
// "reportFolder": "<projectFolder>/temp/",
|
|
139
139
|
|
|
140
140
|
/**
|
|
141
141
|
* Specifies the folder where the temporary report file is written. The file name portion is determined by
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/api-extractor",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.25.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",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
},
|
|
33
33
|
"license": "MIT",
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@microsoft/api-extractor-model": "7.
|
|
35
|
+
"@microsoft/api-extractor-model": "7.18.1",
|
|
36
36
|
"@microsoft/tsdoc": "0.14.1",
|
|
37
37
|
"@microsoft/tsdoc-config": "~0.16.1",
|
|
38
|
-
"@rushstack/node-core-library": "3.45.
|
|
39
|
-
"@rushstack/rig-package": "0.3.
|
|
40
|
-
"@rushstack/ts-command-line": "4.11.
|
|
38
|
+
"@rushstack/node-core-library": "3.45.6",
|
|
39
|
+
"@rushstack/rig-package": "0.3.12",
|
|
40
|
+
"@rushstack/ts-command-line": "4.11.1",
|
|
41
41
|
"colors": "~1.2.1",
|
|
42
42
|
"lodash": "~4.17.15",
|
|
43
43
|
"resolve": "~1.17.0",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"typescript": "~4.6.3"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@rushstack/eslint-config": "2.6.
|
|
50
|
-
"@rushstack/heft": "0.45.
|
|
51
|
-
"@rushstack/heft-node-rig": "1.9.
|
|
49
|
+
"@rushstack/eslint-config": "2.6.1",
|
|
50
|
+
"@rushstack/heft": "0.45.6",
|
|
51
|
+
"@rushstack/heft-node-rig": "1.9.7",
|
|
52
52
|
"@types/heft-jest": "1.0.1",
|
|
53
53
|
"@types/lodash": "4.14.116",
|
|
54
54
|
"@types/node": "12.20.24",
|