@microsoft/api-extractor 7.29.1 → 7.29.2
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.
|
@@ -23,6 +23,7 @@ export declare class DeclarationReferenceGenerator {
|
|
|
23
23
|
private static _getNavigationToSymbol;
|
|
24
24
|
private static _getMeaningOfSymbol;
|
|
25
25
|
private _symbolToDeclarationReference;
|
|
26
|
+
private _getParentReference;
|
|
26
27
|
private _getPackageName;
|
|
27
28
|
private _sourceFileToModuleSource;
|
|
28
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeclarationReferenceGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/DeclarationReferenceGenerator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,oBAAoB,EAKrB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAmC,MAAM,8BAA8B,CAAC;AAIlG,qBAAa,6BAA6B;IACxC,gBAAuB,gBAAgB,EAAE,MAAM,CAAO;IAEtD,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,oBAAoB,CAAsB;gBAGhD,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC;IAS1C;;OAEG;IACI,oCAAoC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,oBAAoB,GAAG,SAAS;IAkBlG;;OAEG;IACI,gCAAgC,CACrC,MAAM,EAAE,EAAE,CAAC,MAAM,EACjB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,oBAAoB,GAAG,SAAS;IAInC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAWrC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAQtC,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiErC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAiDlC,OAAO,CAAC,6BAA6B;
|
|
1
|
+
{"version":3,"file":"DeclarationReferenceGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/DeclarationReferenceGenerator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,oBAAoB,EAKrB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAmC,MAAM,8BAA8B,CAAC;AAIlG,qBAAa,6BAA6B;IACxC,gBAAuB,gBAAgB,EAAE,MAAM,CAAO;IAEtD,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,oBAAoB,CAAsB;gBAGhD,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC;IAS1C;;OAEG;IACI,oCAAoC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,oBAAoB,GAAG,SAAS;IAkBlG;;OAEG;IACI,gCAAgC,CACrC,MAAM,EAAE,EAAE,CAAC,MAAM,EACjB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,oBAAoB,GAAG,SAAS;IAInC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAWrC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAQtC,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiErC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAiDlC,OAAO,CAAC,6BAA6B;IAuErC,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,yBAAyB;CAelC"}
|
|
@@ -195,34 +195,16 @@ class DeclarationReferenceGenerator {
|
|
|
195
195
|
if (!includeModuleSymbols) {
|
|
196
196
|
return undefined;
|
|
197
197
|
}
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
followedSymbol.declarations[0].getSourceFile();
|
|
198
|
+
const declaration = TypeScriptHelpers_1.TypeScriptHelpers.tryGetADeclaration(symbol);
|
|
199
|
+
const sourceFile = declaration === null || declaration === void 0 ? void 0 : declaration.getSourceFile();
|
|
201
200
|
return new DeclarationReference_1.DeclarationReference(this._sourceFileToModuleSource(sourceFile));
|
|
202
201
|
}
|
|
203
202
|
// Do not generate a declaration reference for a type parameter.
|
|
204
203
|
if (followedSymbol.flags & ts.SymbolFlags.TypeParameter) {
|
|
205
204
|
return undefined;
|
|
206
205
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
if (parent) {
|
|
210
|
-
parentRef = this._symbolToDeclarationReference(parent, ts.SymbolFlags.Namespace,
|
|
211
|
-
/*includeModuleSymbols*/ true);
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
// this may be a local symbol in a module...
|
|
215
|
-
const sourceFile = followedSymbol.declarations &&
|
|
216
|
-
followedSymbol.declarations[0] &&
|
|
217
|
-
followedSymbol.declarations[0].getSourceFile();
|
|
218
|
-
if (sourceFile && ts.isExternalModule(sourceFile)) {
|
|
219
|
-
parentRef = new DeclarationReference_1.DeclarationReference(this._sourceFileToModuleSource(sourceFile));
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
parentRef = new DeclarationReference_1.DeclarationReference(DeclarationReference_1.GlobalSource.instance);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
if (parentRef === undefined) {
|
|
206
|
+
let parentRef = this._getParentReference(followedSymbol);
|
|
207
|
+
if (!parentRef) {
|
|
226
208
|
return undefined;
|
|
227
209
|
}
|
|
228
210
|
let localName = followedSymbol.name;
|
|
@@ -260,6 +242,44 @@ class DeclarationReferenceGenerator {
|
|
|
260
242
|
.addNavigationStep(navigation, localName)
|
|
261
243
|
.withMeaning(DeclarationReferenceGenerator._getMeaningOfSymbol(followedSymbol, meaning));
|
|
262
244
|
}
|
|
245
|
+
_getParentReference(symbol) {
|
|
246
|
+
var _a;
|
|
247
|
+
const declaration = TypeScriptHelpers_1.TypeScriptHelpers.tryGetADeclaration(symbol);
|
|
248
|
+
// First, try to find a parent symbol via the symbol tree.
|
|
249
|
+
const parentSymbol = TypeScriptInternals_1.TypeScriptInternals.getSymbolParent(symbol);
|
|
250
|
+
if (parentSymbol) {
|
|
251
|
+
return this._symbolToDeclarationReference(parentSymbol, parentSymbol.flags,
|
|
252
|
+
/*includeModuleSymbols*/ true);
|
|
253
|
+
}
|
|
254
|
+
// If that doesn't work, try to find a parent symbol via the node tree. As far as we can tell,
|
|
255
|
+
// this logic is only needed for local symbols within namespaces. For example:
|
|
256
|
+
//
|
|
257
|
+
// ```
|
|
258
|
+
// export namespace n {
|
|
259
|
+
// type SomeType = number;
|
|
260
|
+
// export function someFunction(): SomeType { return 5; }
|
|
261
|
+
// }
|
|
262
|
+
// ```
|
|
263
|
+
//
|
|
264
|
+
// In the example above, `SomeType` doesn't have a parent symbol per the TS internal API above,
|
|
265
|
+
// but its reference still needs to be qualified with the parent reference for `n`.
|
|
266
|
+
const grandParent = (_a = declaration === null || declaration === void 0 ? void 0 : declaration.parent) === null || _a === void 0 ? void 0 : _a.parent;
|
|
267
|
+
if (grandParent && ts.isModuleDeclaration(grandParent)) {
|
|
268
|
+
const grandParentSymbol = TypeScriptInternals_1.TypeScriptInternals.tryGetSymbolForDeclaration(grandParent, this._typeChecker);
|
|
269
|
+
if (grandParentSymbol) {
|
|
270
|
+
return this._symbolToDeclarationReference(grandParentSymbol, grandParentSymbol.flags,
|
|
271
|
+
/*includeModuleSymbols*/ true);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// At this point, we have a local symbol in a module.
|
|
275
|
+
const sourceFile = declaration === null || declaration === void 0 ? void 0 : declaration.getSourceFile();
|
|
276
|
+
if (sourceFile && ts.isExternalModule(sourceFile)) {
|
|
277
|
+
return new DeclarationReference_1.DeclarationReference(this._sourceFileToModuleSource(sourceFile));
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
return new DeclarationReference_1.DeclarationReference(DeclarationReference_1.GlobalSource.instance);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
263
283
|
_getPackageName(sourceFile) {
|
|
264
284
|
if (this._program.isSourceFileFromExternalLibrary(sourceFile)) {
|
|
265
285
|
const packageJson = this._packageJsonLookup.tryLoadNodePackageJsonFor(sourceFile.fileName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeclarationReferenceGenerator.js","sourceRoot":"","sources":["../../src/generators/DeclarationReferenceGenerator.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,+BAA+B;AAC/B,+CAAiC;AACjC,kGAMiE;AACjE,oEAAkG;AAClG,qEAAkE;AAClE,yEAAsE;AAEtE,MAAa,6BAA6B;IASxC,YACE,iBAAoC,EACpC,kBAA0B,EAC1B,OAAmB,EACnB,WAA2B,EAC3B,mBAAwC;QAExC,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,oCAAoC,CAAC,IAAmB;QAC7D,MAAM,MAAM,GAA0B,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAClF,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,YAAY,GAAY,6BAA6B,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YACzF,OAAO,CACL,IAAI,CAAC,gCAAgC,CACnC,MAAM,EACN,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAC1D;gBACD,IAAI,CAAC,gCAAgC,CACnC,MAAM,EACN,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAC1D;gBACD,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CACxE,CAAC;SACH;IACH,CAAC;IAED;;OAEG;IACI,gCAAgC,CACrC,MAAiB,EACjB,OAAuB;QAEvB,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,EAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC7F,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,IAAa;QACjD,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACxB,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS;gBAC1B,OAAO,IAAI,CAAC;YACd,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;gBAC9B,OAAO,6BAA6B,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E;gBACE,OAAO,KAAK,CAAC;SAChB;IACH,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,MAAiB;QACtD,OAAO,CACL,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;YAC7C,MAAM,CAAC,gBAAgB,KAAK,SAAS;YACrC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACzC,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,IAA2B,EAAE,KAAgB;QACxE,OAAO,CACL,IAAI,KAAK,KAAK;YACd,CAAC,CAAC,CACA,IAAI;gBACJ,IAAI,CAAC,gBAAgB;gBACrB,KAAK,CAAC,gBAAgB;gBACtB,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB,CACjD,CACF,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,MAAiB;QACrD,MAAM,MAAM,GAA0B,yCAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAClF,+DAA+D;QAC/D,IAAI,MAAM,EAAE;YACV,IACE,MAAM,CAAC,OAAO;gBACd,6BAA6B,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAC3F;gBACA,oCAA0B;aAC3B;YACD,IACE,MAAM,CAAC,OAAO;gBACd,6BAA6B,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAC3F;gBACA,oCAA0B;aAC3B;YACD,IACE,MAAM,CAAC,aAAa;gBACpB,6BAA6B,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EACjG;gBACA,OAAO,QAAQ,CAAC;aACjB;SACF;QAED,yDAAyD;QACzD,IAAI,MAAM,CAAC,gBAAgB,EAAE;YAC3B,MAAM,WAAW,GAAmB,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC9E,CAAC,CAAC,EAAE,CAAC,gCAAgC,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC9D,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC5B,IAAI,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;gBACxE,kEAAkE;gBAClE,OAAO,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM;oBACvE,CAAC;oBACD,CAAC,6BAAmB,CAAC;aACxB;YACD,IAAI,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE;gBAC3E,2DAA2D;gBAC3D,oCAA0B;aAC3B;YACD,IAAI,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;gBAChC,2BAA2B;gBAC3B,oCAA0B;aAC3B;YACD,IACE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC;gBACjC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC;gBAClC,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC;gBACjC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC;gBACnC,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,EAC9B;gBACA,oCAA0B;aAC3B;YACD,8DAA8D;YAC9D,IAAI,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE;gBACtE,oCAA0B;aAC3B;YACD,IAAI,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;gBACnF,+EAA+E;gBAC/E,OAAO,QAAQ,CAAC;aACjB;SACF;QACD,oCAAoC;QACpC,mCAAyB;IAC3B,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,MAAiB,EAAE,OAAuB;QAC3E,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE;YACjD,mCAAqB;SACtB;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;YAChD,iCAAoB;SACrB;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE;YACrD,2CAAyB;SAC1B;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE;YACrD,sCAAyB;SAC1B;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE;YACpD,yCAAwB;SACzB;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE;YACpD,oCAAwB;SACzB;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE;YAClD,2CAAyB;SAC1B;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE;YACvD,qCAAsB;SACvB;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE;YACvD,+CAA2B;SAC5B;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE;YACtD,qCAAsB;SACvB;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE;YACrD,IAAI,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE;gBACrD,0CAA6B;aAC9B;YACD,IAAI,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBACpD,8CAAkC;aACnC;YACD,IAAI,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE;gBACtD,4CAA8B;aAC/B;SACF;QACD,IAAI,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE;YACzD,8EAA8E;YAC9E,MAAM,IAAI,iCAAa,CAAC,gBAAgB,CAAC,CAAC;SAC3C;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,6BAA6B,CACnC,MAAiB,EACjB,OAAuB,EACvB,oBAA6B;QAE7B,IAAI,cAAc,GAAc,MAAM,CAAC;QACvC,IAAI,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE;YACrD,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;SAC5E;QACD,IAAI,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE;YAC/C,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;SACrE;QAED,IAAI,6BAA6B,CAAC,uBAAuB,CAAC,cAAc,CAAC,EAAE;YACzE,IAAI,CAAC,oBAAoB,EAAE;gBACzB,OAAO,SAAS,CAAC;aAClB;YACD,MAAM,UAAU,GACd,cAAc,CAAC,YAAY;gBAC3B,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC9B,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YACjD,OAAO,IAAI,2CAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;SAC7E;QAED,gEAAgE;QAChE,IAAI,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE;YACvD,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,MAAM,GAA0B,yCAAmB,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC1F,IAAI,SAA2C,CAAC;QAChD,IAAI,MAAM,EAAE;YACV,SAAS,GAAG,IAAI,CAAC,6BAA6B,CAC5C,MAAM,EACN,EAAE,CAAC,WAAW,CAAC,SAAS;YACxB,wBAAwB,CAAC,IAAI,CAC9B,CAAC;SACH;aAAM;YACL,4CAA4C;YAC5C,MAAM,UAAU,GACd,cAAc,CAAC,YAAY;gBAC3B,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC9B,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YACjD,IAAI,UAAU,IAAI,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;gBACjD,SAAS,GAAG,IAAI,2CAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;aAClF;iBAAM;gBACL,SAAS,GAAG,IAAI,2CAAoB,CAAC,mCAAY,CAAC,QAAQ,CAAC,CAAC;aAC7D;SACF;QAED,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,SAAS,GAAW,cAAc,CAAC,IAAI,CAAC;QAC5C,IAAI,cAAc,CAAC,WAAW,KAAK,EAAE,CAAC,kBAAkB,CAAC,WAAW,EAAE;YACpE,SAAS,GAAG,aAAa,CAAC;SAC3B;aAAM;YACL,MAAM,aAAa,GAAuB,qCAAiB,CAAC,4BAA4B,CACtF,cAAc,CAAC,WAAW,CAC3B,CAAC;YACF,IAAI,aAAa,EAAE;gBACjB,0FAA0F;gBAC1F,wFAAwF;gBACxF,SAAS,GAAG,aAAa,CAAC;aAC3B;iBAAM,IAAI,qCAAiB,CAAC,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBAC3E,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,YAAY,IAAI,EAAE,EAAE;oBACpD,MAAM,QAAQ,GAAmC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;oBAC/E,IAAI,QAAQ,IAAI,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE;wBACnD,MAAM,QAAQ,GAAuB,qCAAiB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;wBACrF,IAAI,QAAQ,KAAK,SAAS,EAAE;4BAC1B,SAAS,GAAG,QAAQ,CAAC;4BACrB,MAAM;yBACP;qBACF;iBACF;aACF;SACF;QAED,IAAI,UAAU,GACZ,6BAA6B,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,UAAU,KAAK,QAAQ,EAAE;YAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,mCAAY,CAAC,QAAQ,EAAE;gBAC9C,SAAS,GAAG,IAAI,2CAAoB,CAAC,mCAAY,CAAC,QAAQ,CAAC,CAAC;aAC7D;YACD,UAAU,+BAAqB,CAAC;SACjC;QAED,OAAO,SAAS;aACb,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC;aACxC,WAAW,CAAC,6BAA6B,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7F,CAAC;IAEO,eAAe,CAAC,UAAyB;QAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,UAAU,CAAC,EAAE;YAC7D,MAAM,WAAW,GAAiC,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CACjG,UAAU,CAAC,QAAQ,CACpB,CAAC;YAEF,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE;gBACnC,OAAO,WAAW,CAAC,IAAI,CAAC;aACzB;YACD,OAAO,6BAA6B,CAAC,gBAAgB,CAAC;SACvD;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAEO,yBAAyB,CAAC,UAAqC;QACrE,IAAI,UAAU,IAAI,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;YACjD,MAAM,WAAW,GAAW,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAE7D,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBAC9C,gGAAgG;gBAChG,+FAA+F;gBAC/F,uCAAuC;gBACvC,OAAO,IAAI,mCAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;aACnD;iBAAM;gBACL,OAAO,IAAI,mCAAY,CAAC,WAAW,CAAC,CAAC;aACtC;SACF;QACD,OAAO,mCAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;;AAhUH,sEAiUC;AAhUwB,8CAAgB,GAAW,GAAG,CAAC","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 */\nimport * as ts from 'typescript';\nimport {\n DeclarationReference,\n ModuleSource,\n GlobalSource,\n Navigation,\n Meaning\n} from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference';\nimport { PackageJsonLookup, INodePackageJson, InternalError } from '@rushstack/node-core-library';\nimport { TypeScriptHelpers } from '../analyzer/TypeScriptHelpers';\nimport { TypeScriptInternals } from '../analyzer/TypeScriptInternals';\n\nexport class DeclarationReferenceGenerator {\n public static readonly unknownReference: string = '?';\n\n private _packageJsonLookup: PackageJsonLookup;\n private _workingPackageName: string;\n private _program: ts.Program;\n private _typeChecker: ts.TypeChecker;\n private _bundledPackageNames: ReadonlySet<string>;\n\n public constructor(\n packageJsonLookup: PackageJsonLookup,\n workingPackageName: string,\n program: ts.Program,\n typeChecker: ts.TypeChecker,\n bundledPackageNames: ReadonlySet<string>\n ) {\n this._packageJsonLookup = packageJsonLookup;\n this._workingPackageName = workingPackageName;\n this._program = program;\n this._typeChecker = typeChecker;\n this._bundledPackageNames = bundledPackageNames;\n }\n\n /**\n * Gets the UID for a TypeScript Identifier that references a type.\n */\n public getDeclarationReferenceForIdentifier(node: ts.Identifier): DeclarationReference | undefined {\n const symbol: ts.Symbol | undefined = this._typeChecker.getSymbolAtLocation(node);\n if (symbol !== undefined) {\n const isExpression: boolean = DeclarationReferenceGenerator._isInExpressionContext(node);\n return (\n this.getDeclarationReferenceForSymbol(\n symbol,\n isExpression ? ts.SymbolFlags.Value : ts.SymbolFlags.Type\n ) ||\n this.getDeclarationReferenceForSymbol(\n symbol,\n isExpression ? ts.SymbolFlags.Type : ts.SymbolFlags.Value\n ) ||\n this.getDeclarationReferenceForSymbol(symbol, ts.SymbolFlags.Namespace)\n );\n }\n }\n\n /**\n * Gets the DeclarationReference for a TypeScript Symbol for a given meaning.\n */\n public getDeclarationReferenceForSymbol(\n symbol: ts.Symbol,\n meaning: ts.SymbolFlags\n ): DeclarationReference | undefined {\n return this._symbolToDeclarationReference(symbol, meaning, /*includeModuleSymbols*/ false);\n }\n\n private static _isInExpressionContext(node: ts.Node): boolean {\n switch (node.parent.kind) {\n case ts.SyntaxKind.TypeQuery:\n return true;\n case ts.SyntaxKind.QualifiedName:\n return DeclarationReferenceGenerator._isInExpressionContext(node.parent);\n default:\n return false;\n }\n }\n\n private static _isExternalModuleSymbol(symbol: ts.Symbol): boolean {\n return (\n !!(symbol.flags & ts.SymbolFlags.ValueModule) &&\n symbol.valueDeclaration !== undefined &&\n ts.isSourceFile(symbol.valueDeclaration)\n );\n }\n\n private static _isSameSymbol(left: ts.Symbol | undefined, right: ts.Symbol): boolean {\n return (\n left === right ||\n !!(\n left &&\n left.valueDeclaration &&\n right.valueDeclaration &&\n left.valueDeclaration === right.valueDeclaration\n )\n );\n }\n\n private static _getNavigationToSymbol(symbol: ts.Symbol): Navigation | 'global' {\n const parent: ts.Symbol | undefined = TypeScriptInternals.getSymbolParent(symbol);\n // First, try to determine navigation to symbol via its parent.\n if (parent) {\n if (\n parent.exports &&\n DeclarationReferenceGenerator._isSameSymbol(parent.exports.get(symbol.escapedName), symbol)\n ) {\n return Navigation.Exports;\n }\n if (\n parent.members &&\n DeclarationReferenceGenerator._isSameSymbol(parent.members.get(symbol.escapedName), symbol)\n ) {\n return Navigation.Members;\n }\n if (\n parent.globalExports &&\n DeclarationReferenceGenerator._isSameSymbol(parent.globalExports.get(symbol.escapedName), symbol)\n ) {\n return 'global';\n }\n }\n\n // Next, try determining navigation to symbol by its node\n if (symbol.valueDeclaration) {\n const declaration: ts.Declaration = ts.isBindingElement(symbol.valueDeclaration)\n ? ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration)\n : symbol.valueDeclaration;\n if (ts.isClassElement(declaration) && ts.isClassLike(declaration.parent)) {\n // class members are an \"export\" if they have the static modifier.\n return ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Static\n ? Navigation.Exports\n : Navigation.Members;\n }\n if (ts.isTypeElement(declaration) || ts.isObjectLiteralElement(declaration)) {\n // type and object literal element members are just members\n return Navigation.Members;\n }\n if (ts.isEnumMember(declaration)) {\n // enum members are exports\n return Navigation.Exports;\n }\n if (\n ts.isExportSpecifier(declaration) ||\n ts.isExportAssignment(declaration) ||\n ts.isExportSpecifier(declaration) ||\n ts.isExportDeclaration(declaration) ||\n ts.isNamedExports(declaration)\n ) {\n return Navigation.Exports;\n }\n // declarations are exports if they have an `export` modifier.\n if (ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Export) {\n return Navigation.Exports;\n }\n if (ts.isSourceFile(declaration.parent) && !ts.isExternalModule(declaration.parent)) {\n // declarations in a source file are global if the source file is not a module.\n return 'global';\n }\n }\n // all other declarations are locals\n return Navigation.Locals;\n }\n\n private static _getMeaningOfSymbol(symbol: ts.Symbol, meaning: ts.SymbolFlags): Meaning | undefined {\n if (symbol.flags & meaning & ts.SymbolFlags.Class) {\n return Meaning.Class;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Enum) {\n return Meaning.Enum;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Interface) {\n return Meaning.Interface;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.TypeAlias) {\n return Meaning.TypeAlias;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Function) {\n return Meaning.Function;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Variable) {\n return Meaning.Variable;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Module) {\n return Meaning.Namespace;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.ClassMember) {\n return Meaning.Member;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Constructor) {\n return Meaning.Constructor;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.EnumMember) {\n return Meaning.Member;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Signature) {\n if (symbol.escapedName === ts.InternalSymbolName.Call) {\n return Meaning.CallSignature;\n }\n if (symbol.escapedName === ts.InternalSymbolName.New) {\n return Meaning.ConstructSignature;\n }\n if (symbol.escapedName === ts.InternalSymbolName.Index) {\n return Meaning.IndexSignature;\n }\n }\n if (symbol.flags & meaning & ts.SymbolFlags.TypeParameter) {\n // This should have already been handled in `getDeclarationReferenceOfSymbol`.\n throw new InternalError('Not supported.');\n }\n return undefined;\n }\n\n private _symbolToDeclarationReference(\n symbol: ts.Symbol,\n meaning: ts.SymbolFlags,\n includeModuleSymbols: boolean\n ): DeclarationReference | undefined {\n let followedSymbol: ts.Symbol = symbol;\n if (followedSymbol.flags & ts.SymbolFlags.ExportValue) {\n followedSymbol = this._typeChecker.getExportSymbolOfSymbol(followedSymbol);\n }\n if (followedSymbol.flags & ts.SymbolFlags.Alias) {\n followedSymbol = this._typeChecker.getAliasedSymbol(followedSymbol);\n }\n\n if (DeclarationReferenceGenerator._isExternalModuleSymbol(followedSymbol)) {\n if (!includeModuleSymbols) {\n return undefined;\n }\n const sourceFile: ts.SourceFile | undefined =\n followedSymbol.declarations &&\n followedSymbol.declarations[0] &&\n followedSymbol.declarations[0].getSourceFile();\n return new DeclarationReference(this._sourceFileToModuleSource(sourceFile));\n }\n\n // Do not generate a declaration reference for a type parameter.\n if (followedSymbol.flags & ts.SymbolFlags.TypeParameter) {\n return undefined;\n }\n\n const parent: ts.Symbol | undefined = TypeScriptInternals.getSymbolParent(followedSymbol);\n let parentRef: DeclarationReference | undefined;\n if (parent) {\n parentRef = this._symbolToDeclarationReference(\n parent,\n ts.SymbolFlags.Namespace,\n /*includeModuleSymbols*/ true\n );\n } else {\n // this may be a local symbol in a module...\n const sourceFile: ts.SourceFile | undefined =\n followedSymbol.declarations &&\n followedSymbol.declarations[0] &&\n followedSymbol.declarations[0].getSourceFile();\n if (sourceFile && ts.isExternalModule(sourceFile)) {\n parentRef = new DeclarationReference(this._sourceFileToModuleSource(sourceFile));\n } else {\n parentRef = new DeclarationReference(GlobalSource.instance);\n }\n }\n\n if (parentRef === undefined) {\n return undefined;\n }\n\n let localName: string = followedSymbol.name;\n if (followedSymbol.escapedName === ts.InternalSymbolName.Constructor) {\n localName = 'constructor';\n } else {\n const wellKnownName: string | undefined = TypeScriptHelpers.tryDecodeWellKnownSymbolName(\n followedSymbol.escapedName\n );\n if (wellKnownName) {\n // TypeScript binds well-known ECMAScript symbols like 'Symbol.iterator' as '__@iterator'.\n // This converts a string like '__@iterator' into the property name '[Symbol.iterator]'.\n localName = wellKnownName;\n } else if (TypeScriptHelpers.isUniqueSymbolName(followedSymbol.escapedName)) {\n for (const decl of followedSymbol.declarations || []) {\n const declName: ts.DeclarationName | undefined = ts.getNameOfDeclaration(decl);\n if (declName && ts.isComputedPropertyName(declName)) {\n const lateName: string | undefined = TypeScriptHelpers.tryGetLateBoundName(declName);\n if (lateName !== undefined) {\n localName = lateName;\n break;\n }\n }\n }\n }\n }\n\n let navigation: Navigation | 'global' =\n DeclarationReferenceGenerator._getNavigationToSymbol(followedSymbol);\n if (navigation === 'global') {\n if (parentRef.source !== GlobalSource.instance) {\n parentRef = new DeclarationReference(GlobalSource.instance);\n }\n navigation = Navigation.Exports;\n }\n\n return parentRef\n .addNavigationStep(navigation, localName)\n .withMeaning(DeclarationReferenceGenerator._getMeaningOfSymbol(followedSymbol, meaning));\n }\n\n private _getPackageName(sourceFile: ts.SourceFile): string {\n if (this._program.isSourceFileFromExternalLibrary(sourceFile)) {\n const packageJson: INodePackageJson | undefined = this._packageJsonLookup.tryLoadNodePackageJsonFor(\n sourceFile.fileName\n );\n\n if (packageJson && packageJson.name) {\n return packageJson.name;\n }\n return DeclarationReferenceGenerator.unknownReference;\n }\n return this._workingPackageName;\n }\n\n private _sourceFileToModuleSource(sourceFile: ts.SourceFile | undefined): GlobalSource | ModuleSource {\n if (sourceFile && ts.isExternalModule(sourceFile)) {\n const packageName: string = this._getPackageName(sourceFile);\n\n if (this._bundledPackageNames.has(packageName)) {\n // The api-extractor.json config file has a \"bundledPackages\" setting, which causes imports from\n // certain NPM packages to be treated as part of the working project. In this case, we need to\n // substitute the working package name.\n return new ModuleSource(this._workingPackageName);\n } else {\n return new ModuleSource(packageName);\n }\n }\n return GlobalSource.instance;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DeclarationReferenceGenerator.js","sourceRoot":"","sources":["../../src/generators/DeclarationReferenceGenerator.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 */\nimport * as ts from 'typescript';\nimport {\n DeclarationReference,\n ModuleSource,\n GlobalSource,\n Navigation,\n Meaning\n} from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference';\nimport { PackageJsonLookup, INodePackageJson, InternalError } from '@rushstack/node-core-library';\nimport { TypeScriptHelpers } from '../analyzer/TypeScriptHelpers';\nimport { TypeScriptInternals } from '../analyzer/TypeScriptInternals';\n\nexport class DeclarationReferenceGenerator {\n public static readonly unknownReference: string = '?';\n\n private _packageJsonLookup: PackageJsonLookup;\n private _workingPackageName: string;\n private _program: ts.Program;\n private _typeChecker: ts.TypeChecker;\n private _bundledPackageNames: ReadonlySet<string>;\n\n public constructor(\n packageJsonLookup: PackageJsonLookup,\n workingPackageName: string,\n program: ts.Program,\n typeChecker: ts.TypeChecker,\n bundledPackageNames: ReadonlySet<string>\n ) {\n this._packageJsonLookup = packageJsonLookup;\n this._workingPackageName = workingPackageName;\n this._program = program;\n this._typeChecker = typeChecker;\n this._bundledPackageNames = bundledPackageNames;\n }\n\n /**\n * Gets the UID for a TypeScript Identifier that references a type.\n */\n public getDeclarationReferenceForIdentifier(node: ts.Identifier): DeclarationReference | undefined {\n const symbol: ts.Symbol | undefined = this._typeChecker.getSymbolAtLocation(node);\n if (symbol !== undefined) {\n const isExpression: boolean = DeclarationReferenceGenerator._isInExpressionContext(node);\n return (\n this.getDeclarationReferenceForSymbol(\n symbol,\n isExpression ? ts.SymbolFlags.Value : ts.SymbolFlags.Type\n ) ||\n this.getDeclarationReferenceForSymbol(\n symbol,\n isExpression ? ts.SymbolFlags.Type : ts.SymbolFlags.Value\n ) ||\n this.getDeclarationReferenceForSymbol(symbol, ts.SymbolFlags.Namespace)\n );\n }\n }\n\n /**\n * Gets the DeclarationReference for a TypeScript Symbol for a given meaning.\n */\n public getDeclarationReferenceForSymbol(\n symbol: ts.Symbol,\n meaning: ts.SymbolFlags\n ): DeclarationReference | undefined {\n return this._symbolToDeclarationReference(symbol, meaning, /*includeModuleSymbols*/ false);\n }\n\n private static _isInExpressionContext(node: ts.Node): boolean {\n switch (node.parent.kind) {\n case ts.SyntaxKind.TypeQuery:\n return true;\n case ts.SyntaxKind.QualifiedName:\n return DeclarationReferenceGenerator._isInExpressionContext(node.parent);\n default:\n return false;\n }\n }\n\n private static _isExternalModuleSymbol(symbol: ts.Symbol): boolean {\n return (\n !!(symbol.flags & ts.SymbolFlags.ValueModule) &&\n symbol.valueDeclaration !== undefined &&\n ts.isSourceFile(symbol.valueDeclaration)\n );\n }\n\n private static _isSameSymbol(left: ts.Symbol | undefined, right: ts.Symbol): boolean {\n return (\n left === right ||\n !!(\n left &&\n left.valueDeclaration &&\n right.valueDeclaration &&\n left.valueDeclaration === right.valueDeclaration\n )\n );\n }\n\n private static _getNavigationToSymbol(symbol: ts.Symbol): Navigation | 'global' {\n const parent: ts.Symbol | undefined = TypeScriptInternals.getSymbolParent(symbol);\n // First, try to determine navigation to symbol via its parent.\n if (parent) {\n if (\n parent.exports &&\n DeclarationReferenceGenerator._isSameSymbol(parent.exports.get(symbol.escapedName), symbol)\n ) {\n return Navigation.Exports;\n }\n if (\n parent.members &&\n DeclarationReferenceGenerator._isSameSymbol(parent.members.get(symbol.escapedName), symbol)\n ) {\n return Navigation.Members;\n }\n if (\n parent.globalExports &&\n DeclarationReferenceGenerator._isSameSymbol(parent.globalExports.get(symbol.escapedName), symbol)\n ) {\n return 'global';\n }\n }\n\n // Next, try determining navigation to symbol by its node\n if (symbol.valueDeclaration) {\n const declaration: ts.Declaration = ts.isBindingElement(symbol.valueDeclaration)\n ? ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration)\n : symbol.valueDeclaration;\n if (ts.isClassElement(declaration) && ts.isClassLike(declaration.parent)) {\n // class members are an \"export\" if they have the static modifier.\n return ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Static\n ? Navigation.Exports\n : Navigation.Members;\n }\n if (ts.isTypeElement(declaration) || ts.isObjectLiteralElement(declaration)) {\n // type and object literal element members are just members\n return Navigation.Members;\n }\n if (ts.isEnumMember(declaration)) {\n // enum members are exports\n return Navigation.Exports;\n }\n if (\n ts.isExportSpecifier(declaration) ||\n ts.isExportAssignment(declaration) ||\n ts.isExportSpecifier(declaration) ||\n ts.isExportDeclaration(declaration) ||\n ts.isNamedExports(declaration)\n ) {\n return Navigation.Exports;\n }\n // declarations are exports if they have an `export` modifier.\n if (ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Export) {\n return Navigation.Exports;\n }\n if (ts.isSourceFile(declaration.parent) && !ts.isExternalModule(declaration.parent)) {\n // declarations in a source file are global if the source file is not a module.\n return 'global';\n }\n }\n // all other declarations are locals\n return Navigation.Locals;\n }\n\n private static _getMeaningOfSymbol(symbol: ts.Symbol, meaning: ts.SymbolFlags): Meaning | undefined {\n if (symbol.flags & meaning & ts.SymbolFlags.Class) {\n return Meaning.Class;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Enum) {\n return Meaning.Enum;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Interface) {\n return Meaning.Interface;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.TypeAlias) {\n return Meaning.TypeAlias;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Function) {\n return Meaning.Function;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Variable) {\n return Meaning.Variable;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Module) {\n return Meaning.Namespace;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.ClassMember) {\n return Meaning.Member;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Constructor) {\n return Meaning.Constructor;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.EnumMember) {\n return Meaning.Member;\n }\n if (symbol.flags & meaning & ts.SymbolFlags.Signature) {\n if (symbol.escapedName === ts.InternalSymbolName.Call) {\n return Meaning.CallSignature;\n }\n if (symbol.escapedName === ts.InternalSymbolName.New) {\n return Meaning.ConstructSignature;\n }\n if (symbol.escapedName === ts.InternalSymbolName.Index) {\n return Meaning.IndexSignature;\n }\n }\n if (symbol.flags & meaning & ts.SymbolFlags.TypeParameter) {\n // This should have already been handled in `getDeclarationReferenceOfSymbol`.\n throw new InternalError('Not supported.');\n }\n return undefined;\n }\n\n private _symbolToDeclarationReference(\n symbol: ts.Symbol,\n meaning: ts.SymbolFlags,\n includeModuleSymbols: boolean\n ): DeclarationReference | undefined {\n let followedSymbol: ts.Symbol = symbol;\n if (followedSymbol.flags & ts.SymbolFlags.ExportValue) {\n followedSymbol = this._typeChecker.getExportSymbolOfSymbol(followedSymbol);\n }\n if (followedSymbol.flags & ts.SymbolFlags.Alias) {\n followedSymbol = this._typeChecker.getAliasedSymbol(followedSymbol);\n }\n\n if (DeclarationReferenceGenerator._isExternalModuleSymbol(followedSymbol)) {\n if (!includeModuleSymbols) {\n return undefined;\n }\n const declaration: ts.Node | undefined = TypeScriptHelpers.tryGetADeclaration(symbol);\n const sourceFile: ts.SourceFile | undefined = declaration?.getSourceFile();\n return new DeclarationReference(this._sourceFileToModuleSource(sourceFile));\n }\n\n // Do not generate a declaration reference for a type parameter.\n if (followedSymbol.flags & ts.SymbolFlags.TypeParameter) {\n return undefined;\n }\n\n let parentRef: DeclarationReference | undefined = this._getParentReference(followedSymbol);\n if (!parentRef) {\n return undefined;\n }\n\n let localName: string = followedSymbol.name;\n if (followedSymbol.escapedName === ts.InternalSymbolName.Constructor) {\n localName = 'constructor';\n } else {\n const wellKnownName: string | undefined = TypeScriptHelpers.tryDecodeWellKnownSymbolName(\n followedSymbol.escapedName\n );\n if (wellKnownName) {\n // TypeScript binds well-known ECMAScript symbols like 'Symbol.iterator' as '__@iterator'.\n // This converts a string like '__@iterator' into the property name '[Symbol.iterator]'.\n localName = wellKnownName;\n } else if (TypeScriptHelpers.isUniqueSymbolName(followedSymbol.escapedName)) {\n for (const decl of followedSymbol.declarations || []) {\n const declName: ts.DeclarationName | undefined = ts.getNameOfDeclaration(decl);\n if (declName && ts.isComputedPropertyName(declName)) {\n const lateName: string | undefined = TypeScriptHelpers.tryGetLateBoundName(declName);\n if (lateName !== undefined) {\n localName = lateName;\n break;\n }\n }\n }\n }\n }\n\n let navigation: Navigation | 'global' =\n DeclarationReferenceGenerator._getNavigationToSymbol(followedSymbol);\n if (navigation === 'global') {\n if (parentRef.source !== GlobalSource.instance) {\n parentRef = new DeclarationReference(GlobalSource.instance);\n }\n navigation = Navigation.Exports;\n }\n\n return parentRef\n .addNavigationStep(navigation, localName)\n .withMeaning(DeclarationReferenceGenerator._getMeaningOfSymbol(followedSymbol, meaning));\n }\n\n private _getParentReference(symbol: ts.Symbol): DeclarationReference | undefined {\n const declaration: ts.Node | undefined = TypeScriptHelpers.tryGetADeclaration(symbol);\n\n // First, try to find a parent symbol via the symbol tree.\n const parentSymbol: ts.Symbol | undefined = TypeScriptInternals.getSymbolParent(symbol);\n if (parentSymbol) {\n return this._symbolToDeclarationReference(\n parentSymbol,\n parentSymbol.flags,\n /*includeModuleSymbols*/ true\n );\n }\n\n // If that doesn't work, try to find a parent symbol via the node tree. As far as we can tell,\n // this logic is only needed for local symbols within namespaces. For example:\n //\n // ```\n // export namespace n {\n // type SomeType = number;\n // export function someFunction(): SomeType { return 5; }\n // }\n // ```\n //\n // In the example above, `SomeType` doesn't have a parent symbol per the TS internal API above,\n // but its reference still needs to be qualified with the parent reference for `n`.\n const grandParent: ts.Node | undefined = declaration?.parent?.parent;\n if (grandParent && ts.isModuleDeclaration(grandParent)) {\n const grandParentSymbol: ts.Symbol | undefined = TypeScriptInternals.tryGetSymbolForDeclaration(\n grandParent,\n this._typeChecker\n );\n if (grandParentSymbol) {\n return this._symbolToDeclarationReference(\n grandParentSymbol,\n grandParentSymbol.flags,\n /*includeModuleSymbols*/ true\n );\n }\n }\n\n // At this point, we have a local symbol in a module.\n const sourceFile: ts.SourceFile | undefined = declaration?.getSourceFile();\n if (sourceFile && ts.isExternalModule(sourceFile)) {\n return new DeclarationReference(this._sourceFileToModuleSource(sourceFile));\n } else {\n return new DeclarationReference(GlobalSource.instance);\n }\n }\n\n private _getPackageName(sourceFile: ts.SourceFile): string {\n if (this._program.isSourceFileFromExternalLibrary(sourceFile)) {\n const packageJson: INodePackageJson | undefined = this._packageJsonLookup.tryLoadNodePackageJsonFor(\n sourceFile.fileName\n );\n\n if (packageJson && packageJson.name) {\n return packageJson.name;\n }\n return DeclarationReferenceGenerator.unknownReference;\n }\n return this._workingPackageName;\n }\n\n private _sourceFileToModuleSource(sourceFile: ts.SourceFile | undefined): GlobalSource | ModuleSource {\n if (sourceFile && ts.isExternalModule(sourceFile)) {\n const packageName: string = this._getPackageName(sourceFile);\n\n if (this._bundledPackageNames.has(packageName)) {\n // The api-extractor.json config file has a \"bundledPackages\" setting, which causes imports from\n // certain NPM packages to be treated as part of the working project. In this case, we need to\n // substitute the working package name.\n return new ModuleSource(this._workingPackageName);\n } else {\n return new ModuleSource(packageName);\n }\n }\n return GlobalSource.instance;\n }\n}\n"]}
|
package/package.json
CHANGED