@microsoft/api-extractor 7.52.9 → 7.52.11
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/CHANGELOG.json +24 -0
- package/CHANGELOG.md +15 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/api/CompilerState.d.ts.map +1 -1
- package/lib/api/CompilerState.js +8 -0
- package/lib/api/CompilerState.js.map +1 -1
- package/lib/collector/Collector.js +2 -5
- package/lib/collector/Collector.js.map +1 -1
- package/package.json +6 -7
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/api-extractor",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "7.52.11",
|
|
6
|
+
"tag": "@microsoft/api-extractor_v7.52.11",
|
|
7
|
+
"date": "Tue, 19 Aug 2025 20:45:02 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"patch": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Fix self-package import resolution by removing outDir/declarationDir from compiler options"
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"version": "7.52.10",
|
|
18
|
+
"tag": "@microsoft/api-extractor_v7.52.10",
|
|
19
|
+
"date": "Fri, 01 Aug 2025 00:12:48 GMT",
|
|
20
|
+
"comments": {
|
|
21
|
+
"patch": [
|
|
22
|
+
{
|
|
23
|
+
"comment": "Upgrades the minimatch dependency from ~3.0.3 to 10.0.3 across the entire Rush monorepo to address a Regular Expression Denial of Service (ReDoS) vulnerability in the underlying brace-expansion dependency."
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
},
|
|
4
28
|
{
|
|
5
29
|
"version": "7.52.9",
|
|
6
30
|
"tag": "@microsoft/api-extractor_v7.52.9",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
# Change Log - @microsoft/api-extractor
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Tue, 19 Aug 2025 20:45:02 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 7.52.11
|
|
6
|
+
Tue, 19 Aug 2025 20:45:02 GMT
|
|
7
|
+
|
|
8
|
+
### Patches
|
|
9
|
+
|
|
10
|
+
- Fix self-package import resolution by removing outDir/declarationDir from compiler options
|
|
11
|
+
|
|
12
|
+
## 7.52.10
|
|
13
|
+
Fri, 01 Aug 2025 00:12:48 GMT
|
|
14
|
+
|
|
15
|
+
### Patches
|
|
16
|
+
|
|
17
|
+
- Upgrades the minimatch dependency from ~3.0.3 to 10.0.3 across the entire Rush monorepo to address a Regular Expression Denial of Service (ReDoS) vulnerability in the underlying brace-expansion dependency.
|
|
4
18
|
|
|
5
19
|
## 7.52.9
|
|
6
20
|
Wed, 23 Jul 2025 20:55:57 GMT
|
package/dist/tsdoc-metadata.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompilerState.d.ts","sourceRoot":"","sources":["../../src/api/CompilerState.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,qEAAqE;IACrE,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC,OAAO;IAIP;;OAEG;WACW,MAAM,CAClB,eAAe,EAAE,eAAe,EAChC,OAAO,CAAC,EAAE,2BAA2B,GACpC,aAAa;
|
|
1
|
+
{"version":3,"file":"CompilerState.d.ts","sourceRoot":"","sources":["../../src/api/CompilerState.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,qEAAqE;IACrE,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC,OAAO;IAIP;;OAEG;WACW,MAAM,CAClB,eAAe,EAAE,eAAe,EAChC,OAAO,CAAC,EAAE,2BAA2B,GACpC,aAAa;IAoDhB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAuB5C,OAAO,CAAC,MAAM,CAAC,mBAAmB;CAwEnC"}
|
package/lib/api/CompilerState.js
CHANGED
|
@@ -68,6 +68,14 @@ class CompilerState {
|
|
|
68
68
|
console.log(terminal_1.Colorize.cyan('API Extractor was invoked with skipLibCheck. This is not recommended and may cause ' +
|
|
69
69
|
'incorrect type analysis.'));
|
|
70
70
|
}
|
|
71
|
+
// Delete outDir and declarationDir to prevent TypeScript from redirecting self-package
|
|
72
|
+
// imports to source files. When these options are set, TypeScript's module resolution
|
|
73
|
+
// tries to map output .d.ts files back to their source .ts files to avoid analyzing
|
|
74
|
+
// build outputs during compilation. However, API Extractor specifically wants to analyze
|
|
75
|
+
// the .d.ts build artifacts, not the source files. Since API Extractor doesn't emit any
|
|
76
|
+
// files, these options are unnecessary and interfere with correct module resolution.
|
|
77
|
+
delete commandLine.options.outDir;
|
|
78
|
+
delete commandLine.options.declarationDir;
|
|
71
79
|
const inputFilePaths = commandLine.fileNames.concat(extractorConfig.mainEntryPointFilePath);
|
|
72
80
|
if (options && options.additionalEntryPoints) {
|
|
73
81
|
inputFilePaths.push(...options.additionalEntryPoints);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompilerState.js","sourceRoot":"","sources":["../../src/api/CompilerState.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 path from 'path';\nimport * as ts from 'typescript';\n\nimport { JsonFile } from '@rushstack/node-core-library';\n\nimport { ExtractorConfig } from './ExtractorConfig';\nimport type { IExtractorInvokeOptions } from './Extractor';\nimport { Colorize } from '@rushstack/terminal';\n\n/**\n * Options for {@link CompilerState.create}\n * @public\n */\nexport interface ICompilerStateCreateOptions {\n /** {@inheritDoc IExtractorInvokeOptions.typescriptCompilerFolder} */\n typescriptCompilerFolder?: string;\n\n /**\n * Additional .d.ts files to include in the analysis.\n */\n additionalEntryPoints?: string[];\n}\n\n/**\n * This class represents the TypeScript compiler state. This allows an optimization where multiple invocations\n * of API Extractor can reuse the same TypeScript compiler analysis.\n *\n * @public\n */\nexport class CompilerState {\n /**\n * The TypeScript compiler's `Program` object, which represents a complete scope of analysis.\n */\n public readonly program: unknown;\n\n private constructor(properties: CompilerState) {\n this.program = properties.program;\n }\n\n /**\n * Create a compiler state for use with the specified `IExtractorInvokeOptions`.\n */\n public static create(\n extractorConfig: ExtractorConfig,\n options?: ICompilerStateCreateOptions\n ): CompilerState {\n let tsconfig: {} | undefined = extractorConfig.overrideTsconfig;\n let configBasePath: string = extractorConfig.projectFolder;\n if (!tsconfig) {\n // If it wasn't overridden, then load it from disk\n tsconfig = JsonFile.load(extractorConfig.tsconfigFilePath);\n configBasePath = path.resolve(path.dirname(extractorConfig.tsconfigFilePath));\n }\n\n const commandLine: ts.ParsedCommandLine = ts.parseJsonConfigFileContent(tsconfig, ts.sys, configBasePath);\n\n if (!commandLine.options.skipLibCheck && extractorConfig.skipLibCheck) {\n commandLine.options.skipLibCheck = true;\n console.log(\n Colorize.cyan(\n 'API Extractor was invoked with skipLibCheck. This is not recommended and may cause ' +\n 'incorrect type analysis.'\n )\n );\n }\n\n const inputFilePaths: string[] = commandLine.fileNames.concat(extractorConfig.mainEntryPointFilePath);\n if (options && options.additionalEntryPoints) {\n inputFilePaths.push(...options.additionalEntryPoints);\n }\n\n // Append the entry points and remove any non-declaration files from the list\n const analysisFilePaths: string[] = CompilerState._generateFilePathsForAnalysis(inputFilePaths);\n\n const compilerHost: ts.CompilerHost = CompilerState._createCompilerHost(commandLine, options);\n\n const program: ts.Program = ts.createProgram(analysisFilePaths, commandLine.options, compilerHost);\n\n if (commandLine.errors.length > 0) {\n const errorText: string = ts.flattenDiagnosticMessageText(commandLine.errors[0].messageText, '\\n');\n throw new Error(`Error parsing tsconfig.json content: ${errorText}`);\n }\n\n return new CompilerState({\n program\n });\n }\n\n /**\n * Given a list of absolute file paths, return a list containing only the declaration\n * files. Duplicates are also eliminated.\n *\n * @remarks\n * The tsconfig.json settings specify the compiler's input (a set of *.ts source files,\n * plus some *.d.ts declaration files used for legacy typings). However API Extractor\n * analyzes the compiler's output (a set of *.d.ts entry point files, plus any legacy\n * typings). This requires API Extractor to generate a special file list when it invokes\n * the compiler.\n *\n * Duplicates are removed so that entry points can be appended without worrying whether they\n * may already appear in the tsconfig.json file list.\n */\n private static _generateFilePathsForAnalysis(inputFilePaths: string[]): string[] {\n const analysisFilePaths: string[] = [];\n\n const seenFiles: Set<string> = new Set<string>();\n\n for (const inputFilePath of inputFilePaths) {\n const inputFileToUpper: string = inputFilePath.toUpperCase();\n if (!seenFiles.has(inputFileToUpper)) {\n seenFiles.add(inputFileToUpper);\n\n if (!path.isAbsolute(inputFilePath)) {\n throw new Error('Input file is not an absolute path: ' + inputFilePath);\n }\n\n if (ExtractorConfig.hasDtsFileExtension(inputFilePath)) {\n analysisFilePaths.push(inputFilePath);\n }\n }\n }\n\n return analysisFilePaths;\n }\n\n private static _createCompilerHost(\n commandLine: ts.ParsedCommandLine,\n options: IExtractorInvokeOptions | undefined\n ): ts.CompilerHost {\n // Create a default CompilerHost that we will override\n const compilerHost: ts.CompilerHost = ts.createCompilerHost(commandLine.options);\n\n // Save a copy of the original members. Note that \"compilerHost\" cannot be the copy, because\n // createCompilerHost() captures that instance in a closure that is used by the members.\n const defaultCompilerHost: ts.CompilerHost = { ...compilerHost };\n\n if (options && options.typescriptCompilerFolder) {\n // Prevent a closure parameter\n const typescriptCompilerLibFolder: string = path.join(options.typescriptCompilerFolder, 'lib');\n compilerHost.getDefaultLibLocation = () => typescriptCompilerLibFolder;\n }\n\n // Used by compilerHost.fileExists()\n // .d.ts file path --> whether the file exists\n const dtsExistsCache: Map<string, boolean> = new Map<string, boolean>();\n\n // Used by compilerHost.fileExists()\n // Example: \"c:/folder/file.part.ts\"\n const fileExtensionRegExp: RegExp = /^(.+)(\\.[a-z0-9_]+)$/i;\n\n compilerHost.fileExists = (fileName: string): boolean => {\n // In certain deprecated setups, the compiler may write its output files (.js and .d.ts)\n // in the same folder as the corresponding input file (.ts or .tsx). When following imports,\n // API Extractor wants to analyze the .d.ts file; however recent versions of the compiler engine\n // will instead choose the .ts file. To work around this, we hook fileExists() to hide the\n // existence of those files.\n\n // Is \"fileName\" a .d.ts file? The double extension \".d.ts\" needs to be matched specially.\n if (!ExtractorConfig.hasDtsFileExtension(fileName)) {\n // It's not a .d.ts file. Is the file extension a potential source file?\n const match: RegExpExecArray | null = fileExtensionRegExp.exec(fileName);\n if (match) {\n // Example: \"c:/folder/file.part\"\n const pathWithoutExtension: string = match[1];\n // Example: \".ts\"\n const fileExtension: string = match[2];\n\n switch (fileExtension.toLocaleLowerCase()) {\n case '.ts':\n case '.tsx':\n case '.js':\n case '.jsx':\n // Yes, this is a possible source file. Is there a corresponding .d.ts file in the same folder?\n const dtsFileName: string = `${pathWithoutExtension}.d.ts`;\n\n let dtsFileExists: boolean | undefined = dtsExistsCache.get(dtsFileName);\n if (dtsFileExists === undefined) {\n dtsFileExists = defaultCompilerHost.fileExists!(dtsFileName);\n dtsExistsCache.set(dtsFileName, dtsFileExists);\n }\n\n if (dtsFileExists) {\n // fileName is a potential source file and a corresponding .d.ts file exists.\n // Thus, API Extractor should ignore this file (so the .d.ts file will get analyzed instead).\n return false;\n }\n break;\n }\n }\n }\n\n // Fall through to the default implementation\n return defaultCompilerHost.fileExists!(fileName);\n };\n\n return compilerHost;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CompilerState.js","sourceRoot":"","sources":["../../src/api/CompilerState.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,2CAA6B;AAC7B,+CAAiC;AAEjC,oEAAwD;AAExD,uDAAoD;AAEpD,kDAA+C;AAgB/C;;;;;GAKG;AACH,MAAa,aAAa;IAMxB,YAAoB,UAAyB;QAC3C,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,MAAM,CAClB,eAAgC,EAChC,OAAqC;QAErC,IAAI,QAAQ,GAAmB,eAAe,CAAC,gBAAgB,CAAC;QAChE,IAAI,cAAc,GAAW,eAAe,CAAC,aAAa,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,kDAAkD;YAClD,QAAQ,GAAG,4BAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAC3D,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,WAAW,GAAyB,EAAE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAE1G,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC;YACtE,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YACxC,OAAO,CAAC,GAAG,CACT,mBAAQ,CAAC,IAAI,CACX,qFAAqF;gBACnF,0BAA0B,CAC7B,CACF,CAAC;QACJ,CAAC;QAED,uFAAuF;QACvF,sFAAsF;QACtF,oFAAoF;QACpF,yFAAyF;QACzF,wFAAwF;QACxF,qFAAqF;QACrF,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC,OAAO,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;QAE1C,MAAM,cAAc,GAAa,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;QACtG,IAAI,OAAO,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC7C,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACxD,CAAC;QAED,6EAA6E;QAC7E,MAAM,iBAAiB,GAAa,aAAa,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;QAEhG,MAAM,YAAY,GAAoB,aAAa,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE9F,MAAM,OAAO,GAAe,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEnG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAW,EAAE,CAAC,4BAA4B,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,aAAa,CAAC;YACvB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,MAAM,CAAC,6BAA6B,CAAC,cAAwB;QACnE,MAAM,iBAAiB,GAAa,EAAE,CAAC;QAEvC,MAAM,SAAS,GAAgB,IAAI,GAAG,EAAU,CAAC;QAEjD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAW,aAAa,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACrC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAEhC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,aAAa,CAAC,CAAC;gBAC1E,CAAC;gBAED,IAAI,iCAAe,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC;oBACvD,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAChC,WAAiC,EACjC,OAA4C;QAE5C,sDAAsD;QACtD,MAAM,YAAY,GAAoB,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEjF,6FAA6F;QAC7F,wFAAwF;QACxF,MAAM,mBAAmB,GAAoB,EAAE,GAAG,YAAY,EAAE,CAAC;QAEjE,IAAI,OAAO,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;YAChD,8BAA8B;YAC9B,MAAM,2BAA2B,GAAW,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/F,YAAY,CAAC,qBAAqB,GAAG,GAAG,EAAE,CAAC,2BAA2B,CAAC;QACzE,CAAC;QAED,oCAAoC;QACpC,8CAA8C;QAC9C,MAAM,cAAc,GAAyB,IAAI,GAAG,EAAmB,CAAC;QAExE,oCAAoC;QACpC,oCAAoC;QACpC,MAAM,mBAAmB,GAAW,uBAAuB,CAAC;QAE5D,YAAY,CAAC,UAAU,GAAG,CAAC,QAAgB,EAAW,EAAE;YACtD,wFAAwF;YACxF,6FAA6F;YAC7F,gGAAgG;YAChG,2FAA2F;YAC3F,4BAA4B;YAE5B,2FAA2F;YAC3F,IAAI,CAAC,iCAAe,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,yEAAyE;gBACzE,MAAM,KAAK,GAA2B,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzE,IAAI,KAAK,EAAE,CAAC;oBACV,iCAAiC;oBACjC,MAAM,oBAAoB,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC9C,iBAAiB;oBACjB,MAAM,aAAa,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;oBAEvC,QAAQ,aAAa,CAAC,iBAAiB,EAAE,EAAE,CAAC;wBAC1C,KAAK,KAAK,CAAC;wBACX,KAAK,MAAM,CAAC;wBACZ,KAAK,KAAK,CAAC;wBACX,KAAK,MAAM;4BACT,gGAAgG;4BAChG,MAAM,WAAW,GAAW,GAAG,oBAAoB,OAAO,CAAC;4BAE3D,IAAI,aAAa,GAAwB,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;4BACzE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gCAChC,aAAa,GAAG,mBAAmB,CAAC,UAAW,CAAC,WAAW,CAAC,CAAC;gCAC7D,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;4BACjD,CAAC;4BAED,IAAI,aAAa,EAAE,CAAC;gCAClB,6EAA6E;gCAC7E,6FAA6F;gCAC7F,OAAO,KAAK,CAAC;4BACf,CAAC;4BACD,MAAM;oBACV,CAAC;gBACH,CAAC;YACH,CAAC;YAED,6CAA6C;YAC7C,OAAO,mBAAmB,CAAC,UAAW,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAjLD,sCAiLC","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 path from 'path';\nimport * as ts from 'typescript';\n\nimport { JsonFile } from '@rushstack/node-core-library';\n\nimport { ExtractorConfig } from './ExtractorConfig';\nimport type { IExtractorInvokeOptions } from './Extractor';\nimport { Colorize } from '@rushstack/terminal';\n\n/**\n * Options for {@link CompilerState.create}\n * @public\n */\nexport interface ICompilerStateCreateOptions {\n /** {@inheritDoc IExtractorInvokeOptions.typescriptCompilerFolder} */\n typescriptCompilerFolder?: string;\n\n /**\n * Additional .d.ts files to include in the analysis.\n */\n additionalEntryPoints?: string[];\n}\n\n/**\n * This class represents the TypeScript compiler state. This allows an optimization where multiple invocations\n * of API Extractor can reuse the same TypeScript compiler analysis.\n *\n * @public\n */\nexport class CompilerState {\n /**\n * The TypeScript compiler's `Program` object, which represents a complete scope of analysis.\n */\n public readonly program: unknown;\n\n private constructor(properties: CompilerState) {\n this.program = properties.program;\n }\n\n /**\n * Create a compiler state for use with the specified `IExtractorInvokeOptions`.\n */\n public static create(\n extractorConfig: ExtractorConfig,\n options?: ICompilerStateCreateOptions\n ): CompilerState {\n let tsconfig: {} | undefined = extractorConfig.overrideTsconfig;\n let configBasePath: string = extractorConfig.projectFolder;\n if (!tsconfig) {\n // If it wasn't overridden, then load it from disk\n tsconfig = JsonFile.load(extractorConfig.tsconfigFilePath);\n configBasePath = path.resolve(path.dirname(extractorConfig.tsconfigFilePath));\n }\n\n const commandLine: ts.ParsedCommandLine = ts.parseJsonConfigFileContent(tsconfig, ts.sys, configBasePath);\n\n if (!commandLine.options.skipLibCheck && extractorConfig.skipLibCheck) {\n commandLine.options.skipLibCheck = true;\n console.log(\n Colorize.cyan(\n 'API Extractor was invoked with skipLibCheck. This is not recommended and may cause ' +\n 'incorrect type analysis.'\n )\n );\n }\n\n // Delete outDir and declarationDir to prevent TypeScript from redirecting self-package\n // imports to source files. When these options are set, TypeScript's module resolution\n // tries to map output .d.ts files back to their source .ts files to avoid analyzing\n // build outputs during compilation. However, API Extractor specifically wants to analyze\n // the .d.ts build artifacts, not the source files. Since API Extractor doesn't emit any\n // files, these options are unnecessary and interfere with correct module resolution.\n delete commandLine.options.outDir;\n delete commandLine.options.declarationDir;\n\n const inputFilePaths: string[] = commandLine.fileNames.concat(extractorConfig.mainEntryPointFilePath);\n if (options && options.additionalEntryPoints) {\n inputFilePaths.push(...options.additionalEntryPoints);\n }\n\n // Append the entry points and remove any non-declaration files from the list\n const analysisFilePaths: string[] = CompilerState._generateFilePathsForAnalysis(inputFilePaths);\n\n const compilerHost: ts.CompilerHost = CompilerState._createCompilerHost(commandLine, options);\n\n const program: ts.Program = ts.createProgram(analysisFilePaths, commandLine.options, compilerHost);\n\n if (commandLine.errors.length > 0) {\n const errorText: string = ts.flattenDiagnosticMessageText(commandLine.errors[0].messageText, '\\n');\n throw new Error(`Error parsing tsconfig.json content: ${errorText}`);\n }\n\n return new CompilerState({\n program\n });\n }\n\n /**\n * Given a list of absolute file paths, return a list containing only the declaration\n * files. Duplicates are also eliminated.\n *\n * @remarks\n * The tsconfig.json settings specify the compiler's input (a set of *.ts source files,\n * plus some *.d.ts declaration files used for legacy typings). However API Extractor\n * analyzes the compiler's output (a set of *.d.ts entry point files, plus any legacy\n * typings). This requires API Extractor to generate a special file list when it invokes\n * the compiler.\n *\n * Duplicates are removed so that entry points can be appended without worrying whether they\n * may already appear in the tsconfig.json file list.\n */\n private static _generateFilePathsForAnalysis(inputFilePaths: string[]): string[] {\n const analysisFilePaths: string[] = [];\n\n const seenFiles: Set<string> = new Set<string>();\n\n for (const inputFilePath of inputFilePaths) {\n const inputFileToUpper: string = inputFilePath.toUpperCase();\n if (!seenFiles.has(inputFileToUpper)) {\n seenFiles.add(inputFileToUpper);\n\n if (!path.isAbsolute(inputFilePath)) {\n throw new Error('Input file is not an absolute path: ' + inputFilePath);\n }\n\n if (ExtractorConfig.hasDtsFileExtension(inputFilePath)) {\n analysisFilePaths.push(inputFilePath);\n }\n }\n }\n\n return analysisFilePaths;\n }\n\n private static _createCompilerHost(\n commandLine: ts.ParsedCommandLine,\n options: IExtractorInvokeOptions | undefined\n ): ts.CompilerHost {\n // Create a default CompilerHost that we will override\n const compilerHost: ts.CompilerHost = ts.createCompilerHost(commandLine.options);\n\n // Save a copy of the original members. Note that \"compilerHost\" cannot be the copy, because\n // createCompilerHost() captures that instance in a closure that is used by the members.\n const defaultCompilerHost: ts.CompilerHost = { ...compilerHost };\n\n if (options && options.typescriptCompilerFolder) {\n // Prevent a closure parameter\n const typescriptCompilerLibFolder: string = path.join(options.typescriptCompilerFolder, 'lib');\n compilerHost.getDefaultLibLocation = () => typescriptCompilerLibFolder;\n }\n\n // Used by compilerHost.fileExists()\n // .d.ts file path --> whether the file exists\n const dtsExistsCache: Map<string, boolean> = new Map<string, boolean>();\n\n // Used by compilerHost.fileExists()\n // Example: \"c:/folder/file.part.ts\"\n const fileExtensionRegExp: RegExp = /^(.+)(\\.[a-z0-9_]+)$/i;\n\n compilerHost.fileExists = (fileName: string): boolean => {\n // In certain deprecated setups, the compiler may write its output files (.js and .d.ts)\n // in the same folder as the corresponding input file (.ts or .tsx). When following imports,\n // API Extractor wants to analyze the .d.ts file; however recent versions of the compiler engine\n // will instead choose the .ts file. To work around this, we hook fileExists() to hide the\n // existence of those files.\n\n // Is \"fileName\" a .d.ts file? The double extension \".d.ts\" needs to be matched specially.\n if (!ExtractorConfig.hasDtsFileExtension(fileName)) {\n // It's not a .d.ts file. Is the file extension a potential source file?\n const match: RegExpExecArray | null = fileExtensionRegExp.exec(fileName);\n if (match) {\n // Example: \"c:/folder/file.part\"\n const pathWithoutExtension: string = match[1];\n // Example: \".ts\"\n const fileExtension: string = match[2];\n\n switch (fileExtension.toLocaleLowerCase()) {\n case '.ts':\n case '.tsx':\n case '.js':\n case '.jsx':\n // Yes, this is a possible source file. Is there a corresponding .d.ts file in the same folder?\n const dtsFileName: string = `${pathWithoutExtension}.d.ts`;\n\n let dtsFileExists: boolean | undefined = dtsExistsCache.get(dtsFileName);\n if (dtsFileExists === undefined) {\n dtsFileExists = defaultCompilerHost.fileExists!(dtsFileName);\n dtsExistsCache.set(dtsFileName, dtsFileExists);\n }\n\n if (dtsFileExists) {\n // fileName is a potential source file and a corresponding .d.ts file exists.\n // Thus, API Extractor should ignore this file (so the .d.ts file will get analyzed instead).\n return false;\n }\n break;\n }\n }\n }\n\n // Fall through to the default implementation\n return defaultCompilerHost.fileExists!(fileName);\n };\n\n return compilerHost;\n }\n}\n"]}
|
|
@@ -34,16 +34,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
return result;
|
|
35
35
|
};
|
|
36
36
|
})();
|
|
37
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
38
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
39
|
-
};
|
|
40
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
38
|
exports.Collector = void 0;
|
|
42
39
|
const ts = __importStar(require("typescript"));
|
|
43
40
|
const tsdoc = __importStar(require("@microsoft/tsdoc"));
|
|
44
41
|
const node_core_library_1 = require("@rushstack/node-core-library");
|
|
45
42
|
const api_extractor_model_1 = require("@microsoft/api-extractor-model");
|
|
46
|
-
const minimatch_1 =
|
|
43
|
+
const minimatch_1 = require("minimatch");
|
|
47
44
|
const ExtractorMessageId_1 = require("../api/ExtractorMessageId");
|
|
48
45
|
const CollectorEntity_1 = require("./CollectorEntity");
|
|
49
46
|
const AstSymbolTable_1 = require("../analyzer/AstSymbolTable");
|
|
@@ -138,7 +135,7 @@ class Collector {
|
|
|
138
135
|
else {
|
|
139
136
|
// If the entry isn't an exact package name, assume glob pattern and search for matches
|
|
140
137
|
for (const dependencyName of dependencyNames) {
|
|
141
|
-
if ((0, minimatch_1.
|
|
138
|
+
if ((0, minimatch_1.minimatch)(dependencyName, packageNameOrPattern)) {
|
|
142
139
|
resolvedPackageNames.add(dependencyName);
|
|
143
140
|
}
|
|
144
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collector.js","sourceRoot":"","sources":["../../src/collector/Collector.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 * as tsdoc from '@microsoft/tsdoc';\nimport {\n PackageJsonLookup,\n Sort,\n InternalError,\n type INodePackageJson,\n PackageName\n} from '@rushstack/node-core-library';\nimport { ReleaseTag } from '@microsoft/api-extractor-model';\nimport minimatch from 'minimatch';\n\nimport { ExtractorMessageId } from '../api/ExtractorMessageId';\n\nimport { CollectorEntity } from './CollectorEntity';\nimport { AstSymbolTable } from '../analyzer/AstSymbolTable';\nimport type { AstEntity } from '../analyzer/AstEntity';\nimport type { AstModule, IAstModuleExportInfo } from '../analyzer/AstModule';\nimport { AstSymbol } from '../analyzer/AstSymbol';\nimport type { AstDeclaration } from '../analyzer/AstDeclaration';\nimport { TypeScriptHelpers } from '../analyzer/TypeScriptHelpers';\nimport { WorkingPackage } from './WorkingPackage';\nimport { PackageDocComment } from '../aedoc/PackageDocComment';\nimport { type DeclarationMetadata, InternalDeclarationMetadata } from './DeclarationMetadata';\nimport { ApiItemMetadata, type IApiItemMetadataOptions } from './ApiItemMetadata';\nimport { SymbolMetadata } from './SymbolMetadata';\nimport { TypeScriptInternals, type IGlobalVariableAnalyzer } from '../analyzer/TypeScriptInternals';\nimport type { MessageRouter } from './MessageRouter';\nimport { AstReferenceResolver } from '../analyzer/AstReferenceResolver';\nimport { ExtractorConfig } from '../api/ExtractorConfig';\nimport { AstNamespaceImport } from '../analyzer/AstNamespaceImport';\nimport { AstImport } from '../analyzer/AstImport';\nimport type { SourceMapper } from './SourceMapper';\n\n/**\n * Options for Collector constructor.\n */\nexport interface ICollectorOptions {\n /**\n * Configuration for the TypeScript compiler. The most important options to set are:\n *\n * - target: ts.ScriptTarget.ES5\n * - module: ts.ModuleKind.CommonJS\n * - moduleResolution: ts.ModuleResolutionKind.NodeJs\n * - rootDir: inputFolder\n */\n program: ts.Program;\n\n messageRouter: MessageRouter;\n\n extractorConfig: ExtractorConfig;\n\n sourceMapper: SourceMapper;\n}\n\n/**\n * The `Collector` manages the overall data set that is used by `ApiModelGenerator`,\n * `DtsRollupGenerator`, and `ApiReportGenerator`. Starting from the working package's entry point,\n * the `Collector` collects all exported symbols, determines how to import any symbols they reference,\n * assigns unique names, and sorts everything into a normalized alphabetical ordering.\n */\nexport class Collector {\n public readonly program: ts.Program;\n public readonly typeChecker: ts.TypeChecker;\n public readonly globalVariableAnalyzer: IGlobalVariableAnalyzer;\n public readonly astSymbolTable: AstSymbolTable;\n public readonly astReferenceResolver: AstReferenceResolver;\n\n public readonly packageJsonLookup: PackageJsonLookup;\n public readonly messageRouter: MessageRouter;\n\n public readonly workingPackage: WorkingPackage;\n\n public readonly extractorConfig: ExtractorConfig;\n\n public readonly sourceMapper: SourceMapper;\n\n /**\n * The `ExtractorConfig.bundledPackages` names in a set.\n */\n public readonly bundledPackageNames: ReadonlySet<string>;\n\n private readonly _program: ts.Program;\n\n private readonly _tsdocParser: tsdoc.TSDocParser;\n\n private _astEntryPoint: AstModule | undefined;\n\n private readonly _entities: CollectorEntity[] = [];\n private readonly _entitiesByAstEntity: Map<AstEntity, CollectorEntity> = new Map<\n AstEntity,\n CollectorEntity\n >();\n private readonly _entitiesBySymbol: Map<ts.Symbol, CollectorEntity> = new Map<ts.Symbol, CollectorEntity>();\n\n private readonly _starExportedExternalModulePaths: string[] = [];\n\n private readonly _dtsTypeReferenceDirectives: Set<string> = new Set<string>();\n private readonly _dtsLibReferenceDirectives: Set<string> = new Set<string>();\n\n // Used by getOverloadIndex()\n private readonly _cachedOverloadIndexesByDeclaration: Map<AstDeclaration, number>;\n\n public constructor(options: ICollectorOptions) {\n this.packageJsonLookup = new PackageJsonLookup();\n\n this._program = options.program;\n this.extractorConfig = options.extractorConfig;\n this.sourceMapper = options.sourceMapper;\n\n const entryPointSourceFile: ts.SourceFile | undefined = options.program.getSourceFile(\n this.extractorConfig.mainEntryPointFilePath\n );\n\n if (!entryPointSourceFile) {\n throw new Error('Unable to load file: ' + this.extractorConfig.mainEntryPointFilePath);\n }\n\n if (!this.extractorConfig.packageFolder || !this.extractorConfig.packageJson) {\n // TODO: We should be able to analyze projects that don't have any package.json.\n // The ExtractorConfig class is already designed to allow this.\n throw new Error('Unable to find a package.json file for the project being analyzed');\n }\n\n this.workingPackage = new WorkingPackage({\n packageFolder: this.extractorConfig.packageFolder,\n packageJson: this.extractorConfig.packageJson,\n entryPointSourceFile\n });\n\n this.messageRouter = options.messageRouter;\n\n this.program = options.program;\n this.typeChecker = options.program.getTypeChecker();\n this.globalVariableAnalyzer = TypeScriptInternals.getGlobalVariableAnalyzer(this.program);\n\n this._tsdocParser = new tsdoc.TSDocParser(this.extractorConfig.tsdocConfiguration);\n\n // Resolve package name patterns and store concrete set of bundled package dependency names\n this.bundledPackageNames = Collector._resolveBundledPackagePatterns(\n this.extractorConfig.bundledPackages,\n this.extractorConfig.packageJson\n );\n\n this.astSymbolTable = new AstSymbolTable(\n this.program,\n this.typeChecker,\n this.packageJsonLookup,\n this.bundledPackageNames,\n this.messageRouter\n );\n this.astReferenceResolver = new AstReferenceResolver(this);\n\n this._cachedOverloadIndexesByDeclaration = new Map<AstDeclaration, number>();\n }\n\n /**\n * Resolve provided `bundledPackages` names and glob patterns to a list of explicit package names.\n *\n * @remarks\n * Explicit package names will be included in the output unconditionally. However, wildcard patterns will\n * only be matched against the various dependencies listed in the provided package.json (if there was one).\n * Patterns will be matched against `dependencies`, `devDependencies`, `optionalDependencies`, and `peerDependencies`.\n *\n * @param bundledPackages - The list of package names and/or glob patterns to resolve.\n * @param packageJson - The package.json of the package being processed (if there is one).\n * @returns The set of resolved package names to be bundled during analysis.\n */\n private static _resolveBundledPackagePatterns(\n bundledPackages: string[],\n packageJson: INodePackageJson | undefined\n ): ReadonlySet<string> {\n if (bundledPackages.length === 0) {\n // If no `bundledPackages` were specified, then there is nothing to resolve.\n // Return an empty set.\n return new Set<string>();\n }\n\n // Accumulate all declared dependencies.\n // Any wildcard patterns in `bundledPackages` will be resolved against these.\n const dependencyNames: Set<string> = new Set<string>();\n Object.keys(packageJson?.dependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n Object.keys(packageJson?.devDependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n Object.keys(packageJson?.peerDependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n Object.keys(packageJson?.optionalDependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n\n // The set of resolved package names to be populated and returned\n const resolvedPackageNames: Set<string> = new Set<string>();\n\n for (const packageNameOrPattern of bundledPackages) {\n // If the string is an exact package name, use it regardless of package.json contents\n if (PackageName.isValidName(packageNameOrPattern)) {\n resolvedPackageNames.add(packageNameOrPattern);\n } else {\n // If the entry isn't an exact package name, assume glob pattern and search for matches\n for (const dependencyName of dependencyNames) {\n if (minimatch(dependencyName, packageNameOrPattern)) {\n resolvedPackageNames.add(dependencyName);\n }\n }\n }\n }\n return resolvedPackageNames;\n }\n\n /**a\n * Returns a list of names (e.g. \"example-library\") that should appear in a reference like this:\n *\n * ```\n * /// <reference types=\"example-library\" />\n * ```\n */\n public get dtsTypeReferenceDirectives(): ReadonlySet<string> {\n return this._dtsTypeReferenceDirectives;\n }\n\n /**\n * A list of names (e.g. \"runtime-library\") that should appear in a reference like this:\n *\n * ```\n * /// <reference lib=\"runtime-library\" />\n * ```\n */\n public get dtsLibReferenceDirectives(): ReadonlySet<string> {\n return this._dtsLibReferenceDirectives;\n }\n\n public get entities(): ReadonlyArray<CollectorEntity> {\n return this._entities;\n }\n\n /**\n * A list of module specifiers (e.g. `\"@rushstack/node-core-library/lib/FileSystem\"`) that should be emitted\n * as star exports (e.g. `export * from \"@rushstack/node-core-library/lib/FileSystem\"`).\n */\n public get starExportedExternalModulePaths(): ReadonlyArray<string> {\n return this._starExportedExternalModulePaths;\n }\n\n /**\n * Perform the analysis.\n */\n public analyze(): void {\n if (this._astEntryPoint) {\n throw new Error('DtsRollupGenerator.analyze() was already called');\n }\n\n // This runs a full type analysis, and then augments the Abstract Syntax Tree (i.e. declarations)\n // with semantic information (i.e. symbols). The \"diagnostics\" are a subset of the everyday\n // compile errors that would result from a full compilation.\n for (const diagnostic of this._program.getSemanticDiagnostics()) {\n this.messageRouter.addCompilerDiagnostic(diagnostic);\n }\n\n const sourceFiles: readonly ts.SourceFile[] = this.program.getSourceFiles();\n\n if (this.messageRouter.showDiagnostics) {\n this.messageRouter.logDiagnosticHeader('Root filenames');\n for (const fileName of this.program.getRootFileNames()) {\n this.messageRouter.logDiagnostic(fileName);\n }\n this.messageRouter.logDiagnosticFooter();\n\n this.messageRouter.logDiagnosticHeader('Files analyzed by compiler');\n for (const sourceFile of sourceFiles) {\n this.messageRouter.logDiagnostic(sourceFile.fileName);\n }\n this.messageRouter.logDiagnosticFooter();\n }\n\n // We can throw this error earlier in CompilerState.ts, but intentionally wait until after we've logged the\n // associated diagnostic message above to make debugging easier for developers.\n // Typically there will be many such files -- to avoid too much noise, only report the first one.\n const badSourceFile: ts.SourceFile | undefined = sourceFiles.find(\n ({ fileName }) => !ExtractorConfig.hasDtsFileExtension(fileName)\n );\n if (badSourceFile) {\n this.messageRouter.addAnalyzerIssueForPosition(\n ExtractorMessageId.WrongInputFileType,\n 'Incorrect file type; API Extractor expects to analyze compiler outputs with the .d.ts file extension. ' +\n 'Troubleshooting tips: https://api-extractor.com/link/dts-error',\n badSourceFile,\n 0\n );\n }\n\n // Build the entry point\n const entryPointSourceFile: ts.SourceFile = this.workingPackage.entryPointSourceFile;\n\n const astEntryPoint: AstModule =\n this.astSymbolTable.fetchAstModuleFromWorkingPackage(entryPointSourceFile);\n this._astEntryPoint = astEntryPoint;\n\n const packageDocCommentTextRange: ts.TextRange | undefined = PackageDocComment.tryFindInSourceFile(\n entryPointSourceFile,\n this\n );\n\n if (packageDocCommentTextRange) {\n const range: tsdoc.TextRange = tsdoc.TextRange.fromStringRange(\n entryPointSourceFile.text,\n packageDocCommentTextRange.pos,\n packageDocCommentTextRange.end\n );\n\n this.workingPackage.tsdocParserContext = this._tsdocParser.parseRange(range);\n\n this.messageRouter.addTsdocMessages(this.workingPackage.tsdocParserContext, entryPointSourceFile);\n\n this.workingPackage.tsdocComment = this.workingPackage.tsdocParserContext!.docComment;\n }\n\n const { exportedLocalEntities, starExportedExternalModules, visitedAstModules }: IAstModuleExportInfo =\n this.astSymbolTable.fetchAstModuleExportInfo(astEntryPoint);\n\n // Create a CollectorEntity for each top-level export.\n const processedAstEntities: AstEntity[] = [];\n for (const [exportName, astEntity] of exportedLocalEntities) {\n this._createCollectorEntity(astEntity, exportName);\n processedAstEntities.push(astEntity);\n }\n\n // Recursively create the remaining CollectorEntities after the top-level entities\n // have been processed.\n const alreadySeenAstEntities: Set<AstEntity> = new Set<AstEntity>();\n for (const astEntity of processedAstEntities) {\n this._recursivelyCreateEntities(astEntity, alreadySeenAstEntities);\n if (astEntity instanceof AstSymbol) {\n this.fetchSymbolMetadata(astEntity);\n }\n }\n\n // Ensure references are collected from any intermediate files that\n // only include exports\n const nonExternalSourceFiles: Set<ts.SourceFile> = new Set();\n for (const { sourceFile, isExternal } of visitedAstModules) {\n if (!nonExternalSourceFiles.has(sourceFile) && !isExternal) {\n nonExternalSourceFiles.add(sourceFile);\n }\n }\n\n // Here, we're collecting reference directives from all non-external source files\n // that were encountered while looking for exports, but only those references that\n // were explicitly written by the developer and marked with the `preserve=\"true\"`\n // attribute. In TS >= 5.5, only references that are explicitly authored and marked\n // with `preserve=\"true\"` are included in the output. See https://github.com/microsoft/TypeScript/pull/57681\n //\n // The `_collectReferenceDirectives` function pulls in all references in files that\n // contain definitions, but does not examine files that only reexport from other\n // files. Here, we're looking through files that were missed by `_collectReferenceDirectives`,\n // but only collecting references that were explicitly marked with `preserve=\"true\"`.\n // It is intuitive for developers to include references that they explicitly want part of\n // their public API in a file like the entrypoint, which is likely to only contain reexports,\n // and this picks those up.\n this._collectReferenceDirectivesFromSourceFiles(nonExternalSourceFiles, true);\n\n this._makeUniqueNames();\n\n for (const starExportedExternalModule of starExportedExternalModules) {\n if (starExportedExternalModule.externalModulePath !== undefined) {\n this._starExportedExternalModulePaths.push(starExportedExternalModule.externalModulePath);\n }\n }\n\n Sort.sortBy(this._entities, (x) => x.getSortKey());\n Sort.sortSet(this._dtsTypeReferenceDirectives);\n Sort.sortSet(this._dtsLibReferenceDirectives);\n this._starExportedExternalModulePaths.sort();\n }\n\n /**\n * For a given ts.Identifier that is part of an AstSymbol that we analyzed, return the CollectorEntity that\n * it refers to. Returns undefined if it doesn't refer to anything interesting.\n * @remarks\n * Throws an Error if the ts.Identifier is not part of node tree that was analyzed.\n */\n public tryGetEntityForNode(identifier: ts.Identifier | ts.ImportTypeNode): CollectorEntity | undefined {\n const astEntity: AstEntity | undefined = this.astSymbolTable.tryGetEntityForNode(identifier);\n if (astEntity) {\n return this._entitiesByAstEntity.get(astEntity);\n }\n return undefined;\n }\n\n /**\n * For a given analyzed ts.Symbol, return the CollectorEntity that it refers to. Returns undefined if it\n * doesn't refer to anything interesting.\n */\n public tryGetEntityForSymbol(symbol: ts.Symbol): CollectorEntity | undefined {\n return this._entitiesBySymbol.get(symbol);\n }\n\n /**\n * Returns the associated `CollectorEntity` for the given `astEntity`, if one was created during analysis.\n */\n public tryGetCollectorEntity(astEntity: AstEntity): CollectorEntity | undefined {\n return this._entitiesByAstEntity.get(astEntity);\n }\n\n public fetchSymbolMetadata(astSymbol: AstSymbol): SymbolMetadata {\n if (astSymbol.symbolMetadata === undefined) {\n this._fetchSymbolMetadata(astSymbol);\n }\n return astSymbol.symbolMetadata as SymbolMetadata;\n }\n\n public fetchDeclarationMetadata(astDeclaration: AstDeclaration): DeclarationMetadata {\n if (astDeclaration.declarationMetadata === undefined) {\n // Fetching the SymbolMetadata always constructs the DeclarationMetadata\n this._fetchSymbolMetadata(astDeclaration.astSymbol);\n }\n return astDeclaration.declarationMetadata as DeclarationMetadata;\n }\n\n public fetchApiItemMetadata(astDeclaration: AstDeclaration): ApiItemMetadata {\n if (astDeclaration.apiItemMetadata === undefined) {\n // Fetching the SymbolMetadata always constructs the ApiItemMetadata\n this._fetchSymbolMetadata(astDeclaration.astSymbol);\n }\n return astDeclaration.apiItemMetadata as ApiItemMetadata;\n }\n\n public tryFetchMetadataForAstEntity(astEntity: AstEntity): SymbolMetadata | undefined {\n if (astEntity instanceof AstSymbol) {\n return this.fetchSymbolMetadata(astEntity);\n }\n if (astEntity instanceof AstImport) {\n if (astEntity.astSymbol) {\n return this.fetchSymbolMetadata(astEntity.astSymbol);\n }\n }\n return undefined;\n }\n\n public isAncillaryDeclaration(astDeclaration: AstDeclaration): boolean {\n const declarationMetadata: DeclarationMetadata = this.fetchDeclarationMetadata(astDeclaration);\n return declarationMetadata.isAncillary;\n }\n\n public getNonAncillaryDeclarations(astSymbol: AstSymbol): ReadonlyArray<AstDeclaration> {\n const result: AstDeclaration[] = [];\n for (const astDeclaration of astSymbol.astDeclarations) {\n const declarationMetadata: DeclarationMetadata = this.fetchDeclarationMetadata(astDeclaration);\n if (!declarationMetadata.isAncillary) {\n result.push(astDeclaration);\n }\n }\n return result;\n }\n\n /**\n * Removes the leading underscore, for example: \"_Example\" --> \"example*Example*_\"\n *\n * @remarks\n * This causes internal definitions to sort alphabetically case-insensitive, then case-sensitive, and\n * initially ignoring the underscore prefix, while still deterministically comparing it.\n * The star is used as a delimiter because it is not a legal identifier character.\n */\n public static getSortKeyIgnoringUnderscore(identifier: string | undefined): string {\n if (!identifier) return '';\n\n let parts: string[];\n\n if (identifier[0] === '_') {\n const withoutUnderscore: string = identifier.substr(1);\n parts = [withoutUnderscore.toLowerCase(), '*', withoutUnderscore, '*', '_'];\n } else {\n parts = [identifier.toLowerCase(), '*', identifier];\n }\n\n return parts.join('');\n }\n\n /**\n * For function-like signatures, this returns the TSDoc \"overload index\" which can be used to identify\n * a specific overload.\n */\n public getOverloadIndex(astDeclaration: AstDeclaration): number {\n const allDeclarations: ReadonlyArray<AstDeclaration> = astDeclaration.astSymbol.astDeclarations;\n if (allDeclarations.length === 1) {\n return 1; // trivial case\n }\n\n let overloadIndex: number | undefined = this._cachedOverloadIndexesByDeclaration.get(astDeclaration);\n\n if (overloadIndex === undefined) {\n // TSDoc index selectors are positive integers counting from 1\n let nextIndex: number = 1;\n for (const other of allDeclarations) {\n // Filter out other declarations that are not overloads. For example, an overloaded function can also\n // be a namespace.\n if (other.declaration.kind === astDeclaration.declaration.kind) {\n this._cachedOverloadIndexesByDeclaration.set(other, nextIndex);\n ++nextIndex;\n }\n }\n overloadIndex = this._cachedOverloadIndexesByDeclaration.get(astDeclaration);\n }\n\n if (overloadIndex === undefined) {\n // This should never happen\n throw new InternalError('Error calculating overload index for declaration');\n }\n\n return overloadIndex;\n }\n\n private _createCollectorEntity(\n astEntity: AstEntity,\n exportName?: string,\n parent?: CollectorEntity\n ): CollectorEntity {\n let entity: CollectorEntity | undefined = this._entitiesByAstEntity.get(astEntity);\n\n if (!entity) {\n entity = new CollectorEntity(astEntity);\n\n this._entitiesByAstEntity.set(astEntity, entity);\n if (astEntity instanceof AstSymbol) {\n this._entitiesBySymbol.set(astEntity.followedSymbol, entity);\n } else if (astEntity instanceof AstNamespaceImport) {\n this._entitiesBySymbol.set(astEntity.symbol, entity);\n }\n this._entities.push(entity);\n this._collectReferenceDirectives(astEntity);\n }\n\n if (exportName) {\n if (parent) {\n entity.addLocalExportName(exportName, parent);\n } else {\n entity.addExportName(exportName);\n }\n }\n\n return entity;\n }\n\n private _recursivelyCreateEntities(astEntity: AstEntity, alreadySeenAstEntities: Set<AstEntity>): void {\n if (alreadySeenAstEntities.has(astEntity)) return;\n alreadySeenAstEntities.add(astEntity);\n\n if (astEntity instanceof AstSymbol) {\n astEntity.forEachDeclarationRecursive((astDeclaration: AstDeclaration) => {\n for (const referencedAstEntity of astDeclaration.referencedAstEntities) {\n if (referencedAstEntity instanceof AstSymbol) {\n // We only create collector entities for root-level symbols. For example, if a symbol is\n // nested inside a namespace, only the namespace gets a collector entity. Note that this\n // is not true for AstNamespaceImports below.\n if (referencedAstEntity.parentAstSymbol === undefined) {\n this._createCollectorEntity(referencedAstEntity);\n }\n } else {\n this._createCollectorEntity(referencedAstEntity);\n }\n\n this._recursivelyCreateEntities(referencedAstEntity, alreadySeenAstEntities);\n }\n });\n }\n\n if (astEntity instanceof AstNamespaceImport) {\n const astModuleExportInfo: IAstModuleExportInfo = astEntity.fetchAstModuleExportInfo(this);\n const parentEntity: CollectorEntity | undefined = this._entitiesByAstEntity.get(astEntity);\n if (!parentEntity) {\n // This should never happen, as we've already created entities for all AstNamespaceImports.\n throw new InternalError(\n `Failed to get CollectorEntity for AstNamespaceImport with namespace name \"${astEntity.namespaceName}\"`\n );\n }\n\n for (const [localExportName, localAstEntity] of astModuleExportInfo.exportedLocalEntities) {\n // Create a CollectorEntity for each local export within an AstNamespaceImport entity.\n this._createCollectorEntity(localAstEntity, localExportName, parentEntity);\n this._recursivelyCreateEntities(localAstEntity, alreadySeenAstEntities);\n }\n }\n }\n\n /**\n * Ensures a unique name for each item in the package typings file.\n */\n private _makeUniqueNames(): void {\n // The following examples illustrate the nameForEmit heuristics:\n //\n // Example 1:\n // class X { } <--- nameForEmit should be \"A\" to simplify things and reduce possibility of conflicts\n // export { X as A };\n //\n // Example 2:\n // class X { } <--- nameForEmit should be \"X\" because choosing A or B would be nondeterministic\n // export { X as A };\n // export { X as B };\n //\n // Example 3:\n // class X { } <--- nameForEmit should be \"X_1\" because Y has a stronger claim to the name\n // export { X as A };\n // export { X as B };\n // class Y { } <--- nameForEmit should be \"X\"\n // export { Y as X };\n\n // Set of names that should NOT be used when generating a unique nameForEmit\n const usedNames: Set<string> = new Set<string>();\n\n // First collect the names of explicit package exports, and perform a sanity check.\n for (const entity of this._entities) {\n for (const exportName of entity.exportNames) {\n if (usedNames.has(exportName)) {\n // This should be impossible\n throw new InternalError(`A package cannot have two exports with the name \"${exportName}\"`);\n }\n usedNames.add(exportName);\n }\n }\n\n // Ensure that each entity has a unique nameForEmit\n for (const entity of this._entities) {\n // What name would we ideally want to emit it as?\n let idealNameForEmit: string;\n\n // If this entity is exported exactly once, then we prefer the exported name\n if (\n entity.singleExportName !== undefined &&\n entity.singleExportName !== ts.InternalSymbolName.Default\n ) {\n idealNameForEmit = entity.singleExportName;\n } else {\n // otherwise use the local name\n idealNameForEmit = entity.astEntity.localName;\n }\n\n if (idealNameForEmit.includes('.')) {\n // For an ImportType with a namespace chain, only the top namespace is imported.\n idealNameForEmit = idealNameForEmit.split('.')[0];\n }\n\n // If the idealNameForEmit happens to be the same as one of the exports, then we're safe to use that...\n if (entity.exportNames.has(idealNameForEmit)) {\n // ...except that if it conflicts with a global name, then the global name wins\n if (!this.globalVariableAnalyzer.hasGlobalName(idealNameForEmit)) {\n // ...also avoid \"default\" which can interfere with \"export { default } from 'some-module;'\"\n if (idealNameForEmit !== 'default') {\n entity.nameForEmit = idealNameForEmit;\n continue;\n }\n }\n }\n\n // Generate a unique name based on idealNameForEmit\n let suffix: number = 1;\n let nameForEmit: string = idealNameForEmit;\n\n // Choose a name that doesn't conflict with usedNames or a global name\n while (\n nameForEmit === 'default' ||\n usedNames.has(nameForEmit) ||\n this.globalVariableAnalyzer.hasGlobalName(nameForEmit)\n ) {\n nameForEmit = `${idealNameForEmit}_${++suffix}`;\n }\n entity.nameForEmit = nameForEmit;\n usedNames.add(nameForEmit);\n }\n }\n\n private _fetchSymbolMetadata(astSymbol: AstSymbol): void {\n if (astSymbol.symbolMetadata) {\n return;\n }\n\n // When we solve an astSymbol, then we always also solve all of its parents and all of its declarations.\n // The parent is solved first.\n if (astSymbol.parentAstSymbol && astSymbol.parentAstSymbol.symbolMetadata === undefined) {\n this._fetchSymbolMetadata(astSymbol.parentAstSymbol);\n }\n\n // Construct the DeclarationMetadata objects, and detect any ancillary declarations\n this._calculateDeclarationMetadataForDeclarations(astSymbol);\n\n // Calculate the ApiItemMetadata objects\n for (const astDeclaration of astSymbol.astDeclarations) {\n this._calculateApiItemMetadata(astDeclaration);\n }\n\n // The most public effectiveReleaseTag for all declarations\n let maxEffectiveReleaseTag: ReleaseTag = ReleaseTag.None;\n\n for (const astDeclaration of astSymbol.astDeclarations) {\n // We know we solved this above\n const apiItemMetadata: ApiItemMetadata = astDeclaration.apiItemMetadata as ApiItemMetadata;\n\n const effectiveReleaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n if (effectiveReleaseTag > maxEffectiveReleaseTag) {\n maxEffectiveReleaseTag = effectiveReleaseTag;\n }\n }\n\n // Update this last when we're sure no exceptions were thrown\n astSymbol.symbolMetadata = new SymbolMetadata({\n maxEffectiveReleaseTag\n });\n }\n\n private _calculateDeclarationMetadataForDeclarations(astSymbol: AstSymbol): void {\n // Initialize DeclarationMetadata for each declaration\n for (const astDeclaration of astSymbol.astDeclarations) {\n if (astDeclaration.declarationMetadata) {\n throw new InternalError(\n 'AstDeclaration.declarationMetadata is not expected to have been initialized yet'\n );\n }\n\n const metadata: InternalDeclarationMetadata = new InternalDeclarationMetadata();\n metadata.tsdocParserContext = this._parseTsdocForAstDeclaration(astDeclaration);\n\n astDeclaration.declarationMetadata = metadata;\n }\n\n // Detect ancillary declarations\n for (const astDeclaration of astSymbol.astDeclarations) {\n // For a getter/setter pair, make the setter ancillary to the getter\n if (astDeclaration.declaration.kind === ts.SyntaxKind.SetAccessor) {\n let foundGetter: boolean = false;\n for (const getterAstDeclaration of astDeclaration.astSymbol.astDeclarations) {\n if (getterAstDeclaration.declaration.kind === ts.SyntaxKind.GetAccessor) {\n // Associate it with the getter\n this._addAncillaryDeclaration(getterAstDeclaration, astDeclaration);\n\n foundGetter = true;\n }\n }\n\n if (!foundGetter) {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.MissingGetter,\n `The property \"${astDeclaration.astSymbol.localName}\" has a setter but no getter.`,\n astDeclaration\n );\n }\n }\n }\n }\n\n private _addAncillaryDeclaration(\n mainAstDeclaration: AstDeclaration,\n ancillaryAstDeclaration: AstDeclaration\n ): void {\n const mainMetadata: InternalDeclarationMetadata =\n mainAstDeclaration.declarationMetadata as InternalDeclarationMetadata;\n const ancillaryMetadata: InternalDeclarationMetadata =\n ancillaryAstDeclaration.declarationMetadata as InternalDeclarationMetadata;\n\n if (mainMetadata.ancillaryDeclarations.indexOf(ancillaryAstDeclaration) >= 0) {\n return; // already added\n }\n\n if (mainAstDeclaration.astSymbol !== ancillaryAstDeclaration.astSymbol) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because declarations do not' +\n ' belong to the same symbol'\n );\n }\n\n if (mainMetadata.isAncillary) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because the target is ancillary itself'\n );\n }\n\n if (ancillaryMetadata.isAncillary) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because source is already ancillary' +\n ' to another declaration'\n );\n }\n\n if (mainAstDeclaration.apiItemMetadata || ancillaryAstDeclaration.apiItemMetadata) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because the API item metadata' +\n ' has already been constructed'\n );\n }\n\n ancillaryMetadata.isAncillary = true;\n mainMetadata.ancillaryDeclarations.push(ancillaryAstDeclaration);\n }\n\n private _calculateApiItemMetadata(astDeclaration: AstDeclaration): void {\n const declarationMetadata: InternalDeclarationMetadata =\n astDeclaration.declarationMetadata as InternalDeclarationMetadata;\n if (declarationMetadata.isAncillary) {\n if (astDeclaration.declaration.kind === ts.SyntaxKind.SetAccessor) {\n if (declarationMetadata.tsdocParserContext) {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.SetterWithDocs,\n `The doc comment for the property \"${astDeclaration.astSymbol.localName}\"` +\n ` must appear on the getter, not the setter.`,\n astDeclaration\n );\n }\n }\n\n // We never calculate ApiItemMetadata for an ancillary declaration; instead, it is assigned when\n // the main declaration is processed.\n return;\n }\n\n const options: IApiItemMetadataOptions = {\n declaredReleaseTag: ReleaseTag.None,\n effectiveReleaseTag: ReleaseTag.None,\n isEventProperty: false,\n isOverride: false,\n isSealed: false,\n isVirtual: false,\n isPreapproved: false,\n releaseTagSameAsParent: false\n };\n\n const parserContext: tsdoc.ParserContext | undefined = declarationMetadata.tsdocParserContext;\n if (parserContext) {\n const modifierTagSet: tsdoc.StandardModifierTagSet = parserContext.docComment.modifierTagSet;\n\n let declaredReleaseTag: ReleaseTag = ReleaseTag.None;\n let extraReleaseTags: boolean = false;\n\n if (modifierTagSet.isPublic()) {\n declaredReleaseTag = ReleaseTag.Public;\n }\n if (modifierTagSet.isBeta()) {\n if (declaredReleaseTag !== ReleaseTag.None) {\n extraReleaseTags = true;\n } else {\n declaredReleaseTag = ReleaseTag.Beta;\n }\n }\n if (modifierTagSet.isAlpha()) {\n if (declaredReleaseTag !== ReleaseTag.None) {\n extraReleaseTags = true;\n } else {\n declaredReleaseTag = ReleaseTag.Alpha;\n }\n }\n if (modifierTagSet.isInternal()) {\n if (declaredReleaseTag !== ReleaseTag.None) {\n extraReleaseTags = true;\n } else {\n declaredReleaseTag = ReleaseTag.Internal;\n }\n }\n\n if (extraReleaseTags) {\n if (!astDeclaration.astSymbol.isExternal) {\n // for now, don't report errors for external code\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.ExtraReleaseTag,\n 'The doc comment should not contain more than one release tag',\n astDeclaration\n );\n }\n }\n\n options.declaredReleaseTag = declaredReleaseTag;\n\n options.isEventProperty = modifierTagSet.isEventProperty();\n options.isOverride = modifierTagSet.isOverride();\n options.isSealed = modifierTagSet.isSealed();\n options.isVirtual = modifierTagSet.isVirtual();\n const preapprovedTag: tsdoc.TSDocTagDefinition | void =\n this.extractorConfig.tsdocConfiguration.tryGetTagDefinition('@preapproved');\n\n if (preapprovedTag && modifierTagSet.hasTag(preapprovedTag)) {\n // This feature only makes sense for potentially big declarations.\n switch (astDeclaration.declaration.kind) {\n case ts.SyntaxKind.ClassDeclaration:\n case ts.SyntaxKind.EnumDeclaration:\n case ts.SyntaxKind.InterfaceDeclaration:\n case ts.SyntaxKind.ModuleDeclaration:\n if (declaredReleaseTag === ReleaseTag.Internal) {\n options.isPreapproved = true;\n } else {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.PreapprovedBadReleaseTag,\n `The @preapproved tag cannot be applied to \"${astDeclaration.astSymbol.localName}\"` +\n ` without an @internal release tag`,\n astDeclaration\n );\n }\n break;\n default:\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.PreapprovedUnsupportedType,\n `The @preapproved tag cannot be applied to \"${astDeclaration.astSymbol.localName}\"` +\n ` because it is not a supported declaration type`,\n astDeclaration\n );\n break;\n }\n }\n }\n\n // This needs to be set regardless of whether or not a parserContext exists\n if (astDeclaration.parent) {\n const parentApiItemMetadata: ApiItemMetadata = this.fetchApiItemMetadata(astDeclaration.parent);\n options.effectiveReleaseTag =\n options.declaredReleaseTag === ReleaseTag.None\n ? parentApiItemMetadata.effectiveReleaseTag\n : options.declaredReleaseTag;\n\n options.releaseTagSameAsParent =\n parentApiItemMetadata.effectiveReleaseTag === options.effectiveReleaseTag;\n } else {\n options.effectiveReleaseTag = options.declaredReleaseTag;\n }\n\n if (options.effectiveReleaseTag === ReleaseTag.None) {\n if (!astDeclaration.astSymbol.isExternal) {\n // for now, don't report errors for external code\n // Don't report missing release tags for forgotten exports (unless we're including forgotten exports\n // in either the API report or doc model).\n const astSymbol: AstSymbol = astDeclaration.astSymbol;\n const entity: CollectorEntity | undefined = this._entitiesByAstEntity.get(astSymbol.rootAstSymbol);\n if (\n entity &&\n (entity.consumable ||\n this.extractorConfig.apiReportIncludeForgottenExports ||\n this.extractorConfig.docModelIncludeForgottenExports)\n ) {\n // We also don't report errors for the default export of an entry point, since its doc comment\n // isn't easy to obtain from the .d.ts file\n if (astSymbol.rootAstSymbol.localName !== '_default') {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.MissingReleaseTag,\n `\"${entity.astEntity.localName}\" is part of the package's API, but it is missing ` +\n `a release tag (@alpha, @beta, @public, or @internal)`,\n astSymbol\n );\n }\n }\n }\n\n options.effectiveReleaseTag = ReleaseTag.Public;\n }\n\n const apiItemMetadata: ApiItemMetadata = new ApiItemMetadata(options);\n if (parserContext) {\n apiItemMetadata.tsdocComment = parserContext.docComment;\n }\n\n astDeclaration.apiItemMetadata = apiItemMetadata;\n\n // Lastly, share the result with any ancillary declarations\n for (const ancillaryDeclaration of declarationMetadata.ancillaryDeclarations) {\n ancillaryDeclaration.apiItemMetadata = apiItemMetadata;\n }\n }\n\n private _parseTsdocForAstDeclaration(astDeclaration: AstDeclaration): tsdoc.ParserContext | undefined {\n const declaration: ts.Declaration = astDeclaration.declaration;\n let nodeForComment: ts.Node = declaration;\n\n if (ts.isVariableDeclaration(declaration)) {\n // Variable declarations are special because they can be combined into a list. For example:\n //\n // /** A */ export /** B */ const /** C */ x = 1, /** D **/ [ /** E */ y, z] = [3, 4];\n //\n // The compiler will only emit comments A and C in the .d.ts file, so in general there isn't a well-defined\n // way to document these parts. API Extractor requires you to break them into separate exports like this:\n //\n // /** A */ export const x = 1;\n //\n // But _getReleaseTagForDeclaration() still receives a node corresponding to \"x\", so we need to walk upwards\n // and find the containing statement in order for getJSDocCommentRanges() to read the comment that we expect.\n const statement: ts.VariableStatement | undefined = TypeScriptHelpers.findFirstParent(\n declaration,\n ts.SyntaxKind.VariableStatement\n ) as ts.VariableStatement | undefined;\n if (statement !== undefined) {\n // For a compound declaration, fall back to looking for C instead of A\n if (statement.declarationList.declarations.length === 1) {\n nodeForComment = statement;\n }\n }\n }\n\n const sourceFileText: string = declaration.getSourceFile().text;\n const ranges: ts.CommentRange[] =\n TypeScriptInternals.getJSDocCommentRanges(nodeForComment, sourceFileText) || [];\n\n if (ranges.length === 0) {\n return undefined;\n }\n\n // We use the JSDoc comment block that is closest to the definition, i.e.\n // the last one preceding it\n const range: ts.TextRange = ranges[ranges.length - 1];\n\n const tsdocTextRange: tsdoc.TextRange = tsdoc.TextRange.fromStringRange(\n sourceFileText,\n range.pos,\n range.end\n );\n\n const parserContext: tsdoc.ParserContext = this._tsdocParser.parseRange(tsdocTextRange);\n\n this.messageRouter.addTsdocMessages(parserContext, declaration.getSourceFile(), astDeclaration);\n\n // We delete the @privateRemarks block as early as possible, to ensure that it never leaks through\n // into one of the output files.\n parserContext.docComment.privateRemarks = undefined;\n\n return parserContext;\n }\n\n private _collectReferenceDirectives(astEntity: AstEntity): void {\n // Here, we're collecting reference directives from source files that contain extracted\n // definitions (i.e. - files that contain `export class ...`, `export interface ...`, ...).\n // These references may or may not include the `preserve=\"true\" attribute. In TS < 5.5,\n // references that end up in .D.TS files may or may not be explicity written by the developer.\n // In TS >= 5.5, only references that are explicitly authored and are marked with\n // `preserve=\"true\"` are included in the output. See https://github.com/microsoft/TypeScript/pull/57681\n //\n // The calls to `_collectReferenceDirectivesFromSourceFiles` in this function are\n // preserving existing behavior, which is to include all reference directives\n // regardless of whether they are explicitly authored or not, but only in files that\n // contain definitions.\n\n if (astEntity instanceof AstSymbol) {\n const sourceFiles: ts.SourceFile[] = astEntity.astDeclarations.map((astDeclaration) =>\n astDeclaration.declaration.getSourceFile()\n );\n return this._collectReferenceDirectivesFromSourceFiles(sourceFiles, false);\n }\n\n if (astEntity instanceof AstNamespaceImport) {\n const sourceFiles: ts.SourceFile[] = [astEntity.astModule.sourceFile];\n return this._collectReferenceDirectivesFromSourceFiles(sourceFiles, false);\n }\n }\n\n private _collectReferenceDirectivesFromSourceFiles(\n sourceFiles: Iterable<ts.SourceFile>,\n onlyIncludeExplicitlyPreserved: boolean\n ): void {\n const seenFilenames: Set<string> = new Set<string>();\n\n for (const sourceFile of sourceFiles) {\n if (sourceFile?.fileName) {\n const {\n fileName,\n typeReferenceDirectives,\n libReferenceDirectives,\n text: sourceFileText\n } = sourceFile;\n if (!seenFilenames.has(fileName)) {\n seenFilenames.add(fileName);\n\n for (const typeReferenceDirective of typeReferenceDirectives) {\n const name: string | undefined = this._getReferenceDirectiveFromSourceFile(\n sourceFileText,\n typeReferenceDirective,\n onlyIncludeExplicitlyPreserved\n );\n if (name) {\n this._dtsTypeReferenceDirectives.add(name);\n }\n }\n\n for (const libReferenceDirective of libReferenceDirectives) {\n const reference: string | undefined = this._getReferenceDirectiveFromSourceFile(\n sourceFileText,\n libReferenceDirective,\n onlyIncludeExplicitlyPreserved\n );\n if (reference) {\n this._dtsLibReferenceDirectives.add(reference);\n }\n }\n }\n }\n }\n }\n\n private _getReferenceDirectiveFromSourceFile(\n sourceFileText: string,\n { pos, end, preserve }: ts.FileReference,\n onlyIncludeExplicitlyPreserved: boolean\n ): string | undefined {\n const reference: string = sourceFileText.substring(pos, end);\n if (preserve || !onlyIncludeExplicitlyPreserved) {\n return reference;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Collector.js","sourceRoot":"","sources":["../../src/collector/Collector.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 * as tsdoc from '@microsoft/tsdoc';\nimport {\n PackageJsonLookup,\n Sort,\n InternalError,\n type INodePackageJson,\n PackageName\n} from '@rushstack/node-core-library';\nimport { ReleaseTag } from '@microsoft/api-extractor-model';\nimport { minimatch } from 'minimatch';\n\nimport { ExtractorMessageId } from '../api/ExtractorMessageId';\n\nimport { CollectorEntity } from './CollectorEntity';\nimport { AstSymbolTable } from '../analyzer/AstSymbolTable';\nimport type { AstEntity } from '../analyzer/AstEntity';\nimport type { AstModule, IAstModuleExportInfo } from '../analyzer/AstModule';\nimport { AstSymbol } from '../analyzer/AstSymbol';\nimport type { AstDeclaration } from '../analyzer/AstDeclaration';\nimport { TypeScriptHelpers } from '../analyzer/TypeScriptHelpers';\nimport { WorkingPackage } from './WorkingPackage';\nimport { PackageDocComment } from '../aedoc/PackageDocComment';\nimport { type DeclarationMetadata, InternalDeclarationMetadata } from './DeclarationMetadata';\nimport { ApiItemMetadata, type IApiItemMetadataOptions } from './ApiItemMetadata';\nimport { SymbolMetadata } from './SymbolMetadata';\nimport { TypeScriptInternals, type IGlobalVariableAnalyzer } from '../analyzer/TypeScriptInternals';\nimport type { MessageRouter } from './MessageRouter';\nimport { AstReferenceResolver } from '../analyzer/AstReferenceResolver';\nimport { ExtractorConfig } from '../api/ExtractorConfig';\nimport { AstNamespaceImport } from '../analyzer/AstNamespaceImport';\nimport { AstImport } from '../analyzer/AstImport';\nimport type { SourceMapper } from './SourceMapper';\n\n/**\n * Options for Collector constructor.\n */\nexport interface ICollectorOptions {\n /**\n * Configuration for the TypeScript compiler. The most important options to set are:\n *\n * - target: ts.ScriptTarget.ES5\n * - module: ts.ModuleKind.CommonJS\n * - moduleResolution: ts.ModuleResolutionKind.NodeJs\n * - rootDir: inputFolder\n */\n program: ts.Program;\n\n messageRouter: MessageRouter;\n\n extractorConfig: ExtractorConfig;\n\n sourceMapper: SourceMapper;\n}\n\n/**\n * The `Collector` manages the overall data set that is used by `ApiModelGenerator`,\n * `DtsRollupGenerator`, and `ApiReportGenerator`. Starting from the working package's entry point,\n * the `Collector` collects all exported symbols, determines how to import any symbols they reference,\n * assigns unique names, and sorts everything into a normalized alphabetical ordering.\n */\nexport class Collector {\n public readonly program: ts.Program;\n public readonly typeChecker: ts.TypeChecker;\n public readonly globalVariableAnalyzer: IGlobalVariableAnalyzer;\n public readonly astSymbolTable: AstSymbolTable;\n public readonly astReferenceResolver: AstReferenceResolver;\n\n public readonly packageJsonLookup: PackageJsonLookup;\n public readonly messageRouter: MessageRouter;\n\n public readonly workingPackage: WorkingPackage;\n\n public readonly extractorConfig: ExtractorConfig;\n\n public readonly sourceMapper: SourceMapper;\n\n /**\n * The `ExtractorConfig.bundledPackages` names in a set.\n */\n public readonly bundledPackageNames: ReadonlySet<string>;\n\n private readonly _program: ts.Program;\n\n private readonly _tsdocParser: tsdoc.TSDocParser;\n\n private _astEntryPoint: AstModule | undefined;\n\n private readonly _entities: CollectorEntity[] = [];\n private readonly _entitiesByAstEntity: Map<AstEntity, CollectorEntity> = new Map<\n AstEntity,\n CollectorEntity\n >();\n private readonly _entitiesBySymbol: Map<ts.Symbol, CollectorEntity> = new Map<ts.Symbol, CollectorEntity>();\n\n private readonly _starExportedExternalModulePaths: string[] = [];\n\n private readonly _dtsTypeReferenceDirectives: Set<string> = new Set<string>();\n private readonly _dtsLibReferenceDirectives: Set<string> = new Set<string>();\n\n // Used by getOverloadIndex()\n private readonly _cachedOverloadIndexesByDeclaration: Map<AstDeclaration, number>;\n\n public constructor(options: ICollectorOptions) {\n this.packageJsonLookup = new PackageJsonLookup();\n\n this._program = options.program;\n this.extractorConfig = options.extractorConfig;\n this.sourceMapper = options.sourceMapper;\n\n const entryPointSourceFile: ts.SourceFile | undefined = options.program.getSourceFile(\n this.extractorConfig.mainEntryPointFilePath\n );\n\n if (!entryPointSourceFile) {\n throw new Error('Unable to load file: ' + this.extractorConfig.mainEntryPointFilePath);\n }\n\n if (!this.extractorConfig.packageFolder || !this.extractorConfig.packageJson) {\n // TODO: We should be able to analyze projects that don't have any package.json.\n // The ExtractorConfig class is already designed to allow this.\n throw new Error('Unable to find a package.json file for the project being analyzed');\n }\n\n this.workingPackage = new WorkingPackage({\n packageFolder: this.extractorConfig.packageFolder,\n packageJson: this.extractorConfig.packageJson,\n entryPointSourceFile\n });\n\n this.messageRouter = options.messageRouter;\n\n this.program = options.program;\n this.typeChecker = options.program.getTypeChecker();\n this.globalVariableAnalyzer = TypeScriptInternals.getGlobalVariableAnalyzer(this.program);\n\n this._tsdocParser = new tsdoc.TSDocParser(this.extractorConfig.tsdocConfiguration);\n\n // Resolve package name patterns and store concrete set of bundled package dependency names\n this.bundledPackageNames = Collector._resolveBundledPackagePatterns(\n this.extractorConfig.bundledPackages,\n this.extractorConfig.packageJson\n );\n\n this.astSymbolTable = new AstSymbolTable(\n this.program,\n this.typeChecker,\n this.packageJsonLookup,\n this.bundledPackageNames,\n this.messageRouter\n );\n this.astReferenceResolver = new AstReferenceResolver(this);\n\n this._cachedOverloadIndexesByDeclaration = new Map<AstDeclaration, number>();\n }\n\n /**\n * Resolve provided `bundledPackages` names and glob patterns to a list of explicit package names.\n *\n * @remarks\n * Explicit package names will be included in the output unconditionally. However, wildcard patterns will\n * only be matched against the various dependencies listed in the provided package.json (if there was one).\n * Patterns will be matched against `dependencies`, `devDependencies`, `optionalDependencies`, and `peerDependencies`.\n *\n * @param bundledPackages - The list of package names and/or glob patterns to resolve.\n * @param packageJson - The package.json of the package being processed (if there is one).\n * @returns The set of resolved package names to be bundled during analysis.\n */\n private static _resolveBundledPackagePatterns(\n bundledPackages: string[],\n packageJson: INodePackageJson | undefined\n ): ReadonlySet<string> {\n if (bundledPackages.length === 0) {\n // If no `bundledPackages` were specified, then there is nothing to resolve.\n // Return an empty set.\n return new Set<string>();\n }\n\n // Accumulate all declared dependencies.\n // Any wildcard patterns in `bundledPackages` will be resolved against these.\n const dependencyNames: Set<string> = new Set<string>();\n Object.keys(packageJson?.dependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n Object.keys(packageJson?.devDependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n Object.keys(packageJson?.peerDependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n Object.keys(packageJson?.optionalDependencies ?? {}).forEach((dep) => dependencyNames.add(dep));\n\n // The set of resolved package names to be populated and returned\n const resolvedPackageNames: Set<string> = new Set<string>();\n\n for (const packageNameOrPattern of bundledPackages) {\n // If the string is an exact package name, use it regardless of package.json contents\n if (PackageName.isValidName(packageNameOrPattern)) {\n resolvedPackageNames.add(packageNameOrPattern);\n } else {\n // If the entry isn't an exact package name, assume glob pattern and search for matches\n for (const dependencyName of dependencyNames) {\n if (minimatch(dependencyName, packageNameOrPattern)) {\n resolvedPackageNames.add(dependencyName);\n }\n }\n }\n }\n return resolvedPackageNames;\n }\n\n /**a\n * Returns a list of names (e.g. \"example-library\") that should appear in a reference like this:\n *\n * ```\n * /// <reference types=\"example-library\" />\n * ```\n */\n public get dtsTypeReferenceDirectives(): ReadonlySet<string> {\n return this._dtsTypeReferenceDirectives;\n }\n\n /**\n * A list of names (e.g. \"runtime-library\") that should appear in a reference like this:\n *\n * ```\n * /// <reference lib=\"runtime-library\" />\n * ```\n */\n public get dtsLibReferenceDirectives(): ReadonlySet<string> {\n return this._dtsLibReferenceDirectives;\n }\n\n public get entities(): ReadonlyArray<CollectorEntity> {\n return this._entities;\n }\n\n /**\n * A list of module specifiers (e.g. `\"@rushstack/node-core-library/lib/FileSystem\"`) that should be emitted\n * as star exports (e.g. `export * from \"@rushstack/node-core-library/lib/FileSystem\"`).\n */\n public get starExportedExternalModulePaths(): ReadonlyArray<string> {\n return this._starExportedExternalModulePaths;\n }\n\n /**\n * Perform the analysis.\n */\n public analyze(): void {\n if (this._astEntryPoint) {\n throw new Error('DtsRollupGenerator.analyze() was already called');\n }\n\n // This runs a full type analysis, and then augments the Abstract Syntax Tree (i.e. declarations)\n // with semantic information (i.e. symbols). The \"diagnostics\" are a subset of the everyday\n // compile errors that would result from a full compilation.\n for (const diagnostic of this._program.getSemanticDiagnostics()) {\n this.messageRouter.addCompilerDiagnostic(diagnostic);\n }\n\n const sourceFiles: readonly ts.SourceFile[] = this.program.getSourceFiles();\n\n if (this.messageRouter.showDiagnostics) {\n this.messageRouter.logDiagnosticHeader('Root filenames');\n for (const fileName of this.program.getRootFileNames()) {\n this.messageRouter.logDiagnostic(fileName);\n }\n this.messageRouter.logDiagnosticFooter();\n\n this.messageRouter.logDiagnosticHeader('Files analyzed by compiler');\n for (const sourceFile of sourceFiles) {\n this.messageRouter.logDiagnostic(sourceFile.fileName);\n }\n this.messageRouter.logDiagnosticFooter();\n }\n\n // We can throw this error earlier in CompilerState.ts, but intentionally wait until after we've logged the\n // associated diagnostic message above to make debugging easier for developers.\n // Typically there will be many such files -- to avoid too much noise, only report the first one.\n const badSourceFile: ts.SourceFile | undefined = sourceFiles.find(\n ({ fileName }) => !ExtractorConfig.hasDtsFileExtension(fileName)\n );\n if (badSourceFile) {\n this.messageRouter.addAnalyzerIssueForPosition(\n ExtractorMessageId.WrongInputFileType,\n 'Incorrect file type; API Extractor expects to analyze compiler outputs with the .d.ts file extension. ' +\n 'Troubleshooting tips: https://api-extractor.com/link/dts-error',\n badSourceFile,\n 0\n );\n }\n\n // Build the entry point\n const entryPointSourceFile: ts.SourceFile = this.workingPackage.entryPointSourceFile;\n\n const astEntryPoint: AstModule =\n this.astSymbolTable.fetchAstModuleFromWorkingPackage(entryPointSourceFile);\n this._astEntryPoint = astEntryPoint;\n\n const packageDocCommentTextRange: ts.TextRange | undefined = PackageDocComment.tryFindInSourceFile(\n entryPointSourceFile,\n this\n );\n\n if (packageDocCommentTextRange) {\n const range: tsdoc.TextRange = tsdoc.TextRange.fromStringRange(\n entryPointSourceFile.text,\n packageDocCommentTextRange.pos,\n packageDocCommentTextRange.end\n );\n\n this.workingPackage.tsdocParserContext = this._tsdocParser.parseRange(range);\n\n this.messageRouter.addTsdocMessages(this.workingPackage.tsdocParserContext, entryPointSourceFile);\n\n this.workingPackage.tsdocComment = this.workingPackage.tsdocParserContext!.docComment;\n }\n\n const { exportedLocalEntities, starExportedExternalModules, visitedAstModules }: IAstModuleExportInfo =\n this.astSymbolTable.fetchAstModuleExportInfo(astEntryPoint);\n\n // Create a CollectorEntity for each top-level export.\n const processedAstEntities: AstEntity[] = [];\n for (const [exportName, astEntity] of exportedLocalEntities) {\n this._createCollectorEntity(astEntity, exportName);\n processedAstEntities.push(astEntity);\n }\n\n // Recursively create the remaining CollectorEntities after the top-level entities\n // have been processed.\n const alreadySeenAstEntities: Set<AstEntity> = new Set<AstEntity>();\n for (const astEntity of processedAstEntities) {\n this._recursivelyCreateEntities(astEntity, alreadySeenAstEntities);\n if (astEntity instanceof AstSymbol) {\n this.fetchSymbolMetadata(astEntity);\n }\n }\n\n // Ensure references are collected from any intermediate files that\n // only include exports\n const nonExternalSourceFiles: Set<ts.SourceFile> = new Set();\n for (const { sourceFile, isExternal } of visitedAstModules) {\n if (!nonExternalSourceFiles.has(sourceFile) && !isExternal) {\n nonExternalSourceFiles.add(sourceFile);\n }\n }\n\n // Here, we're collecting reference directives from all non-external source files\n // that were encountered while looking for exports, but only those references that\n // were explicitly written by the developer and marked with the `preserve=\"true\"`\n // attribute. In TS >= 5.5, only references that are explicitly authored and marked\n // with `preserve=\"true\"` are included in the output. See https://github.com/microsoft/TypeScript/pull/57681\n //\n // The `_collectReferenceDirectives` function pulls in all references in files that\n // contain definitions, but does not examine files that only reexport from other\n // files. Here, we're looking through files that were missed by `_collectReferenceDirectives`,\n // but only collecting references that were explicitly marked with `preserve=\"true\"`.\n // It is intuitive for developers to include references that they explicitly want part of\n // their public API in a file like the entrypoint, which is likely to only contain reexports,\n // and this picks those up.\n this._collectReferenceDirectivesFromSourceFiles(nonExternalSourceFiles, true);\n\n this._makeUniqueNames();\n\n for (const starExportedExternalModule of starExportedExternalModules) {\n if (starExportedExternalModule.externalModulePath !== undefined) {\n this._starExportedExternalModulePaths.push(starExportedExternalModule.externalModulePath);\n }\n }\n\n Sort.sortBy(this._entities, (x) => x.getSortKey());\n Sort.sortSet(this._dtsTypeReferenceDirectives);\n Sort.sortSet(this._dtsLibReferenceDirectives);\n this._starExportedExternalModulePaths.sort();\n }\n\n /**\n * For a given ts.Identifier that is part of an AstSymbol that we analyzed, return the CollectorEntity that\n * it refers to. Returns undefined if it doesn't refer to anything interesting.\n * @remarks\n * Throws an Error if the ts.Identifier is not part of node tree that was analyzed.\n */\n public tryGetEntityForNode(identifier: ts.Identifier | ts.ImportTypeNode): CollectorEntity | undefined {\n const astEntity: AstEntity | undefined = this.astSymbolTable.tryGetEntityForNode(identifier);\n if (astEntity) {\n return this._entitiesByAstEntity.get(astEntity);\n }\n return undefined;\n }\n\n /**\n * For a given analyzed ts.Symbol, return the CollectorEntity that it refers to. Returns undefined if it\n * doesn't refer to anything interesting.\n */\n public tryGetEntityForSymbol(symbol: ts.Symbol): CollectorEntity | undefined {\n return this._entitiesBySymbol.get(symbol);\n }\n\n /**\n * Returns the associated `CollectorEntity` for the given `astEntity`, if one was created during analysis.\n */\n public tryGetCollectorEntity(astEntity: AstEntity): CollectorEntity | undefined {\n return this._entitiesByAstEntity.get(astEntity);\n }\n\n public fetchSymbolMetadata(astSymbol: AstSymbol): SymbolMetadata {\n if (astSymbol.symbolMetadata === undefined) {\n this._fetchSymbolMetadata(astSymbol);\n }\n return astSymbol.symbolMetadata as SymbolMetadata;\n }\n\n public fetchDeclarationMetadata(astDeclaration: AstDeclaration): DeclarationMetadata {\n if (astDeclaration.declarationMetadata === undefined) {\n // Fetching the SymbolMetadata always constructs the DeclarationMetadata\n this._fetchSymbolMetadata(astDeclaration.astSymbol);\n }\n return astDeclaration.declarationMetadata as DeclarationMetadata;\n }\n\n public fetchApiItemMetadata(astDeclaration: AstDeclaration): ApiItemMetadata {\n if (astDeclaration.apiItemMetadata === undefined) {\n // Fetching the SymbolMetadata always constructs the ApiItemMetadata\n this._fetchSymbolMetadata(astDeclaration.astSymbol);\n }\n return astDeclaration.apiItemMetadata as ApiItemMetadata;\n }\n\n public tryFetchMetadataForAstEntity(astEntity: AstEntity): SymbolMetadata | undefined {\n if (astEntity instanceof AstSymbol) {\n return this.fetchSymbolMetadata(astEntity);\n }\n if (astEntity instanceof AstImport) {\n if (astEntity.astSymbol) {\n return this.fetchSymbolMetadata(astEntity.astSymbol);\n }\n }\n return undefined;\n }\n\n public isAncillaryDeclaration(astDeclaration: AstDeclaration): boolean {\n const declarationMetadata: DeclarationMetadata = this.fetchDeclarationMetadata(astDeclaration);\n return declarationMetadata.isAncillary;\n }\n\n public getNonAncillaryDeclarations(astSymbol: AstSymbol): ReadonlyArray<AstDeclaration> {\n const result: AstDeclaration[] = [];\n for (const astDeclaration of astSymbol.astDeclarations) {\n const declarationMetadata: DeclarationMetadata = this.fetchDeclarationMetadata(astDeclaration);\n if (!declarationMetadata.isAncillary) {\n result.push(astDeclaration);\n }\n }\n return result;\n }\n\n /**\n * Removes the leading underscore, for example: \"_Example\" --> \"example*Example*_\"\n *\n * @remarks\n * This causes internal definitions to sort alphabetically case-insensitive, then case-sensitive, and\n * initially ignoring the underscore prefix, while still deterministically comparing it.\n * The star is used as a delimiter because it is not a legal identifier character.\n */\n public static getSortKeyIgnoringUnderscore(identifier: string | undefined): string {\n if (!identifier) return '';\n\n let parts: string[];\n\n if (identifier[0] === '_') {\n const withoutUnderscore: string = identifier.substr(1);\n parts = [withoutUnderscore.toLowerCase(), '*', withoutUnderscore, '*', '_'];\n } else {\n parts = [identifier.toLowerCase(), '*', identifier];\n }\n\n return parts.join('');\n }\n\n /**\n * For function-like signatures, this returns the TSDoc \"overload index\" which can be used to identify\n * a specific overload.\n */\n public getOverloadIndex(astDeclaration: AstDeclaration): number {\n const allDeclarations: ReadonlyArray<AstDeclaration> = astDeclaration.astSymbol.astDeclarations;\n if (allDeclarations.length === 1) {\n return 1; // trivial case\n }\n\n let overloadIndex: number | undefined = this._cachedOverloadIndexesByDeclaration.get(astDeclaration);\n\n if (overloadIndex === undefined) {\n // TSDoc index selectors are positive integers counting from 1\n let nextIndex: number = 1;\n for (const other of allDeclarations) {\n // Filter out other declarations that are not overloads. For example, an overloaded function can also\n // be a namespace.\n if (other.declaration.kind === astDeclaration.declaration.kind) {\n this._cachedOverloadIndexesByDeclaration.set(other, nextIndex);\n ++nextIndex;\n }\n }\n overloadIndex = this._cachedOverloadIndexesByDeclaration.get(astDeclaration);\n }\n\n if (overloadIndex === undefined) {\n // This should never happen\n throw new InternalError('Error calculating overload index for declaration');\n }\n\n return overloadIndex;\n }\n\n private _createCollectorEntity(\n astEntity: AstEntity,\n exportName?: string,\n parent?: CollectorEntity\n ): CollectorEntity {\n let entity: CollectorEntity | undefined = this._entitiesByAstEntity.get(astEntity);\n\n if (!entity) {\n entity = new CollectorEntity(astEntity);\n\n this._entitiesByAstEntity.set(astEntity, entity);\n if (astEntity instanceof AstSymbol) {\n this._entitiesBySymbol.set(astEntity.followedSymbol, entity);\n } else if (astEntity instanceof AstNamespaceImport) {\n this._entitiesBySymbol.set(astEntity.symbol, entity);\n }\n this._entities.push(entity);\n this._collectReferenceDirectives(astEntity);\n }\n\n if (exportName) {\n if (parent) {\n entity.addLocalExportName(exportName, parent);\n } else {\n entity.addExportName(exportName);\n }\n }\n\n return entity;\n }\n\n private _recursivelyCreateEntities(astEntity: AstEntity, alreadySeenAstEntities: Set<AstEntity>): void {\n if (alreadySeenAstEntities.has(astEntity)) return;\n alreadySeenAstEntities.add(astEntity);\n\n if (astEntity instanceof AstSymbol) {\n astEntity.forEachDeclarationRecursive((astDeclaration: AstDeclaration) => {\n for (const referencedAstEntity of astDeclaration.referencedAstEntities) {\n if (referencedAstEntity instanceof AstSymbol) {\n // We only create collector entities for root-level symbols. For example, if a symbol is\n // nested inside a namespace, only the namespace gets a collector entity. Note that this\n // is not true for AstNamespaceImports below.\n if (referencedAstEntity.parentAstSymbol === undefined) {\n this._createCollectorEntity(referencedAstEntity);\n }\n } else {\n this._createCollectorEntity(referencedAstEntity);\n }\n\n this._recursivelyCreateEntities(referencedAstEntity, alreadySeenAstEntities);\n }\n });\n }\n\n if (astEntity instanceof AstNamespaceImport) {\n const astModuleExportInfo: IAstModuleExportInfo = astEntity.fetchAstModuleExportInfo(this);\n const parentEntity: CollectorEntity | undefined = this._entitiesByAstEntity.get(astEntity);\n if (!parentEntity) {\n // This should never happen, as we've already created entities for all AstNamespaceImports.\n throw new InternalError(\n `Failed to get CollectorEntity for AstNamespaceImport with namespace name \"${astEntity.namespaceName}\"`\n );\n }\n\n for (const [localExportName, localAstEntity] of astModuleExportInfo.exportedLocalEntities) {\n // Create a CollectorEntity for each local export within an AstNamespaceImport entity.\n this._createCollectorEntity(localAstEntity, localExportName, parentEntity);\n this._recursivelyCreateEntities(localAstEntity, alreadySeenAstEntities);\n }\n }\n }\n\n /**\n * Ensures a unique name for each item in the package typings file.\n */\n private _makeUniqueNames(): void {\n // The following examples illustrate the nameForEmit heuristics:\n //\n // Example 1:\n // class X { } <--- nameForEmit should be \"A\" to simplify things and reduce possibility of conflicts\n // export { X as A };\n //\n // Example 2:\n // class X { } <--- nameForEmit should be \"X\" because choosing A or B would be nondeterministic\n // export { X as A };\n // export { X as B };\n //\n // Example 3:\n // class X { } <--- nameForEmit should be \"X_1\" because Y has a stronger claim to the name\n // export { X as A };\n // export { X as B };\n // class Y { } <--- nameForEmit should be \"X\"\n // export { Y as X };\n\n // Set of names that should NOT be used when generating a unique nameForEmit\n const usedNames: Set<string> = new Set<string>();\n\n // First collect the names of explicit package exports, and perform a sanity check.\n for (const entity of this._entities) {\n for (const exportName of entity.exportNames) {\n if (usedNames.has(exportName)) {\n // This should be impossible\n throw new InternalError(`A package cannot have two exports with the name \"${exportName}\"`);\n }\n usedNames.add(exportName);\n }\n }\n\n // Ensure that each entity has a unique nameForEmit\n for (const entity of this._entities) {\n // What name would we ideally want to emit it as?\n let idealNameForEmit: string;\n\n // If this entity is exported exactly once, then we prefer the exported name\n if (\n entity.singleExportName !== undefined &&\n entity.singleExportName !== ts.InternalSymbolName.Default\n ) {\n idealNameForEmit = entity.singleExportName;\n } else {\n // otherwise use the local name\n idealNameForEmit = entity.astEntity.localName;\n }\n\n if (idealNameForEmit.includes('.')) {\n // For an ImportType with a namespace chain, only the top namespace is imported.\n idealNameForEmit = idealNameForEmit.split('.')[0];\n }\n\n // If the idealNameForEmit happens to be the same as one of the exports, then we're safe to use that...\n if (entity.exportNames.has(idealNameForEmit)) {\n // ...except that if it conflicts with a global name, then the global name wins\n if (!this.globalVariableAnalyzer.hasGlobalName(idealNameForEmit)) {\n // ...also avoid \"default\" which can interfere with \"export { default } from 'some-module;'\"\n if (idealNameForEmit !== 'default') {\n entity.nameForEmit = idealNameForEmit;\n continue;\n }\n }\n }\n\n // Generate a unique name based on idealNameForEmit\n let suffix: number = 1;\n let nameForEmit: string = idealNameForEmit;\n\n // Choose a name that doesn't conflict with usedNames or a global name\n while (\n nameForEmit === 'default' ||\n usedNames.has(nameForEmit) ||\n this.globalVariableAnalyzer.hasGlobalName(nameForEmit)\n ) {\n nameForEmit = `${idealNameForEmit}_${++suffix}`;\n }\n entity.nameForEmit = nameForEmit;\n usedNames.add(nameForEmit);\n }\n }\n\n private _fetchSymbolMetadata(astSymbol: AstSymbol): void {\n if (astSymbol.symbolMetadata) {\n return;\n }\n\n // When we solve an astSymbol, then we always also solve all of its parents and all of its declarations.\n // The parent is solved first.\n if (astSymbol.parentAstSymbol && astSymbol.parentAstSymbol.symbolMetadata === undefined) {\n this._fetchSymbolMetadata(astSymbol.parentAstSymbol);\n }\n\n // Construct the DeclarationMetadata objects, and detect any ancillary declarations\n this._calculateDeclarationMetadataForDeclarations(astSymbol);\n\n // Calculate the ApiItemMetadata objects\n for (const astDeclaration of astSymbol.astDeclarations) {\n this._calculateApiItemMetadata(astDeclaration);\n }\n\n // The most public effectiveReleaseTag for all declarations\n let maxEffectiveReleaseTag: ReleaseTag = ReleaseTag.None;\n\n for (const astDeclaration of astSymbol.astDeclarations) {\n // We know we solved this above\n const apiItemMetadata: ApiItemMetadata = astDeclaration.apiItemMetadata as ApiItemMetadata;\n\n const effectiveReleaseTag: ReleaseTag = apiItemMetadata.effectiveReleaseTag;\n\n if (effectiveReleaseTag > maxEffectiveReleaseTag) {\n maxEffectiveReleaseTag = effectiveReleaseTag;\n }\n }\n\n // Update this last when we're sure no exceptions were thrown\n astSymbol.symbolMetadata = new SymbolMetadata({\n maxEffectiveReleaseTag\n });\n }\n\n private _calculateDeclarationMetadataForDeclarations(astSymbol: AstSymbol): void {\n // Initialize DeclarationMetadata for each declaration\n for (const astDeclaration of astSymbol.astDeclarations) {\n if (astDeclaration.declarationMetadata) {\n throw new InternalError(\n 'AstDeclaration.declarationMetadata is not expected to have been initialized yet'\n );\n }\n\n const metadata: InternalDeclarationMetadata = new InternalDeclarationMetadata();\n metadata.tsdocParserContext = this._parseTsdocForAstDeclaration(astDeclaration);\n\n astDeclaration.declarationMetadata = metadata;\n }\n\n // Detect ancillary declarations\n for (const astDeclaration of astSymbol.astDeclarations) {\n // For a getter/setter pair, make the setter ancillary to the getter\n if (astDeclaration.declaration.kind === ts.SyntaxKind.SetAccessor) {\n let foundGetter: boolean = false;\n for (const getterAstDeclaration of astDeclaration.astSymbol.astDeclarations) {\n if (getterAstDeclaration.declaration.kind === ts.SyntaxKind.GetAccessor) {\n // Associate it with the getter\n this._addAncillaryDeclaration(getterAstDeclaration, astDeclaration);\n\n foundGetter = true;\n }\n }\n\n if (!foundGetter) {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.MissingGetter,\n `The property \"${astDeclaration.astSymbol.localName}\" has a setter but no getter.`,\n astDeclaration\n );\n }\n }\n }\n }\n\n private _addAncillaryDeclaration(\n mainAstDeclaration: AstDeclaration,\n ancillaryAstDeclaration: AstDeclaration\n ): void {\n const mainMetadata: InternalDeclarationMetadata =\n mainAstDeclaration.declarationMetadata as InternalDeclarationMetadata;\n const ancillaryMetadata: InternalDeclarationMetadata =\n ancillaryAstDeclaration.declarationMetadata as InternalDeclarationMetadata;\n\n if (mainMetadata.ancillaryDeclarations.indexOf(ancillaryAstDeclaration) >= 0) {\n return; // already added\n }\n\n if (mainAstDeclaration.astSymbol !== ancillaryAstDeclaration.astSymbol) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because declarations do not' +\n ' belong to the same symbol'\n );\n }\n\n if (mainMetadata.isAncillary) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because the target is ancillary itself'\n );\n }\n\n if (ancillaryMetadata.isAncillary) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because source is already ancillary' +\n ' to another declaration'\n );\n }\n\n if (mainAstDeclaration.apiItemMetadata || ancillaryAstDeclaration.apiItemMetadata) {\n throw new InternalError(\n 'Invalid call to _addAncillaryDeclaration() because the API item metadata' +\n ' has already been constructed'\n );\n }\n\n ancillaryMetadata.isAncillary = true;\n mainMetadata.ancillaryDeclarations.push(ancillaryAstDeclaration);\n }\n\n private _calculateApiItemMetadata(astDeclaration: AstDeclaration): void {\n const declarationMetadata: InternalDeclarationMetadata =\n astDeclaration.declarationMetadata as InternalDeclarationMetadata;\n if (declarationMetadata.isAncillary) {\n if (astDeclaration.declaration.kind === ts.SyntaxKind.SetAccessor) {\n if (declarationMetadata.tsdocParserContext) {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.SetterWithDocs,\n `The doc comment for the property \"${astDeclaration.astSymbol.localName}\"` +\n ` must appear on the getter, not the setter.`,\n astDeclaration\n );\n }\n }\n\n // We never calculate ApiItemMetadata for an ancillary declaration; instead, it is assigned when\n // the main declaration is processed.\n return;\n }\n\n const options: IApiItemMetadataOptions = {\n declaredReleaseTag: ReleaseTag.None,\n effectiveReleaseTag: ReleaseTag.None,\n isEventProperty: false,\n isOverride: false,\n isSealed: false,\n isVirtual: false,\n isPreapproved: false,\n releaseTagSameAsParent: false\n };\n\n const parserContext: tsdoc.ParserContext | undefined = declarationMetadata.tsdocParserContext;\n if (parserContext) {\n const modifierTagSet: tsdoc.StandardModifierTagSet = parserContext.docComment.modifierTagSet;\n\n let declaredReleaseTag: ReleaseTag = ReleaseTag.None;\n let extraReleaseTags: boolean = false;\n\n if (modifierTagSet.isPublic()) {\n declaredReleaseTag = ReleaseTag.Public;\n }\n if (modifierTagSet.isBeta()) {\n if (declaredReleaseTag !== ReleaseTag.None) {\n extraReleaseTags = true;\n } else {\n declaredReleaseTag = ReleaseTag.Beta;\n }\n }\n if (modifierTagSet.isAlpha()) {\n if (declaredReleaseTag !== ReleaseTag.None) {\n extraReleaseTags = true;\n } else {\n declaredReleaseTag = ReleaseTag.Alpha;\n }\n }\n if (modifierTagSet.isInternal()) {\n if (declaredReleaseTag !== ReleaseTag.None) {\n extraReleaseTags = true;\n } else {\n declaredReleaseTag = ReleaseTag.Internal;\n }\n }\n\n if (extraReleaseTags) {\n if (!astDeclaration.astSymbol.isExternal) {\n // for now, don't report errors for external code\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.ExtraReleaseTag,\n 'The doc comment should not contain more than one release tag',\n astDeclaration\n );\n }\n }\n\n options.declaredReleaseTag = declaredReleaseTag;\n\n options.isEventProperty = modifierTagSet.isEventProperty();\n options.isOverride = modifierTagSet.isOverride();\n options.isSealed = modifierTagSet.isSealed();\n options.isVirtual = modifierTagSet.isVirtual();\n const preapprovedTag: tsdoc.TSDocTagDefinition | void =\n this.extractorConfig.tsdocConfiguration.tryGetTagDefinition('@preapproved');\n\n if (preapprovedTag && modifierTagSet.hasTag(preapprovedTag)) {\n // This feature only makes sense for potentially big declarations.\n switch (astDeclaration.declaration.kind) {\n case ts.SyntaxKind.ClassDeclaration:\n case ts.SyntaxKind.EnumDeclaration:\n case ts.SyntaxKind.InterfaceDeclaration:\n case ts.SyntaxKind.ModuleDeclaration:\n if (declaredReleaseTag === ReleaseTag.Internal) {\n options.isPreapproved = true;\n } else {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.PreapprovedBadReleaseTag,\n `The @preapproved tag cannot be applied to \"${astDeclaration.astSymbol.localName}\"` +\n ` without an @internal release tag`,\n astDeclaration\n );\n }\n break;\n default:\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.PreapprovedUnsupportedType,\n `The @preapproved tag cannot be applied to \"${astDeclaration.astSymbol.localName}\"` +\n ` because it is not a supported declaration type`,\n astDeclaration\n );\n break;\n }\n }\n }\n\n // This needs to be set regardless of whether or not a parserContext exists\n if (astDeclaration.parent) {\n const parentApiItemMetadata: ApiItemMetadata = this.fetchApiItemMetadata(astDeclaration.parent);\n options.effectiveReleaseTag =\n options.declaredReleaseTag === ReleaseTag.None\n ? parentApiItemMetadata.effectiveReleaseTag\n : options.declaredReleaseTag;\n\n options.releaseTagSameAsParent =\n parentApiItemMetadata.effectiveReleaseTag === options.effectiveReleaseTag;\n } else {\n options.effectiveReleaseTag = options.declaredReleaseTag;\n }\n\n if (options.effectiveReleaseTag === ReleaseTag.None) {\n if (!astDeclaration.astSymbol.isExternal) {\n // for now, don't report errors for external code\n // Don't report missing release tags for forgotten exports (unless we're including forgotten exports\n // in either the API report or doc model).\n const astSymbol: AstSymbol = astDeclaration.astSymbol;\n const entity: CollectorEntity | undefined = this._entitiesByAstEntity.get(astSymbol.rootAstSymbol);\n if (\n entity &&\n (entity.consumable ||\n this.extractorConfig.apiReportIncludeForgottenExports ||\n this.extractorConfig.docModelIncludeForgottenExports)\n ) {\n // We also don't report errors for the default export of an entry point, since its doc comment\n // isn't easy to obtain from the .d.ts file\n if (astSymbol.rootAstSymbol.localName !== '_default') {\n this.messageRouter.addAnalyzerIssue(\n ExtractorMessageId.MissingReleaseTag,\n `\"${entity.astEntity.localName}\" is part of the package's API, but it is missing ` +\n `a release tag (@alpha, @beta, @public, or @internal)`,\n astSymbol\n );\n }\n }\n }\n\n options.effectiveReleaseTag = ReleaseTag.Public;\n }\n\n const apiItemMetadata: ApiItemMetadata = new ApiItemMetadata(options);\n if (parserContext) {\n apiItemMetadata.tsdocComment = parserContext.docComment;\n }\n\n astDeclaration.apiItemMetadata = apiItemMetadata;\n\n // Lastly, share the result with any ancillary declarations\n for (const ancillaryDeclaration of declarationMetadata.ancillaryDeclarations) {\n ancillaryDeclaration.apiItemMetadata = apiItemMetadata;\n }\n }\n\n private _parseTsdocForAstDeclaration(astDeclaration: AstDeclaration): tsdoc.ParserContext | undefined {\n const declaration: ts.Declaration = astDeclaration.declaration;\n let nodeForComment: ts.Node = declaration;\n\n if (ts.isVariableDeclaration(declaration)) {\n // Variable declarations are special because they can be combined into a list. For example:\n //\n // /** A */ export /** B */ const /** C */ x = 1, /** D **/ [ /** E */ y, z] = [3, 4];\n //\n // The compiler will only emit comments A and C in the .d.ts file, so in general there isn't a well-defined\n // way to document these parts. API Extractor requires you to break them into separate exports like this:\n //\n // /** A */ export const x = 1;\n //\n // But _getReleaseTagForDeclaration() still receives a node corresponding to \"x\", so we need to walk upwards\n // and find the containing statement in order for getJSDocCommentRanges() to read the comment that we expect.\n const statement: ts.VariableStatement | undefined = TypeScriptHelpers.findFirstParent(\n declaration,\n ts.SyntaxKind.VariableStatement\n ) as ts.VariableStatement | undefined;\n if (statement !== undefined) {\n // For a compound declaration, fall back to looking for C instead of A\n if (statement.declarationList.declarations.length === 1) {\n nodeForComment = statement;\n }\n }\n }\n\n const sourceFileText: string = declaration.getSourceFile().text;\n const ranges: ts.CommentRange[] =\n TypeScriptInternals.getJSDocCommentRanges(nodeForComment, sourceFileText) || [];\n\n if (ranges.length === 0) {\n return undefined;\n }\n\n // We use the JSDoc comment block that is closest to the definition, i.e.\n // the last one preceding it\n const range: ts.TextRange = ranges[ranges.length - 1];\n\n const tsdocTextRange: tsdoc.TextRange = tsdoc.TextRange.fromStringRange(\n sourceFileText,\n range.pos,\n range.end\n );\n\n const parserContext: tsdoc.ParserContext = this._tsdocParser.parseRange(tsdocTextRange);\n\n this.messageRouter.addTsdocMessages(parserContext, declaration.getSourceFile(), astDeclaration);\n\n // We delete the @privateRemarks block as early as possible, to ensure that it never leaks through\n // into one of the output files.\n parserContext.docComment.privateRemarks = undefined;\n\n return parserContext;\n }\n\n private _collectReferenceDirectives(astEntity: AstEntity): void {\n // Here, we're collecting reference directives from source files that contain extracted\n // definitions (i.e. - files that contain `export class ...`, `export interface ...`, ...).\n // These references may or may not include the `preserve=\"true\" attribute. In TS < 5.5,\n // references that end up in .D.TS files may or may not be explicity written by the developer.\n // In TS >= 5.5, only references that are explicitly authored and are marked with\n // `preserve=\"true\"` are included in the output. See https://github.com/microsoft/TypeScript/pull/57681\n //\n // The calls to `_collectReferenceDirectivesFromSourceFiles` in this function are\n // preserving existing behavior, which is to include all reference directives\n // regardless of whether they are explicitly authored or not, but only in files that\n // contain definitions.\n\n if (astEntity instanceof AstSymbol) {\n const sourceFiles: ts.SourceFile[] = astEntity.astDeclarations.map((astDeclaration) =>\n astDeclaration.declaration.getSourceFile()\n );\n return this._collectReferenceDirectivesFromSourceFiles(sourceFiles, false);\n }\n\n if (astEntity instanceof AstNamespaceImport) {\n const sourceFiles: ts.SourceFile[] = [astEntity.astModule.sourceFile];\n return this._collectReferenceDirectivesFromSourceFiles(sourceFiles, false);\n }\n }\n\n private _collectReferenceDirectivesFromSourceFiles(\n sourceFiles: Iterable<ts.SourceFile>,\n onlyIncludeExplicitlyPreserved: boolean\n ): void {\n const seenFilenames: Set<string> = new Set<string>();\n\n for (const sourceFile of sourceFiles) {\n if (sourceFile?.fileName) {\n const {\n fileName,\n typeReferenceDirectives,\n libReferenceDirectives,\n text: sourceFileText\n } = sourceFile;\n if (!seenFilenames.has(fileName)) {\n seenFilenames.add(fileName);\n\n for (const typeReferenceDirective of typeReferenceDirectives) {\n const name: string | undefined = this._getReferenceDirectiveFromSourceFile(\n sourceFileText,\n typeReferenceDirective,\n onlyIncludeExplicitlyPreserved\n );\n if (name) {\n this._dtsTypeReferenceDirectives.add(name);\n }\n }\n\n for (const libReferenceDirective of libReferenceDirectives) {\n const reference: string | undefined = this._getReferenceDirectiveFromSourceFile(\n sourceFileText,\n libReferenceDirective,\n onlyIncludeExplicitlyPreserved\n );\n if (reference) {\n this._dtsLibReferenceDirectives.add(reference);\n }\n }\n }\n }\n }\n }\n\n private _getReferenceDirectiveFromSourceFile(\n sourceFileText: string,\n { pos, end, preserve }: ts.FileReference,\n onlyIncludeExplicitlyPreserved: boolean\n ): string | undefined {\n const reference: string = sourceFileText.substring(pos, end);\n if (preserve || !onlyIncludeExplicitlyPreserved) {\n return reference;\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/api-extractor",
|
|
3
|
-
"version": "7.52.
|
|
3
|
+
"version": "7.52.11",
|
|
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",
|
|
@@ -35,21 +35,20 @@
|
|
|
35
35
|
"@microsoft/tsdoc-config": "~0.17.1",
|
|
36
36
|
"@microsoft/tsdoc": "~0.15.1",
|
|
37
37
|
"lodash": "~4.17.15",
|
|
38
|
-
"minimatch": "
|
|
38
|
+
"minimatch": "10.0.3",
|
|
39
39
|
"resolve": "~1.22.1",
|
|
40
40
|
"semver": "~7.5.4",
|
|
41
41
|
"source-map": "~0.6.1",
|
|
42
42
|
"typescript": "5.8.2",
|
|
43
43
|
"@microsoft/api-extractor-model": "7.30.7",
|
|
44
|
-
"@rushstack/node-core-library": "5.14.0",
|
|
45
44
|
"@rushstack/rig-package": "0.5.3",
|
|
46
|
-
"@rushstack/
|
|
47
|
-
"@rushstack/ts-command-line": "5.0.2"
|
|
45
|
+
"@rushstack/node-core-library": "5.14.0",
|
|
46
|
+
"@rushstack/ts-command-line": "5.0.2",
|
|
47
|
+
"@rushstack/terminal": "0.15.4"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@rushstack/heft": "0.74.
|
|
50
|
+
"@rushstack/heft": "0.74.1",
|
|
51
51
|
"@types/lodash": "4.14.116",
|
|
52
|
-
"@types/minimatch": "3.0.5",
|
|
53
52
|
"@types/resolve": "1.20.2",
|
|
54
53
|
"@types/semver": "7.5.0",
|
|
55
54
|
"eslint": "~9.25.1",
|