@microsoft/api-extractor 7.56.3 → 7.57.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/CHANGELOG.json +58 -0
  2. package/CHANGELOG.md +15 -1
  3. package/bin/api-extractor +1 -1
  4. package/dist/tsdoc-metadata.json +1 -1
  5. package/lib-esm/aedoc/PackageDocComment.js +56 -0
  6. package/lib-esm/aedoc/PackageDocComment.js.map +1 -0
  7. package/lib-esm/analyzer/AstDeclaration.js +214 -0
  8. package/lib-esm/analyzer/AstDeclaration.js.map +1 -0
  9. package/lib-esm/analyzer/AstEntity.js +35 -0
  10. package/lib-esm/analyzer/AstEntity.js.map +1 -0
  11. package/lib-esm/analyzer/AstImport.js +76 -0
  12. package/lib-esm/analyzer/AstImport.js.map +1 -0
  13. package/lib-esm/analyzer/AstModule.js +22 -0
  14. package/lib-esm/analyzer/AstModule.js.map +1 -0
  15. package/lib-esm/analyzer/AstNamespaceExport.js +38 -0
  16. package/lib-esm/analyzer/AstNamespaceExport.js.map +1 -0
  17. package/lib-esm/analyzer/AstNamespaceImport.js +57 -0
  18. package/lib-esm/analyzer/AstNamespaceImport.js.map +1 -0
  19. package/lib-esm/analyzer/AstReferenceResolver.js +202 -0
  20. package/lib-esm/analyzer/AstReferenceResolver.js.map +1 -0
  21. package/lib-esm/analyzer/AstSymbol.js +104 -0
  22. package/lib-esm/analyzer/AstSymbol.js.map +1 -0
  23. package/lib-esm/analyzer/AstSymbolTable.js +524 -0
  24. package/lib-esm/analyzer/AstSymbolTable.js.map +1 -0
  25. package/lib-esm/analyzer/ExportAnalyzer.js +725 -0
  26. package/lib-esm/analyzer/ExportAnalyzer.js.map +1 -0
  27. package/lib-esm/analyzer/PackageMetadataManager.js +235 -0
  28. package/lib-esm/analyzer/PackageMetadataManager.js.map +1 -0
  29. package/lib-esm/analyzer/SourceFileLocationFormatter.js +44 -0
  30. package/lib-esm/analyzer/SourceFileLocationFormatter.js.map +1 -0
  31. package/lib-esm/analyzer/Span.js +545 -0
  32. package/lib-esm/analyzer/Span.js.map +1 -0
  33. package/lib-esm/analyzer/SyntaxHelpers.js +72 -0
  34. package/lib-esm/analyzer/SyntaxHelpers.js.map +1 -0
  35. package/lib-esm/analyzer/TypeScriptHelpers.js +242 -0
  36. package/lib-esm/analyzer/TypeScriptHelpers.js.map +1 -0
  37. package/lib-esm/analyzer/TypeScriptInternals.js +114 -0
  38. package/lib-esm/analyzer/TypeScriptInternals.js.map +1 -0
  39. package/lib-esm/api/CompilerState.js +149 -0
  40. package/lib-esm/api/CompilerState.js.map +1 -0
  41. package/lib-esm/api/ConsoleMessageId.js +82 -0
  42. package/lib-esm/api/ConsoleMessageId.js.map +1 -0
  43. package/lib-esm/api/Extractor.js +290 -0
  44. package/lib-esm/api/Extractor.js.map +1 -0
  45. package/lib-esm/api/ExtractorConfig.js +801 -0
  46. package/lib-esm/api/ExtractorConfig.js.map +1 -0
  47. package/lib-esm/api/ExtractorLogLevel.js +46 -0
  48. package/lib-esm/api/ExtractorLogLevel.js.map +1 -0
  49. package/lib-esm/api/ExtractorMessage.js +140 -0
  50. package/lib-esm/api/ExtractorMessage.js.map +1 -0
  51. package/lib-esm/api/ExtractorMessageId.js +128 -0
  52. package/lib-esm/api/ExtractorMessageId.js.map +1 -0
  53. package/lib-esm/api/IConfigFile.js +4 -0
  54. package/lib-esm/api/IConfigFile.js.map +1 -0
  55. package/lib-esm/cli/ApiExtractorCommandLine.js +51 -0
  56. package/lib-esm/cli/ApiExtractorCommandLine.js.map +1 -0
  57. package/lib-esm/cli/InitAction.js +35 -0
  58. package/lib-esm/cli/InitAction.js.map +1 -0
  59. package/lib-esm/cli/RunAction.js +123 -0
  60. package/lib-esm/cli/RunAction.js.map +1 -0
  61. package/lib-esm/collector/ApiItemMetadata.js +55 -0
  62. package/lib-esm/collector/ApiItemMetadata.js.map +1 -0
  63. package/lib-esm/collector/Collector.js +794 -0
  64. package/lib-esm/collector/Collector.js.map +1 -0
  65. package/lib-esm/collector/CollectorEntity.js +219 -0
  66. package/lib-esm/collector/CollectorEntity.js.map +1 -0
  67. package/lib-esm/collector/DeclarationMetadata.js +24 -0
  68. package/lib-esm/collector/DeclarationMetadata.js.map +1 -0
  69. package/lib-esm/collector/MessageRouter.js +476 -0
  70. package/lib-esm/collector/MessageRouter.js.map +1 -0
  71. package/lib-esm/collector/SourceMapper.js +171 -0
  72. package/lib-esm/collector/SourceMapper.js.map +1 -0
  73. package/lib-esm/collector/SymbolMetadata.js +12 -0
  74. package/lib-esm/collector/SymbolMetadata.js.map +1 -0
  75. package/lib-esm/collector/VisitorState.js +23 -0
  76. package/lib-esm/collector/VisitorState.js.map +1 -0
  77. package/lib-esm/collector/WorkingPackage.js +30 -0
  78. package/lib-esm/collector/WorkingPackage.js.map +1 -0
  79. package/lib-esm/enhancers/DocCommentEnhancer.js +213 -0
  80. package/lib-esm/enhancers/DocCommentEnhancer.js.map +1 -0
  81. package/lib-esm/enhancers/ValidationEnhancer.js +217 -0
  82. package/lib-esm/enhancers/ValidationEnhancer.js.map +1 -0
  83. package/lib-esm/generators/ApiModelGenerator.js +852 -0
  84. package/lib-esm/generators/ApiModelGenerator.js.map +1 -0
  85. package/lib-esm/generators/ApiReportGenerator.js +518 -0
  86. package/lib-esm/generators/ApiReportGenerator.js.map +1 -0
  87. package/lib-esm/generators/DeclarationReferenceGenerator.js +292 -0
  88. package/lib-esm/generators/DeclarationReferenceGenerator.js.map +1 -0
  89. package/lib-esm/generators/DtsEmitHelpers.js +227 -0
  90. package/lib-esm/generators/DtsEmitHelpers.js.map +1 -0
  91. package/lib-esm/generators/DtsRollupGenerator.js +391 -0
  92. package/lib-esm/generators/DtsRollupGenerator.js.map +1 -0
  93. package/lib-esm/generators/ExcerptBuilder.js +259 -0
  94. package/lib-esm/generators/ExcerptBuilder.js.map +1 -0
  95. package/lib-esm/generators/IndentedWriter.js +238 -0
  96. package/lib-esm/generators/IndentedWriter.js.map +1 -0
  97. package/lib-esm/index.js +17 -0
  98. package/lib-esm/index.js.map +1 -0
  99. package/lib-esm/schemas/api-extractor-defaults.json +94 -0
  100. package/lib-esm/schemas/api-extractor-template.json +454 -0
  101. package/lib-esm/schemas/api-extractor.schema.json +257 -0
  102. package/lib-esm/start.js +14 -0
  103. package/lib-esm/start.js.map +1 -0
  104. package/package.json +37 -9
  105. /package/{lib → lib-commonjs}/aedoc/PackageDocComment.js +0 -0
  106. /package/{lib → lib-commonjs}/aedoc/PackageDocComment.js.map +0 -0
  107. /package/{lib → lib-commonjs}/analyzer/AstDeclaration.js +0 -0
  108. /package/{lib → lib-commonjs}/analyzer/AstDeclaration.js.map +0 -0
  109. /package/{lib → lib-commonjs}/analyzer/AstEntity.js +0 -0
  110. /package/{lib → lib-commonjs}/analyzer/AstEntity.js.map +0 -0
  111. /package/{lib → lib-commonjs}/analyzer/AstImport.js +0 -0
  112. /package/{lib → lib-commonjs}/analyzer/AstImport.js.map +0 -0
  113. /package/{lib → lib-commonjs}/analyzer/AstModule.js +0 -0
  114. /package/{lib → lib-commonjs}/analyzer/AstModule.js.map +0 -0
  115. /package/{lib → lib-commonjs}/analyzer/AstNamespaceExport.js +0 -0
  116. /package/{lib → lib-commonjs}/analyzer/AstNamespaceExport.js.map +0 -0
  117. /package/{lib → lib-commonjs}/analyzer/AstNamespaceImport.js +0 -0
  118. /package/{lib → lib-commonjs}/analyzer/AstNamespaceImport.js.map +0 -0
  119. /package/{lib → lib-commonjs}/analyzer/AstReferenceResolver.js +0 -0
  120. /package/{lib → lib-commonjs}/analyzer/AstReferenceResolver.js.map +0 -0
  121. /package/{lib → lib-commonjs}/analyzer/AstSymbol.js +0 -0
  122. /package/{lib → lib-commonjs}/analyzer/AstSymbol.js.map +0 -0
  123. /package/{lib → lib-commonjs}/analyzer/AstSymbolTable.js +0 -0
  124. /package/{lib → lib-commonjs}/analyzer/AstSymbolTable.js.map +0 -0
  125. /package/{lib → lib-commonjs}/analyzer/ExportAnalyzer.js +0 -0
  126. /package/{lib → lib-commonjs}/analyzer/ExportAnalyzer.js.map +0 -0
  127. /package/{lib → lib-commonjs}/analyzer/PackageMetadataManager.js +0 -0
  128. /package/{lib → lib-commonjs}/analyzer/PackageMetadataManager.js.map +0 -0
  129. /package/{lib → lib-commonjs}/analyzer/SourceFileLocationFormatter.js +0 -0
  130. /package/{lib → lib-commonjs}/analyzer/SourceFileLocationFormatter.js.map +0 -0
  131. /package/{lib → lib-commonjs}/analyzer/Span.js +0 -0
  132. /package/{lib → lib-commonjs}/analyzer/Span.js.map +0 -0
  133. /package/{lib → lib-commonjs}/analyzer/SyntaxHelpers.js +0 -0
  134. /package/{lib → lib-commonjs}/analyzer/SyntaxHelpers.js.map +0 -0
  135. /package/{lib → lib-commonjs}/analyzer/TypeScriptHelpers.js +0 -0
  136. /package/{lib → lib-commonjs}/analyzer/TypeScriptHelpers.js.map +0 -0
  137. /package/{lib → lib-commonjs}/analyzer/TypeScriptInternals.js +0 -0
  138. /package/{lib → lib-commonjs}/analyzer/TypeScriptInternals.js.map +0 -0
  139. /package/{lib → lib-commonjs}/api/CompilerState.js +0 -0
  140. /package/{lib → lib-commonjs}/api/CompilerState.js.map +0 -0
  141. /package/{lib → lib-commonjs}/api/ConsoleMessageId.js +0 -0
  142. /package/{lib → lib-commonjs}/api/ConsoleMessageId.js.map +0 -0
  143. /package/{lib → lib-commonjs}/api/Extractor.js +0 -0
  144. /package/{lib → lib-commonjs}/api/Extractor.js.map +0 -0
  145. /package/{lib → lib-commonjs}/api/ExtractorConfig.js +0 -0
  146. /package/{lib → lib-commonjs}/api/ExtractorConfig.js.map +0 -0
  147. /package/{lib → lib-commonjs}/api/ExtractorLogLevel.js +0 -0
  148. /package/{lib → lib-commonjs}/api/ExtractorLogLevel.js.map +0 -0
  149. /package/{lib → lib-commonjs}/api/ExtractorMessage.js +0 -0
  150. /package/{lib → lib-commonjs}/api/ExtractorMessage.js.map +0 -0
  151. /package/{lib → lib-commonjs}/api/ExtractorMessageId.js +0 -0
  152. /package/{lib → lib-commonjs}/api/ExtractorMessageId.js.map +0 -0
  153. /package/{lib → lib-commonjs}/api/IConfigFile.js +0 -0
  154. /package/{lib → lib-commonjs}/api/IConfigFile.js.map +0 -0
  155. /package/{lib → lib-commonjs}/cli/ApiExtractorCommandLine.js +0 -0
  156. /package/{lib → lib-commonjs}/cli/ApiExtractorCommandLine.js.map +0 -0
  157. /package/{lib → lib-commonjs}/cli/InitAction.js +0 -0
  158. /package/{lib → lib-commonjs}/cli/InitAction.js.map +0 -0
  159. /package/{lib → lib-commonjs}/cli/RunAction.js +0 -0
  160. /package/{lib → lib-commonjs}/cli/RunAction.js.map +0 -0
  161. /package/{lib → lib-commonjs}/collector/ApiItemMetadata.js +0 -0
  162. /package/{lib → lib-commonjs}/collector/ApiItemMetadata.js.map +0 -0
  163. /package/{lib → lib-commonjs}/collector/Collector.js +0 -0
  164. /package/{lib → lib-commonjs}/collector/Collector.js.map +0 -0
  165. /package/{lib → lib-commonjs}/collector/CollectorEntity.js +0 -0
  166. /package/{lib → lib-commonjs}/collector/CollectorEntity.js.map +0 -0
  167. /package/{lib → lib-commonjs}/collector/DeclarationMetadata.js +0 -0
  168. /package/{lib → lib-commonjs}/collector/DeclarationMetadata.js.map +0 -0
  169. /package/{lib → lib-commonjs}/collector/MessageRouter.js +0 -0
  170. /package/{lib → lib-commonjs}/collector/MessageRouter.js.map +0 -0
  171. /package/{lib → lib-commonjs}/collector/SourceMapper.js +0 -0
  172. /package/{lib → lib-commonjs}/collector/SourceMapper.js.map +0 -0
  173. /package/{lib → lib-commonjs}/collector/SymbolMetadata.js +0 -0
  174. /package/{lib → lib-commonjs}/collector/SymbolMetadata.js.map +0 -0
  175. /package/{lib → lib-commonjs}/collector/VisitorState.js +0 -0
  176. /package/{lib → lib-commonjs}/collector/VisitorState.js.map +0 -0
  177. /package/{lib → lib-commonjs}/collector/WorkingPackage.js +0 -0
  178. /package/{lib → lib-commonjs}/collector/WorkingPackage.js.map +0 -0
  179. /package/{lib → lib-commonjs}/enhancers/DocCommentEnhancer.js +0 -0
  180. /package/{lib → lib-commonjs}/enhancers/DocCommentEnhancer.js.map +0 -0
  181. /package/{lib → lib-commonjs}/enhancers/ValidationEnhancer.js +0 -0
  182. /package/{lib → lib-commonjs}/enhancers/ValidationEnhancer.js.map +0 -0
  183. /package/{lib → lib-commonjs}/generators/ApiModelGenerator.js +0 -0
  184. /package/{lib → lib-commonjs}/generators/ApiModelGenerator.js.map +0 -0
  185. /package/{lib → lib-commonjs}/generators/ApiReportGenerator.js +0 -0
  186. /package/{lib → lib-commonjs}/generators/ApiReportGenerator.js.map +0 -0
  187. /package/{lib → lib-commonjs}/generators/DeclarationReferenceGenerator.js +0 -0
  188. /package/{lib → lib-commonjs}/generators/DeclarationReferenceGenerator.js.map +0 -0
  189. /package/{lib → lib-commonjs}/generators/DtsEmitHelpers.js +0 -0
  190. /package/{lib → lib-commonjs}/generators/DtsEmitHelpers.js.map +0 -0
  191. /package/{lib → lib-commonjs}/generators/DtsRollupGenerator.js +0 -0
  192. /package/{lib → lib-commonjs}/generators/DtsRollupGenerator.js.map +0 -0
  193. /package/{lib → lib-commonjs}/generators/ExcerptBuilder.js +0 -0
  194. /package/{lib → lib-commonjs}/generators/ExcerptBuilder.js.map +0 -0
  195. /package/{lib → lib-commonjs}/generators/IndentedWriter.js +0 -0
  196. /package/{lib → lib-commonjs}/generators/IndentedWriter.js.map +0 -0
  197. /package/{lib → lib-commonjs}/index.js +0 -0
  198. /package/{lib → lib-commonjs}/index.js.map +0 -0
  199. /package/{lib → lib-commonjs}/schemas/api-extractor-defaults.json +0 -0
  200. /package/{lib → lib-commonjs}/schemas/api-extractor-template.json +0 -0
  201. /package/{lib → lib-commonjs}/schemas/api-extractor.schema.json +0 -0
  202. /package/{lib → lib-commonjs}/start.js +0 -0
  203. /package/{lib → lib-commonjs}/start.js.map +0 -0
  204. /package/{lib → lib-dts}/aedoc/PackageDocComment.d.ts +0 -0
  205. /package/{lib → lib-dts}/aedoc/PackageDocComment.d.ts.map +0 -0
  206. /package/{lib → lib-dts}/analyzer/AstDeclaration.d.ts +0 -0
  207. /package/{lib → lib-dts}/analyzer/AstDeclaration.d.ts.map +0 -0
  208. /package/{lib → lib-dts}/analyzer/AstEntity.d.ts +0 -0
  209. /package/{lib → lib-dts}/analyzer/AstEntity.d.ts.map +0 -0
  210. /package/{lib → lib-dts}/analyzer/AstImport.d.ts +0 -0
  211. /package/{lib → lib-dts}/analyzer/AstImport.d.ts.map +0 -0
  212. /package/{lib → lib-dts}/analyzer/AstModule.d.ts +0 -0
  213. /package/{lib → lib-dts}/analyzer/AstModule.d.ts.map +0 -0
  214. /package/{lib → lib-dts}/analyzer/AstNamespaceExport.d.ts +0 -0
  215. /package/{lib → lib-dts}/analyzer/AstNamespaceExport.d.ts.map +0 -0
  216. /package/{lib → lib-dts}/analyzer/AstNamespaceImport.d.ts +0 -0
  217. /package/{lib → lib-dts}/analyzer/AstNamespaceImport.d.ts.map +0 -0
  218. /package/{lib → lib-dts}/analyzer/AstReferenceResolver.d.ts +0 -0
  219. /package/{lib → lib-dts}/analyzer/AstReferenceResolver.d.ts.map +0 -0
  220. /package/{lib → lib-dts}/analyzer/AstSymbol.d.ts +0 -0
  221. /package/{lib → lib-dts}/analyzer/AstSymbol.d.ts.map +0 -0
  222. /package/{lib → lib-dts}/analyzer/AstSymbolTable.d.ts +0 -0
  223. /package/{lib → lib-dts}/analyzer/AstSymbolTable.d.ts.map +0 -0
  224. /package/{lib → lib-dts}/analyzer/ExportAnalyzer.d.ts +0 -0
  225. /package/{lib → lib-dts}/analyzer/ExportAnalyzer.d.ts.map +0 -0
  226. /package/{lib → lib-dts}/analyzer/PackageMetadataManager.d.ts +0 -0
  227. /package/{lib → lib-dts}/analyzer/PackageMetadataManager.d.ts.map +0 -0
  228. /package/{lib → lib-dts}/analyzer/SourceFileLocationFormatter.d.ts +0 -0
  229. /package/{lib → lib-dts}/analyzer/SourceFileLocationFormatter.d.ts.map +0 -0
  230. /package/{lib → lib-dts}/analyzer/Span.d.ts +0 -0
  231. /package/{lib → lib-dts}/analyzer/Span.d.ts.map +0 -0
  232. /package/{lib → lib-dts}/analyzer/SyntaxHelpers.d.ts +0 -0
  233. /package/{lib → lib-dts}/analyzer/SyntaxHelpers.d.ts.map +0 -0
  234. /package/{lib → lib-dts}/analyzer/TypeScriptHelpers.d.ts +0 -0
  235. /package/{lib → lib-dts}/analyzer/TypeScriptHelpers.d.ts.map +0 -0
  236. /package/{lib → lib-dts}/analyzer/TypeScriptInternals.d.ts +0 -0
  237. /package/{lib → lib-dts}/analyzer/TypeScriptInternals.d.ts.map +0 -0
  238. /package/{lib → lib-dts}/api/CompilerState.d.ts +0 -0
  239. /package/{lib → lib-dts}/api/CompilerState.d.ts.map +0 -0
  240. /package/{lib → lib-dts}/api/ConsoleMessageId.d.ts +0 -0
  241. /package/{lib → lib-dts}/api/ConsoleMessageId.d.ts.map +0 -0
  242. /package/{lib → lib-dts}/api/Extractor.d.ts +0 -0
  243. /package/{lib → lib-dts}/api/Extractor.d.ts.map +0 -0
  244. /package/{lib → lib-dts}/api/ExtractorConfig.d.ts +0 -0
  245. /package/{lib → lib-dts}/api/ExtractorConfig.d.ts.map +0 -0
  246. /package/{lib → lib-dts}/api/ExtractorLogLevel.d.ts +0 -0
  247. /package/{lib → lib-dts}/api/ExtractorLogLevel.d.ts.map +0 -0
  248. /package/{lib → lib-dts}/api/ExtractorMessage.d.ts +0 -0
  249. /package/{lib → lib-dts}/api/ExtractorMessage.d.ts.map +0 -0
  250. /package/{lib → lib-dts}/api/ExtractorMessageId.d.ts +0 -0
  251. /package/{lib → lib-dts}/api/ExtractorMessageId.d.ts.map +0 -0
  252. /package/{lib → lib-dts}/api/IConfigFile.d.ts +0 -0
  253. /package/{lib → lib-dts}/api/IConfigFile.d.ts.map +0 -0
  254. /package/{lib → lib-dts}/cli/ApiExtractorCommandLine.d.ts +0 -0
  255. /package/{lib → lib-dts}/cli/ApiExtractorCommandLine.d.ts.map +0 -0
  256. /package/{lib → lib-dts}/cli/InitAction.d.ts +0 -0
  257. /package/{lib → lib-dts}/cli/InitAction.d.ts.map +0 -0
  258. /package/{lib → lib-dts}/cli/RunAction.d.ts +0 -0
  259. /package/{lib → lib-dts}/cli/RunAction.d.ts.map +0 -0
  260. /package/{lib → lib-dts}/collector/ApiItemMetadata.d.ts +0 -0
  261. /package/{lib → lib-dts}/collector/ApiItemMetadata.d.ts.map +0 -0
  262. /package/{lib → lib-dts}/collector/Collector.d.ts +0 -0
  263. /package/{lib → lib-dts}/collector/Collector.d.ts.map +0 -0
  264. /package/{lib → lib-dts}/collector/CollectorEntity.d.ts +0 -0
  265. /package/{lib → lib-dts}/collector/CollectorEntity.d.ts.map +0 -0
  266. /package/{lib → lib-dts}/collector/DeclarationMetadata.d.ts +0 -0
  267. /package/{lib → lib-dts}/collector/DeclarationMetadata.d.ts.map +0 -0
  268. /package/{lib → lib-dts}/collector/MessageRouter.d.ts +0 -0
  269. /package/{lib → lib-dts}/collector/MessageRouter.d.ts.map +0 -0
  270. /package/{lib → lib-dts}/collector/SourceMapper.d.ts +0 -0
  271. /package/{lib → lib-dts}/collector/SourceMapper.d.ts.map +0 -0
  272. /package/{lib → lib-dts}/collector/SymbolMetadata.d.ts +0 -0
  273. /package/{lib → lib-dts}/collector/SymbolMetadata.d.ts.map +0 -0
  274. /package/{lib → lib-dts}/collector/VisitorState.d.ts +0 -0
  275. /package/{lib → lib-dts}/collector/VisitorState.d.ts.map +0 -0
  276. /package/{lib → lib-dts}/collector/WorkingPackage.d.ts +0 -0
  277. /package/{lib → lib-dts}/collector/WorkingPackage.d.ts.map +0 -0
  278. /package/{lib → lib-dts}/enhancers/DocCommentEnhancer.d.ts +0 -0
  279. /package/{lib → lib-dts}/enhancers/DocCommentEnhancer.d.ts.map +0 -0
  280. /package/{lib → lib-dts}/enhancers/ValidationEnhancer.d.ts +0 -0
  281. /package/{lib → lib-dts}/enhancers/ValidationEnhancer.d.ts.map +0 -0
  282. /package/{lib → lib-dts}/generators/ApiModelGenerator.d.ts +0 -0
  283. /package/{lib → lib-dts}/generators/ApiModelGenerator.d.ts.map +0 -0
  284. /package/{lib → lib-dts}/generators/ApiReportGenerator.d.ts +0 -0
  285. /package/{lib → lib-dts}/generators/ApiReportGenerator.d.ts.map +0 -0
  286. /package/{lib → lib-dts}/generators/DeclarationReferenceGenerator.d.ts +0 -0
  287. /package/{lib → lib-dts}/generators/DeclarationReferenceGenerator.d.ts.map +0 -0
  288. /package/{lib → lib-dts}/generators/DtsEmitHelpers.d.ts +0 -0
  289. /package/{lib → lib-dts}/generators/DtsEmitHelpers.d.ts.map +0 -0
  290. /package/{lib → lib-dts}/generators/DtsRollupGenerator.d.ts +0 -0
  291. /package/{lib → lib-dts}/generators/DtsRollupGenerator.d.ts.map +0 -0
  292. /package/{lib → lib-dts}/generators/ExcerptBuilder.d.ts +0 -0
  293. /package/{lib → lib-dts}/generators/ExcerptBuilder.d.ts.map +0 -0
  294. /package/{lib → lib-dts}/generators/IndentedWriter.d.ts +0 -0
  295. /package/{lib → lib-dts}/generators/IndentedWriter.d.ts.map +0 -0
  296. /package/{lib → lib-dts}/index.d.ts +0 -0
  297. /package/{lib → lib-dts}/index.d.ts.map +0 -0
  298. /package/{lib → lib-dts}/start.d.ts +0 -0
  299. /package/{lib → lib-dts}/start.d.ts.map +0 -0
@@ -0,0 +1,259 @@
1
+ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
2
+ // See LICENSE in the project root for license information.
3
+ import * as ts from 'typescript';
4
+ import { ExcerptTokenKind } from '@microsoft/api-extractor-model';
5
+ import { Span } from '../analyzer/Span';
6
+ export class ExcerptBuilder {
7
+ /**
8
+ * Appends a blank line to the `excerptTokens` list.
9
+ * @param excerptTokens - The target token list to append to
10
+ */
11
+ static addBlankLine(excerptTokens) {
12
+ let newlines = '\n\n';
13
+ // If the existing text already ended with a newline, then only append one newline
14
+ if (excerptTokens.length > 0) {
15
+ const previousText = excerptTokens[excerptTokens.length - 1].text;
16
+ if (/\n$/.test(previousText)) {
17
+ newlines = '\n';
18
+ }
19
+ }
20
+ excerptTokens.push({ kind: ExcerptTokenKind.Content, text: newlines });
21
+ }
22
+ /**
23
+ * Appends the signature for the specified `AstDeclaration` to the `excerptTokens` list.
24
+ * @param excerptTokens - The target token list to append to
25
+ * @param nodeTransforms - A list of child nodes whose token ranges we want to capture
26
+ */
27
+ static addDeclaration(excerptTokens, astDeclaration, nodeTransforms, referenceGenerator) {
28
+ let stopBeforeChildKind = undefined;
29
+ switch (astDeclaration.declaration.kind) {
30
+ case ts.SyntaxKind.ClassDeclaration:
31
+ case ts.SyntaxKind.EnumDeclaration:
32
+ case ts.SyntaxKind.InterfaceDeclaration:
33
+ // FirstPunctuation = "{"
34
+ stopBeforeChildKind = ts.SyntaxKind.FirstPunctuation;
35
+ break;
36
+ case ts.SyntaxKind.ModuleDeclaration:
37
+ // ModuleBlock = the "{ ... }" block
38
+ stopBeforeChildKind = ts.SyntaxKind.ModuleBlock;
39
+ break;
40
+ }
41
+ const span = new Span(astDeclaration.declaration);
42
+ const transformsByNode = new Map();
43
+ const captureTokenRanges = [];
44
+ for (const nodeTransform of nodeTransforms || []) {
45
+ transformsByNode.set(nodeTransform.node, nodeTransform);
46
+ if (nodeTransform.captureTokenRange) {
47
+ captureTokenRanges.push(nodeTransform.captureTokenRange);
48
+ }
49
+ }
50
+ ExcerptBuilder._buildSpan(excerptTokens, span, {
51
+ referenceGenerator: referenceGenerator,
52
+ startingNode: span.node,
53
+ stopBeforeChildKind,
54
+ transformsByNode: transformsByNode,
55
+ lastAppendedTokenIsSeparator: false
56
+ });
57
+ ExcerptBuilder._condenseTokens(excerptTokens, captureTokenRanges);
58
+ }
59
+ static createEmptyTokenRange() {
60
+ return { startIndex: 0, endIndex: 0 };
61
+ }
62
+ /** @returns false if we encountered a token that causes iteration to stop. */
63
+ static _buildSpan(excerptTokens, span, state) {
64
+ if (span.kind === ts.SyntaxKind.JSDocComment) {
65
+ // Discard any comments
66
+ return true;
67
+ }
68
+ // Can this node start a excerpt?
69
+ const transform = state.transformsByNode.get(span.node);
70
+ let captureTokenRange = undefined;
71
+ if (transform) {
72
+ captureTokenRange = transform.captureTokenRange;
73
+ if (transform.replacementText !== undefined) {
74
+ excerptTokens.push({
75
+ kind: ExcerptTokenKind.Content,
76
+ text: transform.replacementText
77
+ });
78
+ state.lastAppendedTokenIsSeparator = false;
79
+ if (captureTokenRange) {
80
+ captureTokenRange.startIndex = excerptTokens.length;
81
+ captureTokenRange.endIndex = captureTokenRange.startIndex + 1;
82
+ }
83
+ return true;
84
+ }
85
+ }
86
+ let excerptStartIndex = 0;
87
+ if (captureTokenRange) {
88
+ // We will assign capturedTokenRange.startIndex to be the index of the next token to be appended
89
+ excerptStartIndex = excerptTokens.length;
90
+ }
91
+ if (span.prefix) {
92
+ let canonicalReference = undefined;
93
+ if (span.kind === ts.SyntaxKind.Identifier) {
94
+ const name = span.node;
95
+ if (!ExcerptBuilder._isDeclarationName(name)) {
96
+ canonicalReference = state.referenceGenerator.getDeclarationReferenceForIdentifier(name);
97
+ }
98
+ }
99
+ if (canonicalReference) {
100
+ ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Reference, span.prefix, canonicalReference);
101
+ }
102
+ else {
103
+ ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.prefix);
104
+ }
105
+ state.lastAppendedTokenIsSeparator = false;
106
+ }
107
+ for (const child of span.children) {
108
+ if (span.node === state.startingNode) {
109
+ if (state.stopBeforeChildKind && child.kind === state.stopBeforeChildKind) {
110
+ // We reached a child whose kind is stopBeforeChildKind, so stop traversing
111
+ return false;
112
+ }
113
+ }
114
+ if (!this._buildSpan(excerptTokens, child, state)) {
115
+ return false;
116
+ }
117
+ }
118
+ if (span.suffix) {
119
+ ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.suffix);
120
+ state.lastAppendedTokenIsSeparator = false;
121
+ }
122
+ if (span.separator) {
123
+ ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.separator);
124
+ state.lastAppendedTokenIsSeparator = true;
125
+ }
126
+ // Are we building a excerpt? If so, set its range
127
+ if (captureTokenRange) {
128
+ captureTokenRange.startIndex = excerptStartIndex;
129
+ // We will assign capturedTokenRange.startIndex to be the index after the last token
130
+ // that was appended so far. However, if the last appended token was a separator, omit
131
+ // it from the range.
132
+ let excerptEndIndex = excerptTokens.length;
133
+ if (state.lastAppendedTokenIsSeparator) {
134
+ excerptEndIndex--;
135
+ }
136
+ captureTokenRange.endIndex = excerptEndIndex;
137
+ }
138
+ return true;
139
+ }
140
+ static _appendToken(excerptTokens, excerptTokenKind, text, canonicalReference) {
141
+ if (text.length === 0) {
142
+ return;
143
+ }
144
+ const excerptToken = { kind: excerptTokenKind, text: text };
145
+ if (canonicalReference !== undefined) {
146
+ excerptToken.canonicalReference = canonicalReference.toString();
147
+ }
148
+ excerptTokens.push(excerptToken);
149
+ }
150
+ /**
151
+ * Condenses the provided excerpt tokens by merging tokens where possible. Updates the provided token ranges to
152
+ * remain accurate after token merging.
153
+ *
154
+ * @remarks
155
+ * For example, suppose we have excerpt tokens ["A", "B", "C"] and a token range [0, 2]. If the excerpt tokens
156
+ * are condensed to ["AB", "C"], then the token range would be updated to [0, 1]. Note that merges are only
157
+ * performed if they are compatible with the provided token ranges. In the example above, if our token range was
158
+ * originally [0, 1], we would not be able to merge tokens "A" and "B".
159
+ */
160
+ static _condenseTokens(excerptTokens, tokenRanges) {
161
+ // This set is used to quickly lookup a start or end index.
162
+ const startOrEndIndices = new Set();
163
+ for (const tokenRange of tokenRanges) {
164
+ startOrEndIndices.add(tokenRange.startIndex);
165
+ startOrEndIndices.add(tokenRange.endIndex);
166
+ }
167
+ for (let currentIndex = 1; currentIndex < excerptTokens.length; ++currentIndex) {
168
+ while (currentIndex < excerptTokens.length) {
169
+ const prevPrevToken = excerptTokens[currentIndex - 2]; // May be undefined
170
+ const prevToken = excerptTokens[currentIndex - 1];
171
+ const currentToken = excerptTokens[currentIndex];
172
+ // The number of excerpt tokens that are merged in this iteration. We need this to determine
173
+ // how to update the start and end indices of our token ranges.
174
+ let mergeCount;
175
+ // There are two types of merges that can occur. We only perform these merges if they are
176
+ // compatible with all of our token ranges.
177
+ if (prevPrevToken &&
178
+ prevPrevToken.kind === ExcerptTokenKind.Reference &&
179
+ prevToken.kind === ExcerptTokenKind.Content &&
180
+ prevToken.text.trim() === '.' &&
181
+ currentToken.kind === ExcerptTokenKind.Reference &&
182
+ !startOrEndIndices.has(currentIndex) &&
183
+ !startOrEndIndices.has(currentIndex - 1)) {
184
+ // If the current token is a reference token, the previous token is a ".", and the previous-
185
+ // previous token is a reference token, then merge all three tokens into a reference token.
186
+ //
187
+ // For example: Given ["MyNamespace" (R), ".", "MyClass" (R)], tokens "." and "MyClass" might
188
+ // be merged into "MyNamespace". The condensed token would be ["MyNamespace.MyClass" (R)].
189
+ prevPrevToken.text += prevToken.text + currentToken.text;
190
+ prevPrevToken.canonicalReference = currentToken.canonicalReference;
191
+ mergeCount = 2;
192
+ currentIndex--;
193
+ }
194
+ else if (
195
+ // If the current and previous tokens are both content tokens, then merge the tokens into a
196
+ // single content token. For example: Given ["export ", "declare class"], these tokens
197
+ // might be merged into "export declare class".
198
+ prevToken.kind === ExcerptTokenKind.Content &&
199
+ prevToken.kind === currentToken.kind &&
200
+ !startOrEndIndices.has(currentIndex)) {
201
+ prevToken.text += currentToken.text;
202
+ mergeCount = 1;
203
+ }
204
+ else {
205
+ // Otherwise, no merging can occur here. Continue to the next index.
206
+ break;
207
+ }
208
+ // Remove the now redundant excerpt token(s), as they were merged into a previous token.
209
+ excerptTokens.splice(currentIndex, mergeCount);
210
+ // Update the start and end indices for all token ranges based upon how many excerpt
211
+ // tokens were merged and in what positions.
212
+ for (const tokenRange of tokenRanges) {
213
+ if (tokenRange.startIndex > currentIndex) {
214
+ tokenRange.startIndex -= mergeCount;
215
+ }
216
+ if (tokenRange.endIndex > currentIndex) {
217
+ tokenRange.endIndex -= mergeCount;
218
+ }
219
+ }
220
+ // Clear and repopulate our set with the updated indices.
221
+ startOrEndIndices.clear();
222
+ for (const tokenRange of tokenRanges) {
223
+ startOrEndIndices.add(tokenRange.startIndex);
224
+ startOrEndIndices.add(tokenRange.endIndex);
225
+ }
226
+ }
227
+ }
228
+ }
229
+ static _isDeclarationName(name) {
230
+ return ExcerptBuilder._isDeclaration(name.parent) && name.parent.name === name;
231
+ }
232
+ static _isDeclaration(node) {
233
+ switch (node.kind) {
234
+ case ts.SyntaxKind.FunctionDeclaration:
235
+ case ts.SyntaxKind.FunctionExpression:
236
+ case ts.SyntaxKind.VariableDeclaration:
237
+ case ts.SyntaxKind.Parameter:
238
+ case ts.SyntaxKind.EnumDeclaration:
239
+ case ts.SyntaxKind.ClassDeclaration:
240
+ case ts.SyntaxKind.ClassExpression:
241
+ case ts.SyntaxKind.ModuleDeclaration:
242
+ case ts.SyntaxKind.MethodDeclaration:
243
+ case ts.SyntaxKind.MethodSignature:
244
+ case ts.SyntaxKind.PropertyDeclaration:
245
+ case ts.SyntaxKind.PropertySignature:
246
+ case ts.SyntaxKind.GetAccessor:
247
+ case ts.SyntaxKind.SetAccessor:
248
+ case ts.SyntaxKind.InterfaceDeclaration:
249
+ case ts.SyntaxKind.TypeAliasDeclaration:
250
+ case ts.SyntaxKind.TypeParameter:
251
+ case ts.SyntaxKind.EnumMember:
252
+ case ts.SyntaxKind.BindingElement:
253
+ return true;
254
+ default:
255
+ return false;
256
+ }
257
+ }
258
+ }
259
+ //# sourceMappingURL=ExcerptBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExcerptBuilder.js","sourceRoot":"","sources":["../../src/generators/ExcerptBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as ts from 'typescript';\n\nimport type { DeclarationReference } from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference';\nimport {\n ExcerptTokenKind,\n type IExcerptToken,\n type IExcerptTokenRange\n} from '@microsoft/api-extractor-model';\n\nimport { Span } from '../analyzer/Span';\nimport type { DeclarationReferenceGenerator } from './DeclarationReferenceGenerator';\nimport type { AstDeclaration } from '../analyzer/AstDeclaration';\n\n/**\n * Used to provide ExcerptBuilder with a list of nodes whose token range we want to capture.\n */\nexport interface IExcerptBuilderNodeTransform {\n /**\n * The node to process\n */\n node: ts.Node;\n\n /**\n * A token range whose startIndex/endIndex will be overwritten with the indexes for the\n * tokens corresponding to IExcerptBuilderNodeTransform.node\n */\n captureTokenRange?: IExcerptTokenRange;\n\n /**\n * Text that will replace the text of the given node during emit.\n */\n replacementText?: string;\n}\n\n/**\n * Internal state for ExcerptBuilder\n */\ninterface IBuildSpanState {\n referenceGenerator: DeclarationReferenceGenerator;\n\n /**\n * The AST node that we will traverse to extract tokens\n */\n startingNode: ts.Node;\n\n /**\n * Normally, the excerpt will include all child nodes for `startingNode`; whereas if `childKindToStopBefore`\n * is specified, then the node traversal will stop before (i.e. excluding) the first immediate child\n * of `startingNode` with the specified syntax kind.\n *\n * @remarks\n * For example, suppose the signature is `interface X: Y { z: string }`. The token `{` has syntax kind\n * `ts.SyntaxKind.FirstPunctuation`, so we can specify that to truncate the excerpt to `interface X: Y`.\n */\n stopBeforeChildKind: ts.SyntaxKind | undefined;\n\n transformsByNode: Map<ts.Node, IExcerptBuilderNodeTransform>;\n\n /**\n * Tracks whether the last appended token was a separator. If so, and we're in the middle of\n * capturing a token range, then omit the separator from the range.\n */\n lastAppendedTokenIsSeparator: boolean;\n}\n\nexport class ExcerptBuilder {\n /**\n * Appends a blank line to the `excerptTokens` list.\n * @param excerptTokens - The target token list to append to\n */\n public static addBlankLine(excerptTokens: IExcerptToken[]): void {\n let newlines: string = '\\n\\n';\n // If the existing text already ended with a newline, then only append one newline\n if (excerptTokens.length > 0) {\n const previousText: string = excerptTokens[excerptTokens.length - 1].text;\n if (/\\n$/.test(previousText)) {\n newlines = '\\n';\n }\n }\n excerptTokens.push({ kind: ExcerptTokenKind.Content, text: newlines });\n }\n\n /**\n * Appends the signature for the specified `AstDeclaration` to the `excerptTokens` list.\n * @param excerptTokens - The target token list to append to\n * @param nodeTransforms - A list of child nodes whose token ranges we want to capture\n */\n public static addDeclaration(\n excerptTokens: IExcerptToken[],\n astDeclaration: AstDeclaration,\n nodeTransforms: IExcerptBuilderNodeTransform[],\n referenceGenerator: DeclarationReferenceGenerator\n ): void {\n let stopBeforeChildKind: ts.SyntaxKind | undefined = undefined;\n\n switch (astDeclaration.declaration.kind) {\n case ts.SyntaxKind.ClassDeclaration:\n case ts.SyntaxKind.EnumDeclaration:\n case ts.SyntaxKind.InterfaceDeclaration:\n // FirstPunctuation = \"{\"\n stopBeforeChildKind = ts.SyntaxKind.FirstPunctuation;\n break;\n case ts.SyntaxKind.ModuleDeclaration:\n // ModuleBlock = the \"{ ... }\" block\n stopBeforeChildKind = ts.SyntaxKind.ModuleBlock;\n break;\n }\n\n const span: Span = new Span(astDeclaration.declaration);\n\n const transformsByNode: Map<ts.Node, IExcerptBuilderNodeTransform> = new Map();\n const captureTokenRanges: IExcerptTokenRange[] = [];\n for (const nodeTransform of nodeTransforms || []) {\n transformsByNode.set(nodeTransform.node, nodeTransform);\n if (nodeTransform.captureTokenRange) {\n captureTokenRanges.push(nodeTransform.captureTokenRange);\n }\n }\n\n ExcerptBuilder._buildSpan(excerptTokens, span, {\n referenceGenerator: referenceGenerator,\n startingNode: span.node,\n stopBeforeChildKind,\n transformsByNode: transformsByNode,\n lastAppendedTokenIsSeparator: false\n });\n\n ExcerptBuilder._condenseTokens(excerptTokens, captureTokenRanges);\n }\n\n public static createEmptyTokenRange(): IExcerptTokenRange {\n return { startIndex: 0, endIndex: 0 };\n }\n\n /** @returns false if we encountered a token that causes iteration to stop. */\n private static _buildSpan(excerptTokens: IExcerptToken[], span: Span, state: IBuildSpanState): boolean {\n if (span.kind === ts.SyntaxKind.JSDocComment) {\n // Discard any comments\n return true;\n }\n\n // Can this node start a excerpt?\n const transform: IExcerptBuilderNodeTransform | undefined = state.transformsByNode.get(span.node);\n\n let captureTokenRange: IExcerptTokenRange | undefined = undefined;\n\n if (transform) {\n captureTokenRange = transform.captureTokenRange;\n if (transform.replacementText !== undefined) {\n excerptTokens.push({\n kind: ExcerptTokenKind.Content,\n text: transform.replacementText\n });\n state.lastAppendedTokenIsSeparator = false;\n\n if (captureTokenRange) {\n captureTokenRange.startIndex = excerptTokens.length;\n captureTokenRange.endIndex = captureTokenRange.startIndex + 1;\n }\n return true;\n }\n }\n\n let excerptStartIndex: number = 0;\n\n if (captureTokenRange) {\n // We will assign capturedTokenRange.startIndex to be the index of the next token to be appended\n excerptStartIndex = excerptTokens.length;\n }\n\n if (span.prefix) {\n let canonicalReference: DeclarationReference | undefined = undefined;\n\n if (span.kind === ts.SyntaxKind.Identifier) {\n const name: ts.Identifier = span.node as ts.Identifier;\n if (!ExcerptBuilder._isDeclarationName(name)) {\n canonicalReference = state.referenceGenerator.getDeclarationReferenceForIdentifier(name);\n }\n }\n\n if (canonicalReference) {\n ExcerptBuilder._appendToken(\n excerptTokens,\n ExcerptTokenKind.Reference,\n span.prefix,\n canonicalReference\n );\n } else {\n ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.prefix);\n }\n state.lastAppendedTokenIsSeparator = false;\n }\n\n for (const child of span.children) {\n if (span.node === state.startingNode) {\n if (state.stopBeforeChildKind && child.kind === state.stopBeforeChildKind) {\n // We reached a child whose kind is stopBeforeChildKind, so stop traversing\n return false;\n }\n }\n\n if (!this._buildSpan(excerptTokens, child, state)) {\n return false;\n }\n }\n\n if (span.suffix) {\n ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.suffix);\n state.lastAppendedTokenIsSeparator = false;\n }\n if (span.separator) {\n ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.separator);\n state.lastAppendedTokenIsSeparator = true;\n }\n\n // Are we building a excerpt? If so, set its range\n if (captureTokenRange) {\n captureTokenRange.startIndex = excerptStartIndex;\n\n // We will assign capturedTokenRange.startIndex to be the index after the last token\n // that was appended so far. However, if the last appended token was a separator, omit\n // it from the range.\n let excerptEndIndex: number = excerptTokens.length;\n if (state.lastAppendedTokenIsSeparator) {\n excerptEndIndex--;\n }\n\n captureTokenRange.endIndex = excerptEndIndex;\n }\n\n return true;\n }\n\n private static _appendToken(\n excerptTokens: IExcerptToken[],\n excerptTokenKind: ExcerptTokenKind,\n text: string,\n canonicalReference?: DeclarationReference\n ): void {\n if (text.length === 0) {\n return;\n }\n\n const excerptToken: IExcerptToken = { kind: excerptTokenKind, text: text };\n if (canonicalReference !== undefined) {\n excerptToken.canonicalReference = canonicalReference.toString();\n }\n excerptTokens.push(excerptToken);\n }\n\n /**\n * Condenses the provided excerpt tokens by merging tokens where possible. Updates the provided token ranges to\n * remain accurate after token merging.\n *\n * @remarks\n * For example, suppose we have excerpt tokens [\"A\", \"B\", \"C\"] and a token range [0, 2]. If the excerpt tokens\n * are condensed to [\"AB\", \"C\"], then the token range would be updated to [0, 1]. Note that merges are only\n * performed if they are compatible with the provided token ranges. In the example above, if our token range was\n * originally [0, 1], we would not be able to merge tokens \"A\" and \"B\".\n */\n private static _condenseTokens(excerptTokens: IExcerptToken[], tokenRanges: IExcerptTokenRange[]): void {\n // This set is used to quickly lookup a start or end index.\n const startOrEndIndices: Set<number> = new Set();\n for (const tokenRange of tokenRanges) {\n startOrEndIndices.add(tokenRange.startIndex);\n startOrEndIndices.add(tokenRange.endIndex);\n }\n\n for (let currentIndex: number = 1; currentIndex < excerptTokens.length; ++currentIndex) {\n while (currentIndex < excerptTokens.length) {\n const prevPrevToken: IExcerptToken = excerptTokens[currentIndex - 2]; // May be undefined\n const prevToken: IExcerptToken = excerptTokens[currentIndex - 1];\n const currentToken: IExcerptToken = excerptTokens[currentIndex];\n\n // The number of excerpt tokens that are merged in this iteration. We need this to determine\n // how to update the start and end indices of our token ranges.\n let mergeCount: number;\n\n // There are two types of merges that can occur. We only perform these merges if they are\n // compatible with all of our token ranges.\n if (\n prevPrevToken &&\n prevPrevToken.kind === ExcerptTokenKind.Reference &&\n prevToken.kind === ExcerptTokenKind.Content &&\n prevToken.text.trim() === '.' &&\n currentToken.kind === ExcerptTokenKind.Reference &&\n !startOrEndIndices.has(currentIndex) &&\n !startOrEndIndices.has(currentIndex - 1)\n ) {\n // If the current token is a reference token, the previous token is a \".\", and the previous-\n // previous token is a reference token, then merge all three tokens into a reference token.\n //\n // For example: Given [\"MyNamespace\" (R), \".\", \"MyClass\" (R)], tokens \".\" and \"MyClass\" might\n // be merged into \"MyNamespace\". The condensed token would be [\"MyNamespace.MyClass\" (R)].\n prevPrevToken.text += prevToken.text + currentToken.text;\n prevPrevToken.canonicalReference = currentToken.canonicalReference;\n mergeCount = 2;\n currentIndex--;\n } else if (\n // If the current and previous tokens are both content tokens, then merge the tokens into a\n // single content token. For example: Given [\"export \", \"declare class\"], these tokens\n // might be merged into \"export declare class\".\n prevToken.kind === ExcerptTokenKind.Content &&\n prevToken.kind === currentToken.kind &&\n !startOrEndIndices.has(currentIndex)\n ) {\n prevToken.text += currentToken.text;\n mergeCount = 1;\n } else {\n // Otherwise, no merging can occur here. Continue to the next index.\n break;\n }\n\n // Remove the now redundant excerpt token(s), as they were merged into a previous token.\n excerptTokens.splice(currentIndex, mergeCount);\n\n // Update the start and end indices for all token ranges based upon how many excerpt\n // tokens were merged and in what positions.\n for (const tokenRange of tokenRanges) {\n if (tokenRange.startIndex > currentIndex) {\n tokenRange.startIndex -= mergeCount;\n }\n\n if (tokenRange.endIndex > currentIndex) {\n tokenRange.endIndex -= mergeCount;\n }\n }\n\n // Clear and repopulate our set with the updated indices.\n startOrEndIndices.clear();\n for (const tokenRange of tokenRanges) {\n startOrEndIndices.add(tokenRange.startIndex);\n startOrEndIndices.add(tokenRange.endIndex);\n }\n }\n }\n }\n\n private static _isDeclarationName(name: ts.Identifier): boolean {\n return ExcerptBuilder._isDeclaration(name.parent) && name.parent.name === name;\n }\n\n private static _isDeclaration(node: ts.Node): node is ts.NamedDeclaration {\n switch (node.kind) {\n case ts.SyntaxKind.FunctionDeclaration:\n case ts.SyntaxKind.FunctionExpression:\n case ts.SyntaxKind.VariableDeclaration:\n case ts.SyntaxKind.Parameter:\n case ts.SyntaxKind.EnumDeclaration:\n case ts.SyntaxKind.ClassDeclaration:\n case ts.SyntaxKind.ClassExpression:\n case ts.SyntaxKind.ModuleDeclaration:\n case ts.SyntaxKind.MethodDeclaration:\n case ts.SyntaxKind.MethodSignature:\n case ts.SyntaxKind.PropertyDeclaration:\n case ts.SyntaxKind.PropertySignature:\n case ts.SyntaxKind.GetAccessor:\n case ts.SyntaxKind.SetAccessor:\n case ts.SyntaxKind.InterfaceDeclaration:\n case ts.SyntaxKind.TypeAliasDeclaration:\n case ts.SyntaxKind.TypeParameter:\n case ts.SyntaxKind.EnumMember:\n case ts.SyntaxKind.BindingElement:\n return true;\n default:\n return false;\n }\n }\n}\n"]}
@@ -0,0 +1,238 @@
1
+ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
2
+ // See LICENSE in the project root for license information.
3
+ import { StringBuilder } from '@rushstack/node-core-library';
4
+ /**
5
+ * A utility for writing indented text.
6
+ *
7
+ * @remarks
8
+ *
9
+ * Note that the indentation is inserted at the last possible opportunity.
10
+ * For example, this code...
11
+ *
12
+ * ```ts
13
+ * writer.write('begin\n');
14
+ * writer.increaseIndent();
15
+ * writer.write('one\ntwo\n');
16
+ * writer.decreaseIndent();
17
+ * writer.increaseIndent();
18
+ * writer.decreaseIndent();
19
+ * writer.write('end');
20
+ * ```
21
+ *
22
+ * ...would produce this output:
23
+ *
24
+ * ```
25
+ * begin
26
+ * one
27
+ * two
28
+ * end
29
+ * ```
30
+ */
31
+ export class IndentedWriter {
32
+ constructor(builder) {
33
+ /**
34
+ * The text characters used to create one level of indentation.
35
+ * Two spaces by default.
36
+ */
37
+ this.defaultIndentPrefix = ' ';
38
+ /**
39
+ * Whether to indent blank lines
40
+ */
41
+ this.indentBlankLines = false;
42
+ /**
43
+ * Trims leading spaces from the input text before applying the indent.
44
+ *
45
+ * @remarks
46
+ * Consider the following example:
47
+ *
48
+ * ```ts
49
+ * indentedWriter.increaseIndent(' '); // four spaces
50
+ * indentedWriter.write(' a\n b c\n');
51
+ * indentedWriter.decreaseIndent();
52
+ * ```
53
+ *
54
+ * Normally the output would be indented by 6 spaces: 4 from `increaseIndent()`, plus the 2 spaces
55
+ * from `write()`:
56
+ * ```
57
+ * a
58
+ * b c
59
+ * ```
60
+ *
61
+ * Setting `trimLeadingSpaces=true` will trim the leading spaces, so that the lines are indented
62
+ * by 4 spaces only:
63
+ * ```
64
+ * a
65
+ * b c
66
+ * ```
67
+ */
68
+ this.trimLeadingSpaces = false;
69
+ this._builder = builder === undefined ? new StringBuilder() : builder;
70
+ this._latestChunk = undefined;
71
+ this._previousChunk = undefined;
72
+ this._atStartOfLine = true;
73
+ this._previousLineIsBlank = true;
74
+ this._currentLineIsBlank = true;
75
+ this._indentStack = [];
76
+ this._indentText = '';
77
+ }
78
+ /**
79
+ * Retrieves the output that was built so far.
80
+ */
81
+ getText() {
82
+ return this._builder.toString();
83
+ }
84
+ toString() {
85
+ return this.getText();
86
+ }
87
+ /**
88
+ * Increases the indentation. Normally the indentation is two spaces,
89
+ * however an arbitrary prefix can optional be specified. (For example,
90
+ * the prefix could be "// " to indent and comment simultaneously.)
91
+ * Each call to IndentedWriter.increaseIndent() must be followed by a
92
+ * corresponding call to IndentedWriter.decreaseIndent().
93
+ */
94
+ increaseIndent(indentPrefix) {
95
+ this._indentStack.push(indentPrefix !== undefined ? indentPrefix : this.defaultIndentPrefix);
96
+ this._updateIndentText();
97
+ }
98
+ /**
99
+ * Decreases the indentation, reverting the effect of the corresponding call
100
+ * to IndentedWriter.increaseIndent().
101
+ */
102
+ decreaseIndent() {
103
+ this._indentStack.pop();
104
+ this._updateIndentText();
105
+ }
106
+ /**
107
+ * A shorthand for ensuring that increaseIndent()/decreaseIndent() occur
108
+ * in pairs.
109
+ */
110
+ indentScope(scope, indentPrefix) {
111
+ this.increaseIndent(indentPrefix);
112
+ scope();
113
+ this.decreaseIndent();
114
+ }
115
+ /**
116
+ * Adds a newline if the file pointer is not already at the start of the line (or start of the stream).
117
+ */
118
+ ensureNewLine() {
119
+ const lastCharacter = this.peekLastCharacter();
120
+ if (lastCharacter !== '\n' && lastCharacter !== '') {
121
+ this._writeNewLine();
122
+ }
123
+ }
124
+ /**
125
+ * Adds up to two newlines to ensure that there is a blank line above the current position.
126
+ * The start of the stream is considered to be a blank line, so `ensureSkippedLine()` has no effect
127
+ * unless some text has been written.
128
+ */
129
+ ensureSkippedLine() {
130
+ this.ensureNewLine();
131
+ if (!this._previousLineIsBlank) {
132
+ this._writeNewLine();
133
+ }
134
+ }
135
+ /**
136
+ * Returns the last character that was written, or an empty string if no characters have been written yet.
137
+ */
138
+ peekLastCharacter() {
139
+ if (this._latestChunk !== undefined) {
140
+ return this._latestChunk.substr(-1, 1);
141
+ }
142
+ return '';
143
+ }
144
+ /**
145
+ * Returns the second to last character that was written, or an empty string if less than one characters
146
+ * have been written yet.
147
+ */
148
+ peekSecondLastCharacter() {
149
+ if (this._latestChunk !== undefined) {
150
+ if (this._latestChunk.length > 1) {
151
+ return this._latestChunk.substr(-2, 1);
152
+ }
153
+ if (this._previousChunk !== undefined) {
154
+ return this._previousChunk.substr(-1, 1);
155
+ }
156
+ }
157
+ return '';
158
+ }
159
+ /**
160
+ * Writes some text to the internal string buffer, applying indentation according
161
+ * to the current indentation level. If the string contains multiple newlines,
162
+ * each line will be indented separately.
163
+ */
164
+ write(message) {
165
+ if (message.length === 0) {
166
+ return;
167
+ }
168
+ // If there are no newline characters, then append the string verbatim
169
+ if (!/[\r\n]/.test(message)) {
170
+ this._writeLinePart(message);
171
+ return;
172
+ }
173
+ // Otherwise split the lines and write each one individually
174
+ let first = true;
175
+ for (const linePart of message.split('\n')) {
176
+ if (!first) {
177
+ this._writeNewLine();
178
+ }
179
+ else {
180
+ first = false;
181
+ }
182
+ if (linePart) {
183
+ this._writeLinePart(linePart.replace(/[\r]/g, ''));
184
+ }
185
+ }
186
+ }
187
+ /**
188
+ * A shorthand for writing an optional message, followed by a newline.
189
+ * Indentation is applied following the semantics of IndentedWriter.write().
190
+ */
191
+ writeLine(message = '') {
192
+ if (message.length > 0) {
193
+ this.write(message);
194
+ }
195
+ this._writeNewLine();
196
+ }
197
+ /**
198
+ * Writes a string that does not contain any newline characters.
199
+ */
200
+ _writeLinePart(message) {
201
+ let trimmedMessage = message;
202
+ if (this.trimLeadingSpaces && this._atStartOfLine) {
203
+ trimmedMessage = message.replace(/^ +/, '');
204
+ }
205
+ if (trimmedMessage.length > 0) {
206
+ if (this._atStartOfLine && this._indentText.length > 0) {
207
+ this._write(this._indentText);
208
+ }
209
+ this._write(trimmedMessage);
210
+ if (this._currentLineIsBlank) {
211
+ if (/\S/.test(trimmedMessage)) {
212
+ this._currentLineIsBlank = false;
213
+ }
214
+ }
215
+ this._atStartOfLine = false;
216
+ }
217
+ }
218
+ _writeNewLine() {
219
+ if (this.indentBlankLines) {
220
+ if (this._atStartOfLine && this._indentText.length > 0) {
221
+ this._write(this._indentText);
222
+ }
223
+ }
224
+ this._previousLineIsBlank = this._currentLineIsBlank;
225
+ this._write('\n');
226
+ this._currentLineIsBlank = true;
227
+ this._atStartOfLine = true;
228
+ }
229
+ _write(s) {
230
+ this._previousChunk = this._latestChunk;
231
+ this._latestChunk = s;
232
+ this._builder.append(s);
233
+ }
234
+ _updateIndentText() {
235
+ this._indentText = this._indentStack.join('');
236
+ }
237
+ }
238
+ //# sourceMappingURL=IndentedWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndentedWriter.js","sourceRoot":"","sources":["../../src/generators/IndentedWriter.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 { StringBuilder, type IStringBuilder } from '@rushstack/node-core-library';\n\n/**\n * A utility for writing indented text.\n *\n * @remarks\n *\n * Note that the indentation is inserted at the last possible opportunity.\n * For example, this code...\n *\n * ```ts\n * writer.write('begin\\n');\n * writer.increaseIndent();\n * writer.write('one\\ntwo\\n');\n * writer.decreaseIndent();\n * writer.increaseIndent();\n * writer.decreaseIndent();\n * writer.write('end');\n * ```\n *\n * ...would produce this output:\n *\n * ```\n * begin\n * one\n * two\n * end\n * ```\n */\nexport class IndentedWriter {\n /**\n * The text characters used to create one level of indentation.\n * Two spaces by default.\n */\n public defaultIndentPrefix: string = ' ';\n\n /**\n * Whether to indent blank lines\n */\n public indentBlankLines: boolean = false;\n\n /**\n * Trims leading spaces from the input text before applying the indent.\n *\n * @remarks\n * Consider the following example:\n *\n * ```ts\n * indentedWriter.increaseIndent(' '); // four spaces\n * indentedWriter.write(' a\\n b c\\n');\n * indentedWriter.decreaseIndent();\n * ```\n *\n * Normally the output would be indented by 6 spaces: 4 from `increaseIndent()`, plus the 2 spaces\n * from `write()`:\n * ```\n * a\n * b c\n * ```\n *\n * Setting `trimLeadingSpaces=true` will trim the leading spaces, so that the lines are indented\n * by 4 spaces only:\n * ```\n * a\n * b c\n * ```\n */\n public trimLeadingSpaces: boolean = false;\n\n private readonly _builder: IStringBuilder;\n\n private _latestChunk: string | undefined;\n private _previousChunk: string | undefined;\n private _atStartOfLine: boolean;\n\n private readonly _indentStack: string[];\n private _indentText: string;\n\n private _previousLineIsBlank: boolean;\n private _currentLineIsBlank: boolean;\n\n public constructor(builder?: IStringBuilder) {\n this._builder = builder === undefined ? new StringBuilder() : builder;\n this._latestChunk = undefined;\n this._previousChunk = undefined;\n this._atStartOfLine = true;\n this._previousLineIsBlank = true;\n this._currentLineIsBlank = true;\n\n this._indentStack = [];\n this._indentText = '';\n }\n\n /**\n * Retrieves the output that was built so far.\n */\n public getText(): string {\n return this._builder.toString();\n }\n\n public toString(): string {\n return this.getText();\n }\n\n /**\n * Increases the indentation. Normally the indentation is two spaces,\n * however an arbitrary prefix can optional be specified. (For example,\n * the prefix could be \"// \" to indent and comment simultaneously.)\n * Each call to IndentedWriter.increaseIndent() must be followed by a\n * corresponding call to IndentedWriter.decreaseIndent().\n */\n public increaseIndent(indentPrefix?: string): void {\n this._indentStack.push(indentPrefix !== undefined ? indentPrefix : this.defaultIndentPrefix);\n this._updateIndentText();\n }\n\n /**\n * Decreases the indentation, reverting the effect of the corresponding call\n * to IndentedWriter.increaseIndent().\n */\n public decreaseIndent(): void {\n this._indentStack.pop();\n this._updateIndentText();\n }\n\n /**\n * A shorthand for ensuring that increaseIndent()/decreaseIndent() occur\n * in pairs.\n */\n public indentScope(scope: () => void, indentPrefix?: string): void {\n this.increaseIndent(indentPrefix);\n scope();\n this.decreaseIndent();\n }\n\n /**\n * Adds a newline if the file pointer is not already at the start of the line (or start of the stream).\n */\n public ensureNewLine(): void {\n const lastCharacter: string = this.peekLastCharacter();\n if (lastCharacter !== '\\n' && lastCharacter !== '') {\n this._writeNewLine();\n }\n }\n\n /**\n * Adds up to two newlines to ensure that there is a blank line above the current position.\n * The start of the stream is considered to be a blank line, so `ensureSkippedLine()` has no effect\n * unless some text has been written.\n */\n public ensureSkippedLine(): void {\n this.ensureNewLine();\n if (!this._previousLineIsBlank) {\n this._writeNewLine();\n }\n }\n\n /**\n * Returns the last character that was written, or an empty string if no characters have been written yet.\n */\n public peekLastCharacter(): string {\n if (this._latestChunk !== undefined) {\n return this._latestChunk.substr(-1, 1);\n }\n return '';\n }\n\n /**\n * Returns the second to last character that was written, or an empty string if less than one characters\n * have been written yet.\n */\n public peekSecondLastCharacter(): string {\n if (this._latestChunk !== undefined) {\n if (this._latestChunk.length > 1) {\n return this._latestChunk.substr(-2, 1);\n }\n if (this._previousChunk !== undefined) {\n return this._previousChunk.substr(-1, 1);\n }\n }\n return '';\n }\n\n /**\n * Writes some text to the internal string buffer, applying indentation according\n * to the current indentation level. If the string contains multiple newlines,\n * each line will be indented separately.\n */\n public write(message: string): void {\n if (message.length === 0) {\n return;\n }\n\n // If there are no newline characters, then append the string verbatim\n if (!/[\\r\\n]/.test(message)) {\n this._writeLinePart(message);\n return;\n }\n\n // Otherwise split the lines and write each one individually\n let first: boolean = true;\n for (const linePart of message.split('\\n')) {\n if (!first) {\n this._writeNewLine();\n } else {\n first = false;\n }\n if (linePart) {\n this._writeLinePart(linePart.replace(/[\\r]/g, ''));\n }\n }\n }\n\n /**\n * A shorthand for writing an optional message, followed by a newline.\n * Indentation is applied following the semantics of IndentedWriter.write().\n */\n public writeLine(message: string = ''): void {\n if (message.length > 0) {\n this.write(message);\n }\n this._writeNewLine();\n }\n\n /**\n * Writes a string that does not contain any newline characters.\n */\n private _writeLinePart(message: string): void {\n let trimmedMessage: string = message;\n\n if (this.trimLeadingSpaces && this._atStartOfLine) {\n trimmedMessage = message.replace(/^ +/, '');\n }\n\n if (trimmedMessage.length > 0) {\n if (this._atStartOfLine && this._indentText.length > 0) {\n this._write(this._indentText);\n }\n this._write(trimmedMessage);\n if (this._currentLineIsBlank) {\n if (/\\S/.test(trimmedMessage)) {\n this._currentLineIsBlank = false;\n }\n }\n this._atStartOfLine = false;\n }\n }\n\n private _writeNewLine(): void {\n if (this.indentBlankLines) {\n if (this._atStartOfLine && this._indentText.length > 0) {\n this._write(this._indentText);\n }\n }\n\n this._previousLineIsBlank = this._currentLineIsBlank;\n this._write('\\n');\n this._currentLineIsBlank = true;\n this._atStartOfLine = true;\n }\n\n private _write(s: string): void {\n this._previousChunk = this._latestChunk;\n this._latestChunk = s;\n this._builder.append(s);\n }\n\n private _updateIndentText(): void {\n this._indentText = this._indentStack.join('');\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
2
+ // See LICENSE in the project root for license information.
3
+ /**
4
+ * API Extractor helps with validation, documentation, and reviewing of the exported API for a TypeScript library.
5
+ * The `@microsoft/api-extractor` package provides the command-line tool. It also exposes a developer API that you
6
+ * can use to invoke API Extractor programmatically.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ export { ConsoleMessageId } from './api/ConsoleMessageId';
11
+ export { CompilerState } from './api/CompilerState';
12
+ export { Extractor, ExtractorResult } from './api/Extractor';
13
+ export { ExtractorConfig } from './api/ExtractorConfig';
14
+ export { ExtractorLogLevel } from './api/ExtractorLogLevel';
15
+ export { ExtractorMessage, ExtractorMessageCategory } from './api/ExtractorMessage';
16
+ export { ExtractorMessageId } from './api/ExtractorMessageId';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAoC,MAAM,qBAAqB,CAAC;AAEtF,OAAO,EAAE,SAAS,EAAgC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAIL,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAEhB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n/**\n * API Extractor helps with validation, documentation, and reviewing of the exported API for a TypeScript library.\n * The `@microsoft/api-extractor` package provides the command-line tool. It also exposes a developer API that you\n * can use to invoke API Extractor programmatically.\n *\n * @packageDocumentation\n */\n\nexport { ConsoleMessageId } from './api/ConsoleMessageId';\n\nexport { CompilerState, type ICompilerStateCreateOptions } from './api/CompilerState';\n\nexport { Extractor, type IExtractorInvokeOptions, ExtractorResult } from './api/Extractor';\n\nexport {\n type IExtractorConfigApiReport,\n type IExtractorConfigPrepareOptions,\n type IExtractorConfigLoadForFolderOptions,\n ExtractorConfig\n} from './api/ExtractorConfig';\n\nexport type { IApiModelGenerationOptions } from './generators/ApiModelGenerator';\n\nexport { ExtractorLogLevel } from './api/ExtractorLogLevel';\n\nexport {\n ExtractorMessage,\n type IExtractorMessageProperties,\n ExtractorMessageCategory\n} from './api/ExtractorMessage';\n\nexport { ExtractorMessageId } from './api/ExtractorMessageId';\n\nexport type {\n ApiReportVariant,\n IConfigCompiler,\n IConfigApiReport,\n IConfigDocModel,\n IConfigDtsRollup,\n IConfigTsdocMetadata,\n IConfigMessageReportingRule,\n IConfigMessageReportingTable,\n IExtractorMessagesConfig,\n IConfigFile,\n ReleaseTagForTrim\n} from './api/IConfigFile';\n"]}