typedoc 0.22.14 → 0.23.0-beta.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 (270) hide show
  1. package/README.md +2 -16
  2. package/dist/index.d.ts +2 -2
  3. package/dist/index.js +1 -2
  4. package/dist/lib/application.js +15 -15
  5. package/dist/lib/converter/comments/blockLexer.d.ts +14 -0
  6. package/dist/lib/converter/comments/blockLexer.js +320 -0
  7. package/dist/lib/converter/comments/discovery.d.ts +5 -0
  8. package/dist/lib/converter/comments/discovery.js +213 -0
  9. package/dist/lib/converter/comments/index.d.ts +11 -0
  10. package/dist/lib/converter/comments/index.js +101 -0
  11. package/dist/lib/converter/comments/parser.d.ts +4 -0
  12. package/dist/lib/converter/comments/parser.js +263 -0
  13. package/dist/lib/converter/context.d.ts +4 -13
  14. package/dist/lib/converter/context.js +60 -17
  15. package/dist/lib/converter/convert-expression.js +1 -1
  16. package/dist/lib/converter/converter.d.ts +4 -6
  17. package/dist/lib/converter/converter.js +24 -120
  18. package/dist/lib/converter/factories/index-signature.js +2 -3
  19. package/dist/lib/converter/factories/signature.d.ts +1 -1
  20. package/dist/lib/converter/factories/signature.js +30 -24
  21. package/dist/lib/converter/index.d.ts +1 -0
  22. package/dist/lib/converter/jsdoc.js +13 -13
  23. package/dist/lib/converter/plugins/CategoryPlugin.d.ts +3 -0
  24. package/dist/lib/converter/plugins/CategoryPlugin.js +19 -29
  25. package/dist/lib/converter/plugins/CommentPlugin.d.ts +3 -3
  26. package/dist/lib/converter/plugins/CommentPlugin.js +108 -181
  27. package/dist/lib/converter/plugins/GroupPlugin.d.ts +8 -1
  28. package/dist/lib/converter/plugins/GroupPlugin.js +45 -46
  29. package/dist/lib/converter/plugins/ImplementsPlugin.js +26 -31
  30. package/dist/lib/converter/plugins/InheritDocPlugin.d.ts +5 -2
  31. package/dist/lib/converter/plugins/InheritDocPlugin.js +113 -32
  32. package/dist/lib/converter/plugins/LinkResolverPlugin.d.ts +33 -0
  33. package/dist/lib/converter/plugins/LinkResolverPlugin.js +163 -0
  34. package/dist/lib/converter/plugins/PackagePlugin.js +27 -3
  35. package/dist/lib/converter/plugins/SourcePlugin.d.ts +15 -18
  36. package/dist/lib/converter/plugins/SourcePlugin.js +72 -86
  37. package/dist/lib/converter/plugins/index.d.ts +2 -3
  38. package/dist/lib/converter/plugins/index.js +5 -7
  39. package/dist/lib/converter/symbols.js +74 -82
  40. package/dist/lib/converter/types.js +25 -37
  41. package/dist/lib/converter/utils/base-path.js +2 -2
  42. package/dist/lib/converter/utils/nodes.js +3 -5
  43. package/dist/lib/converter/utils/reflections.d.ts +3 -1
  44. package/dist/lib/converter/utils/reflections.js +15 -42
  45. package/dist/lib/converter/{plugins/SourceLinkPlugin.d.ts → utils/repository.d.ts} +3 -37
  46. package/dist/lib/converter/{plugins/SourceLinkPlugin.js → utils/repository.js} +23 -123
  47. package/dist/lib/models/ReflectionCategory.d.ts +2 -0
  48. package/dist/lib/models/ReflectionCategory.js +8 -0
  49. package/dist/lib/models/ReflectionGroup.d.ts +3 -28
  50. package/dist/lib/models/ReflectionGroup.js +12 -3
  51. package/dist/lib/models/comments/comment.d.ts +89 -25
  52. package/dist/lib/models/comments/comment.js +125 -43
  53. package/dist/lib/models/comments/index.d.ts +2 -2
  54. package/dist/lib/models/comments/index.js +1 -2
  55. package/dist/lib/models/reflections/abstract.d.ts +11 -32
  56. package/dist/lib/models/reflections/abstract.js +37 -13
  57. package/dist/lib/models/reflections/container.d.ts +2 -0
  58. package/dist/lib/models/reflections/container.js +12 -2
  59. package/dist/lib/models/reflections/declaration.d.ts +6 -5
  60. package/dist/lib/models/reflections/declaration.js +30 -9
  61. package/dist/lib/models/reflections/index.d.ts +1 -1
  62. package/dist/lib/models/reflections/kind.d.ts +3 -2
  63. package/dist/lib/models/reflections/kind.js +6 -4
  64. package/dist/lib/models/reflections/parameter.d.ts +2 -0
  65. package/dist/lib/models/reflections/parameter.js +7 -0
  66. package/dist/lib/models/reflections/project.d.ts +0 -21
  67. package/dist/lib/models/reflections/project.js +9 -55
  68. package/dist/lib/models/reflections/reference.d.ts +3 -0
  69. package/dist/lib/models/reflections/reference.js +9 -0
  70. package/dist/lib/models/reflections/signature.d.ts +4 -5
  71. package/dist/lib/models/reflections/signature.js +19 -8
  72. package/dist/lib/models/reflections/type-parameter.d.ts +6 -7
  73. package/dist/lib/models/reflections/type-parameter.js +7 -3
  74. package/dist/lib/models/reflections/utils.js +4 -3
  75. package/dist/lib/models/sources/file.d.ts +10 -59
  76. package/dist/lib/models/sources/file.js +18 -24
  77. package/dist/lib/models/sources/index.d.ts +1 -3
  78. package/dist/lib/models/sources/index.js +2 -4
  79. package/dist/lib/models/types.d.ts +63 -46
  80. package/dist/lib/models/types.js +206 -57
  81. package/dist/lib/output/events.d.ts +1 -7
  82. package/dist/lib/output/events.js +1 -1
  83. package/dist/lib/output/plugins/JavascriptIndexPlugin.js +1 -2
  84. package/dist/lib/output/plugins/index.d.ts +0 -2
  85. package/dist/lib/output/plugins/index.js +1 -5
  86. package/dist/lib/output/renderer.d.ts +18 -10
  87. package/dist/lib/output/renderer.js +2 -13
  88. package/dist/lib/output/themes/MarkedPlugin.js +5 -7
  89. package/dist/lib/output/themes/default/DefaultTheme.d.ts +3 -11
  90. package/dist/lib/output/themes/default/DefaultTheme.js +63 -96
  91. package/dist/lib/output/themes/default/DefaultThemeRenderContext.d.ts +4 -3
  92. package/dist/lib/output/themes/default/DefaultThemeRenderContext.js +2 -0
  93. package/dist/lib/output/themes/default/layouts/default.js +12 -6
  94. package/dist/lib/output/themes/default/partials/analytics.js +8 -9
  95. package/dist/lib/output/themes/default/partials/comment.d.ts +1 -1
  96. package/dist/lib/output/themes/default/partials/comment.js +47 -13
  97. package/dist/lib/output/themes/default/partials/footer.d.ts +1 -3
  98. package/dist/lib/output/themes/default/partials/footer.js +4 -23
  99. package/dist/lib/output/themes/default/partials/header.d.ts +2 -2
  100. package/dist/lib/output/themes/default/partials/header.js +12 -41
  101. package/dist/lib/output/themes/default/partials/icon.d.ts +5 -0
  102. package/dist/lib/output/themes/default/partials/icon.js +86 -0
  103. package/dist/lib/output/themes/default/partials/index.d.ts +1 -1
  104. package/dist/lib/output/themes/default/partials/index.js +24 -16
  105. package/dist/lib/output/themes/default/partials/member.declaration.js +4 -4
  106. package/dist/lib/output/themes/default/partials/member.getterSetter.js +8 -4
  107. package/dist/lib/output/themes/default/partials/member.js +14 -17
  108. package/dist/lib/output/themes/default/partials/member.signature.body.js +25 -30
  109. package/dist/lib/output/themes/default/partials/member.signature.title.js +18 -21
  110. package/dist/lib/output/themes/default/partials/member.signatures.js +3 -6
  111. package/dist/lib/output/themes/default/partials/members.group.js +2 -2
  112. package/dist/lib/output/themes/default/partials/members.js +1 -2
  113. package/dist/lib/output/themes/default/partials/navigation.js +80 -40
  114. package/dist/lib/output/themes/default/partials/parameter.js +64 -66
  115. package/dist/lib/output/themes/default/partials/toolbar.d.ts +5 -0
  116. package/dist/lib/output/themes/default/partials/toolbar.js +18 -0
  117. package/dist/lib/output/themes/default/partials/type.js +59 -47
  118. package/dist/lib/output/themes/default/partials/typeAndParent.js +3 -3
  119. package/dist/lib/output/themes/default/partials/typeParameters.js +1 -1
  120. package/dist/lib/output/themes/default/templates/reflection.d.ts +1 -1
  121. package/dist/lib/output/themes/default/templates/reflection.js +15 -15
  122. package/dist/lib/output/themes/lib.d.ts +4 -3
  123. package/dist/lib/output/themes/lib.js +25 -16
  124. package/dist/lib/serialization/components.d.ts +5 -51
  125. package/dist/lib/serialization/components.js +0 -52
  126. package/dist/lib/serialization/events.d.ts +2 -2
  127. package/dist/lib/serialization/index.d.ts +1 -2
  128. package/dist/lib/serialization/index.js +1 -30
  129. package/dist/lib/serialization/schema.d.ts +28 -23
  130. package/dist/lib/serialization/serializer.d.ts +4 -7
  131. package/dist/lib/serialization/serializer.js +13 -83
  132. package/dist/lib/utils/array.d.ts +0 -6
  133. package/dist/lib/utils/array.js +6 -29
  134. package/dist/lib/utils/entry-point.js +2 -2
  135. package/dist/lib/utils/enum.js +2 -2
  136. package/dist/lib/utils/events.js +1 -1
  137. package/dist/lib/utils/fs.d.ts +4 -0
  138. package/dist/lib/utils/fs.js +31 -1
  139. package/dist/lib/utils/general.d.ts +4 -0
  140. package/dist/lib/utils/general.js +9 -1
  141. package/dist/lib/utils/highlighter.js +13 -30
  142. package/dist/lib/utils/hooks.d.ts +1 -6
  143. package/dist/lib/utils/hooks.js +2 -8
  144. package/dist/lib/utils/index.d.ts +2 -0
  145. package/dist/lib/utils/index.js +5 -1
  146. package/dist/lib/utils/jsx.d.ts +1 -1
  147. package/dist/lib/utils/jsx.elements.d.ts +16 -0
  148. package/dist/lib/utils/jsx.js +1 -1
  149. package/dist/lib/utils/loggers.d.ts +7 -10
  150. package/dist/lib/utils/loggers.js +40 -25
  151. package/dist/lib/utils/map.d.ts +5 -0
  152. package/dist/lib/utils/map.js +19 -0
  153. package/dist/lib/utils/options/declaration.d.ts +3 -7
  154. package/dist/lib/utils/options/declaration.js +21 -43
  155. package/dist/lib/utils/options/help.js +1 -2
  156. package/dist/lib/utils/options/options.d.ts +0 -20
  157. package/dist/lib/utils/options/options.js +8 -37
  158. package/dist/lib/utils/options/readers/tsconfig.js +1 -2
  159. package/dist/lib/utils/options/readers/typedoc.js +2 -0
  160. package/dist/lib/utils/options/sources/typedoc.js +45 -16
  161. package/dist/lib/utils/package-manifest.js +5 -16
  162. package/dist/lib/utils/perf.d.ts +3 -0
  163. package/dist/lib/utils/perf.js +66 -0
  164. package/dist/lib/utils/plugins.js +1 -1
  165. package/dist/lib/utils/sort.js +6 -10
  166. package/dist/lib/validation/documentation.js +2 -3
  167. package/dist/lib/validation/exports.d.ts +1 -1
  168. package/dist/lib/validation/exports.js +10 -16
  169. package/dist/lib/validation/links.d.ts +3 -0
  170. package/dist/lib/validation/links.js +25 -0
  171. package/package.json +14 -16
  172. package/static/main.js +4 -2
  173. package/static/style.css +425 -539
  174. package/dist/lib/converter/factories/comment.d.ts +0 -19
  175. package/dist/lib/converter/factories/comment.js +0 -249
  176. package/dist/lib/converter/plugins/DecoratorPlugin.d.ts +0 -28
  177. package/dist/lib/converter/plugins/DecoratorPlugin.js +0 -112
  178. package/dist/lib/models/comments/tag.d.ts +0 -23
  179. package/dist/lib/models/comments/tag.js +0 -19
  180. package/dist/lib/models/sources/directory.d.ts +0 -60
  181. package/dist/lib/models/sources/directory.js +0 -60
  182. package/dist/lib/output/plugins/LegendPlugin.d.ts +0 -38
  183. package/dist/lib/output/plugins/LegendPlugin.js +0 -301
  184. package/dist/lib/output/plugins/MarkedLinksPlugin.d.ts +0 -72
  185. package/dist/lib/output/plugins/MarkedLinksPlugin.js +0 -178
  186. package/dist/lib/serialization/serializers/comments/comment-tag.d.ts +0 -12
  187. package/dist/lib/serialization/serializers/comments/comment-tag.js +0 -28
  188. package/dist/lib/serialization/serializers/comments/comment.d.ts +0 -12
  189. package/dist/lib/serialization/serializers/comments/comment.js +0 -33
  190. package/dist/lib/serialization/serializers/comments/index.d.ts +0 -2
  191. package/dist/lib/serialization/serializers/comments/index.js +0 -7
  192. package/dist/lib/serialization/serializers/decorator.d.ts +0 -12
  193. package/dist/lib/serialization/serializers/decorator.js +0 -31
  194. package/dist/lib/serialization/serializers/index.d.ts +0 -8
  195. package/dist/lib/serialization/serializers/index.js +0 -24
  196. package/dist/lib/serialization/serializers/models/decorator-wrapper.d.ts +0 -9
  197. package/dist/lib/serialization/serializers/models/decorator-wrapper.js +0 -13
  198. package/dist/lib/serialization/serializers/models/index.d.ts +0 -2
  199. package/dist/lib/serialization/serializers/models/index.js +0 -7
  200. package/dist/lib/serialization/serializers/models/source-reference-wrapper.d.ts +0 -9
  201. package/dist/lib/serialization/serializers/models/source-reference-wrapper.js +0 -13
  202. package/dist/lib/serialization/serializers/reflection-category.d.ts +0 -12
  203. package/dist/lib/serialization/serializers/reflection-category.js +0 -28
  204. package/dist/lib/serialization/serializers/reflection-group.d.ts +0 -12
  205. package/dist/lib/serialization/serializers/reflection-group.js +0 -32
  206. package/dist/lib/serialization/serializers/reflections/abstract.d.ts +0 -8
  207. package/dist/lib/serialization/serializers/reflections/abstract.js +0 -49
  208. package/dist/lib/serialization/serializers/reflections/container.d.ts +0 -12
  209. package/dist/lib/serialization/serializers/reflections/container.js +0 -27
  210. package/dist/lib/serialization/serializers/reflections/declaration.d.ts +0 -8
  211. package/dist/lib/serialization/serializers/reflections/declaration.js +0 -38
  212. package/dist/lib/serialization/serializers/reflections/index.d.ts +0 -7
  213. package/dist/lib/serialization/serializers/reflections/index.js +0 -23
  214. package/dist/lib/serialization/serializers/reflections/parameter.d.ts +0 -7
  215. package/dist/lib/serialization/serializers/reflections/parameter.js +0 -19
  216. package/dist/lib/serialization/serializers/reflections/reference.d.ts +0 -8
  217. package/dist/lib/serialization/serializers/reflections/reference.js +0 -20
  218. package/dist/lib/serialization/serializers/reflections/signature.d.ts +0 -7
  219. package/dist/lib/serialization/serializers/reflections/signature.js +0 -22
  220. package/dist/lib/serialization/serializers/reflections/type-parameter.d.ts +0 -7
  221. package/dist/lib/serialization/serializers/reflections/type-parameter.js +0 -18
  222. package/dist/lib/serialization/serializers/sources/index.d.ts +0 -1
  223. package/dist/lib/serialization/serializers/sources/index.js +0 -5
  224. package/dist/lib/serialization/serializers/sources/source-reference.d.ts +0 -9
  225. package/dist/lib/serialization/serializers/sources/source-reference.js +0 -23
  226. package/dist/lib/serialization/serializers/types/abstract.d.ts +0 -8
  227. package/dist/lib/serialization/serializers/types/abstract.js +0 -18
  228. package/dist/lib/serialization/serializers/types/array.d.ts +0 -12
  229. package/dist/lib/serialization/serializers/types/array.js +0 -22
  230. package/dist/lib/serialization/serializers/types/conditional.d.ts +0 -7
  231. package/dist/lib/serialization/serializers/types/conditional.js +0 -20
  232. package/dist/lib/serialization/serializers/types/index.d.ts +0 -20
  233. package/dist/lib/serialization/serializers/types/index.js +0 -36
  234. package/dist/lib/serialization/serializers/types/indexed-access.d.ts +0 -7
  235. package/dist/lib/serialization/serializers/types/indexed-access.js +0 -18
  236. package/dist/lib/serialization/serializers/types/inferred.d.ts +0 -7
  237. package/dist/lib/serialization/serializers/types/inferred.js +0 -17
  238. package/dist/lib/serialization/serializers/types/intersection.d.ts +0 -12
  239. package/dist/lib/serialization/serializers/types/intersection.js +0 -22
  240. package/dist/lib/serialization/serializers/types/intrinsic.d.ts +0 -12
  241. package/dist/lib/serialization/serializers/types/intrinsic.js +0 -22
  242. package/dist/lib/serialization/serializers/types/literal.d.ts +0 -7
  243. package/dist/lib/serialization/serializers/types/literal.js +0 -26
  244. package/dist/lib/serialization/serializers/types/mapped.d.ts +0 -7
  245. package/dist/lib/serialization/serializers/types/mapped.js +0 -22
  246. package/dist/lib/serialization/serializers/types/optional.d.ts +0 -12
  247. package/dist/lib/serialization/serializers/types/optional.js +0 -22
  248. package/dist/lib/serialization/serializers/types/predicate.d.ts +0 -7
  249. package/dist/lib/serialization/serializers/types/predicate.js +0 -21
  250. package/dist/lib/serialization/serializers/types/query.d.ts +0 -7
  251. package/dist/lib/serialization/serializers/types/query.js +0 -17
  252. package/dist/lib/serialization/serializers/types/reference.d.ts +0 -7
  253. package/dist/lib/serialization/serializers/types/reference.js +0 -27
  254. package/dist/lib/serialization/serializers/types/reflection.d.ts +0 -7
  255. package/dist/lib/serialization/serializers/types/reflection.js +0 -18
  256. package/dist/lib/serialization/serializers/types/rest.d.ts +0 -12
  257. package/dist/lib/serialization/serializers/types/rest.js +0 -22
  258. package/dist/lib/serialization/serializers/types/template-literal.d.ts +0 -7
  259. package/dist/lib/serialization/serializers/types/template-literal.js +0 -21
  260. package/dist/lib/serialization/serializers/types/tuple.d.ts +0 -11
  261. package/dist/lib/serialization/serializers/types/tuple.js +0 -32
  262. package/dist/lib/serialization/serializers/types/type-operator.d.ts +0 -7
  263. package/dist/lib/serialization/serializers/types/type-operator.js +0 -18
  264. package/dist/lib/serialization/serializers/types/union.d.ts +0 -12
  265. package/dist/lib/serialization/serializers/types/union.js +0 -22
  266. package/dist/lib/serialization/serializers/types/unknown.d.ts +0 -12
  267. package/dist/lib/serialization/serializers/types/unknown.js +0 -22
  268. package/static/icons.css +0 -1043
  269. package/static/icons.png +0 -0
  270. package/static/icons@2x.png +0 -0
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.discoverSignatureComment = exports.discoverComment = void 0;
4
+ const ts = require("typescript");
5
+ const models_1 = require("../../models");
6
+ const paths_1 = require("../../utils/paths");
7
+ // Note: This does NOT include JSDoc syntax kinds. This is important!
8
+ // Comments from @typedef and @callback tags are handled specially by
9
+ // the JSDoc converter because we only want part of the comment when
10
+ // getting them.
11
+ const wantedKinds = {
12
+ [models_1.ReflectionKind.Project]: [ts.SyntaxKind.SourceFile],
13
+ [models_1.ReflectionKind.Module]: [ts.SyntaxKind.SourceFile],
14
+ [models_1.ReflectionKind.Namespace]: [
15
+ ts.SyntaxKind.ModuleDeclaration,
16
+ ts.SyntaxKind.SourceFile,
17
+ ts.SyntaxKind.BindingElement,
18
+ ts.SyntaxKind.ExportSpecifier,
19
+ ],
20
+ [models_1.ReflectionKind.Enum]: [
21
+ ts.SyntaxKind.EnumDeclaration,
22
+ ts.SyntaxKind.VariableDeclaration,
23
+ ],
24
+ [models_1.ReflectionKind.EnumMember]: [
25
+ ts.SyntaxKind.EnumMember,
26
+ // These here so that @enum gets comments
27
+ ts.SyntaxKind.PropertyAssignment,
28
+ ts.SyntaxKind.PropertySignature,
29
+ ],
30
+ [models_1.ReflectionKind.Variable]: [
31
+ ts.SyntaxKind.VariableDeclaration,
32
+ ts.SyntaxKind.BindingElement,
33
+ ts.SyntaxKind.ExportAssignment,
34
+ ],
35
+ [models_1.ReflectionKind.Function]: [
36
+ ts.SyntaxKind.FunctionDeclaration,
37
+ ts.SyntaxKind.BindingElement,
38
+ ],
39
+ [models_1.ReflectionKind.Class]: [
40
+ ts.SyntaxKind.ClassDeclaration,
41
+ ts.SyntaxKind.BindingElement,
42
+ ],
43
+ [models_1.ReflectionKind.Interface]: [ts.SyntaxKind.InterfaceDeclaration],
44
+ [models_1.ReflectionKind.Constructor]: [ts.SyntaxKind.Constructor],
45
+ [models_1.ReflectionKind.Property]: [
46
+ ts.SyntaxKind.PropertyDeclaration,
47
+ ts.SyntaxKind.PropertySignature,
48
+ ts.SyntaxKind.BinaryExpression,
49
+ ts.SyntaxKind.PropertyAssignment,
50
+ ],
51
+ [models_1.ReflectionKind.Method]: [
52
+ ts.SyntaxKind.FunctionDeclaration,
53
+ ts.SyntaxKind.MethodDeclaration,
54
+ ],
55
+ [models_1.ReflectionKind.CallSignature]: [
56
+ ts.SyntaxKind.FunctionDeclaration,
57
+ ts.SyntaxKind.VariableDeclaration,
58
+ ts.SyntaxKind.MethodDeclaration,
59
+ ts.SyntaxKind.MethodDeclaration,
60
+ ts.SyntaxKind.PropertyDeclaration,
61
+ ts.SyntaxKind.PropertySignature,
62
+ ts.SyntaxKind.CallSignature,
63
+ ],
64
+ [models_1.ReflectionKind.IndexSignature]: [ts.SyntaxKind.IndexSignature],
65
+ [models_1.ReflectionKind.ConstructorSignature]: [ts.SyntaxKind.ConstructSignature],
66
+ [models_1.ReflectionKind.Parameter]: [ts.SyntaxKind.Parameter],
67
+ [models_1.ReflectionKind.TypeLiteral]: [ts.SyntaxKind.TypeLiteral],
68
+ [models_1.ReflectionKind.TypeParameter]: [ts.SyntaxKind.TypeParameter],
69
+ [models_1.ReflectionKind.Accessor]: [
70
+ ts.SyntaxKind.GetAccessor,
71
+ ts.SyntaxKind.SetAccessor,
72
+ ],
73
+ [models_1.ReflectionKind.GetSignature]: [ts.SyntaxKind.GetAccessor],
74
+ [models_1.ReflectionKind.SetSignature]: [ts.SyntaxKind.SetAccessor],
75
+ [models_1.ReflectionKind.ObjectLiteral]: [ts.SyntaxKind.ObjectLiteralExpression],
76
+ [models_1.ReflectionKind.TypeAlias]: [ts.SyntaxKind.TypeAliasDeclaration],
77
+ [models_1.ReflectionKind.Reference]: [
78
+ ts.SyntaxKind.NamespaceExport,
79
+ ts.SyntaxKind.ExportSpecifier,
80
+ ],
81
+ };
82
+ function discoverComment(symbol, kind, logger) {
83
+ // For a module comment, we want the first one defined in the file,
84
+ // not the last one, since that will apply to the import or declaration.
85
+ const reverse = symbol.declarations?.some(ts.isSourceFile);
86
+ const discovered = [];
87
+ for (const decl of symbol.declarations || []) {
88
+ const text = decl.getSourceFile().text;
89
+ if (wantedKinds[kind].includes(decl.kind)) {
90
+ const node = declarationToCommentNode(decl);
91
+ if (!node) {
92
+ continue;
93
+ }
94
+ // Special behavior here! We temporarily put the implementation comment
95
+ // on the reflection which contains all the signatures. This lets us pull
96
+ // the comment on the implementation if some signature does not have a comment.
97
+ // However, we don't want to skip the node if it is a reference to something.
98
+ // See the gh1770 test for an example.
99
+ if (kind & models_1.ReflectionKind.ContainsCallSignatures &&
100
+ !node.body &&
101
+ node.kind !== ts.SyntaxKind.BindingElement) {
102
+ continue;
103
+ }
104
+ const comments = ts.getLeadingCommentRanges(text, node.pos);
105
+ if (reverse) {
106
+ comments?.reverse();
107
+ }
108
+ const lastDocComment = comments?.find((c) => text[c.pos] === "/" &&
109
+ text[c.pos + 1] === "*" &&
110
+ text[c.pos + 2] === "*");
111
+ if (lastDocComment) {
112
+ discovered.push([decl.getSourceFile(), lastDocComment]);
113
+ }
114
+ }
115
+ }
116
+ switch (discovered.length) {
117
+ case 0:
118
+ return undefined;
119
+ case 1:
120
+ return discovered[0];
121
+ default: {
122
+ logger.warn(`${symbol.name} has multiple declarations with a comment. An arbitrary comment will be used.`);
123
+ const locations = discovered.map(([sf, { pos }]) => {
124
+ const path = (0, paths_1.nicePath)(sf.fileName);
125
+ const line = ts.getLineAndCharacterOfPosition(sf, pos).line + 1;
126
+ return `${path}:${line}`;
127
+ });
128
+ logger.info(`The comments for ${symbol.name} are declared at:\n\t${locations.join("\n\t")}`);
129
+ return discovered[0];
130
+ }
131
+ }
132
+ }
133
+ exports.discoverComment = discoverComment;
134
+ function discoverSignatureComment(declaration) {
135
+ const node = declarationToCommentNode(declaration);
136
+ if (!node) {
137
+ return;
138
+ }
139
+ const text = node.getSourceFile().text;
140
+ const comments = ts.getLeadingCommentRanges(text, node.pos);
141
+ const comment = comments?.find((c) => text[c.pos] === "/" &&
142
+ text[c.pos + 1] === "*" &&
143
+ text[c.pos + 2] === "*");
144
+ if (comment) {
145
+ return [node.getSourceFile(), comment];
146
+ }
147
+ }
148
+ exports.discoverSignatureComment = discoverSignatureComment;
149
+ /**
150
+ * Check whether the given module declaration is the topmost.
151
+ *
152
+ * This function returns TRUE if there is no trailing module defined, in
153
+ * the following example this would be the case only for module <code>C</code>.
154
+ *
155
+ * ```
156
+ * module A.B.C { }
157
+ * ```
158
+ *
159
+ * @param node The module definition that should be tested.
160
+ * @return TRUE if the given node is the topmost module declaration, FALSE otherwise.
161
+ */
162
+ function isTopmostModuleDeclaration(node) {
163
+ return node.getChildren().some(ts.isModuleBlock);
164
+ }
165
+ /**
166
+ * Return the root module declaration of the given module declaration.
167
+ *
168
+ * In the following example this function would always return module
169
+ * <code>A</code> no matter which of the modules was passed in.
170
+ *
171
+ * ```
172
+ * module A.B.C { }
173
+ * ```
174
+ */
175
+ function getRootModuleDeclaration(node) {
176
+ while (node.parent &&
177
+ node.parent.kind === ts.SyntaxKind.ModuleDeclaration) {
178
+ const parent = node.parent;
179
+ if (node.name.pos === parent.name.end + 1) {
180
+ node = parent;
181
+ }
182
+ else {
183
+ break;
184
+ }
185
+ }
186
+ return node;
187
+ }
188
+ function declarationToCommentNode(node) {
189
+ if (node.parent?.kind === ts.SyntaxKind.VariableDeclarationList) {
190
+ return node.parent.parent;
191
+ }
192
+ if (node.kind === ts.SyntaxKind.ModuleDeclaration) {
193
+ if (!isTopmostModuleDeclaration(node)) {
194
+ return;
195
+ }
196
+ else {
197
+ return getRootModuleDeclaration(node);
198
+ }
199
+ }
200
+ if (node.kind === ts.SyntaxKind.ExportSpecifier) {
201
+ return node.parent.parent;
202
+ }
203
+ if ([
204
+ ts.SyntaxKind.NamespaceExport,
205
+ ts.SyntaxKind.FunctionExpression,
206
+ ts.SyntaxKind.FunctionType,
207
+ ts.SyntaxKind.FunctionType,
208
+ ts.SyntaxKind.ArrowFunction,
209
+ ].includes(node.kind)) {
210
+ return node.parent;
211
+ }
212
+ return node;
213
+ }
@@ -0,0 +1,11 @@
1
+ import * as ts from "typescript";
2
+ import { Comment, ReflectionKind } from "../../models";
3
+ import { Logger } from "../../utils";
4
+ export interface CommentParserConfig {
5
+ blockTags: Set<string>;
6
+ inlineTags: Set<string>;
7
+ modifierTags: Set<string>;
8
+ }
9
+ export declare function getComment(symbol: ts.Symbol, kind: ReflectionKind, config: CommentParserConfig, logger: Logger): Comment | undefined;
10
+ export declare function getSignatureComment(declaration: ts.SignatureDeclaration | ts.JSDocSignature, config: CommentParserConfig, logger: Logger): Comment | undefined;
11
+ export declare function getJsDocComment(declaration: ts.JSDocPropertyLikeTag | ts.JSDocCallbackTag | ts.JSDocTypedefTag | ts.JSDocTemplateTag | ts.JSDocEnumTag, config: CommentParserConfig, logger: Logger): Comment | undefined;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getJsDocComment = exports.getSignatureComment = exports.getComment = void 0;
4
+ const ts = require("typescript");
5
+ const models_1 = require("../../models");
6
+ const utils_1 = require("../../utils");
7
+ const paths_1 = require("../../utils/paths");
8
+ const blockLexer_1 = require("./blockLexer");
9
+ const discovery_1 = require("./discovery");
10
+ const parser_1 = require("./parser");
11
+ const commentCache = new WeakMap();
12
+ function getCommentWithCache(discovered, config, logger) {
13
+ if (!discovered)
14
+ return;
15
+ const [file, range] = discovered;
16
+ const cache = commentCache.get(file) || new Map();
17
+ if (cache?.has(range.pos)) {
18
+ return cache.get(range.pos).clone();
19
+ }
20
+ const line = ts.getLineAndCharacterOfPosition(file, range.pos).line + 1;
21
+ const warning = (warning) => logger.warn(`${warning} in comment at ${(0, paths_1.nicePath)(file.fileName)}:${line}.`);
22
+ let comment;
23
+ switch (range.kind) {
24
+ case ts.SyntaxKind.MultiLineCommentTrivia:
25
+ comment = (0, parser_1.parseComment)((0, blockLexer_1.lexBlockComment)(file.text, range.pos, range.end), config, warning);
26
+ break;
27
+ case ts.SyntaxKind.SingleLineCommentTrivia:
28
+ throw "GERRIT FIX ME"; // GERRIT
29
+ default:
30
+ (0, utils_1.assertNever)(range.kind);
31
+ }
32
+ cache.set(range.pos, comment);
33
+ commentCache.set(file, cache);
34
+ return comment.clone();
35
+ }
36
+ function getComment(symbol, kind, config, logger) {
37
+ const comment = getCommentWithCache((0, discovery_1.discoverComment)(symbol, kind, logger), config, logger);
38
+ if (symbol.declarations?.some(ts.isSourceFile) && comment) {
39
+ // Module comment, make sure it is tagged with @packageDocumentation or @module.
40
+ // If it isn't then the comment applies to the first statement in the file, so throw it away.
41
+ if (!comment.hasModifier("@packageDocumentation") &&
42
+ !comment.getTag("@module")) {
43
+ return;
44
+ }
45
+ }
46
+ return comment;
47
+ }
48
+ exports.getComment = getComment;
49
+ function getSignatureComment(declaration, config, logger) {
50
+ return getCommentWithCache((0, discovery_1.discoverSignatureComment)(declaration), config, logger);
51
+ }
52
+ exports.getSignatureComment = getSignatureComment;
53
+ function getJsDocComment(declaration, config, logger) {
54
+ const file = declaration.getSourceFile();
55
+ // First, get the whole comment. We know we'll need all of it.
56
+ let parent = declaration.parent;
57
+ while (!ts.isJSDoc(parent)) {
58
+ parent = parent.parent;
59
+ }
60
+ // Then parse it.
61
+ const comment = getCommentWithCache([
62
+ file,
63
+ {
64
+ kind: ts.SyntaxKind.MultiLineCommentTrivia,
65
+ pos: parent.pos,
66
+ end: parent.end,
67
+ },
68
+ ], config, logger);
69
+ // And pull out the tag we actually care about.
70
+ if (ts.isJSDocEnumTag(declaration)) {
71
+ return new models_1.Comment(comment.getTag("@enum")?.content);
72
+ }
73
+ if (ts.isJSDocTemplateTag(declaration) &&
74
+ declaration.comment &&
75
+ declaration.typeParameters.length > 1) {
76
+ // We could just put the same comment on everything, but due to how comment parsing works,
77
+ // we'd have to search for any @template with a name starting with the first type parameter's name
78
+ // which feels horribly hacky.
79
+ logger.warn(`TypeDoc does not support multiple type parameters defined in a single @template tag with a comment.`, declaration);
80
+ return;
81
+ }
82
+ let name;
83
+ if (ts.isJSDocTemplateTag(declaration)) {
84
+ // This isn't really ideal.
85
+ name = declaration.typeParameters[0].name.text;
86
+ }
87
+ else {
88
+ name = declaration.name?.getText();
89
+ }
90
+ if (!name) {
91
+ return;
92
+ }
93
+ const tag = comment.getIdentifiedTag(name, `@${declaration.tagName.text}`);
94
+ if (!tag) {
95
+ logger.error(`Failed to find JSDoc tag for ${name} after parsing comment, please file a bug report.`, declaration);
96
+ }
97
+ else {
98
+ return new models_1.Comment(tag.content.slice());
99
+ }
100
+ }
101
+ exports.getJsDocComment = getJsDocComment;
@@ -0,0 +1,4 @@
1
+ import type { CommentParserConfig } from ".";
2
+ import { Comment } from "../../models";
3
+ import { Token } from "./blockLexer";
4
+ export declare function parseComment(tokens: Generator<Token, undefined, undefined>, config: CommentParserConfig, warning: (message: string) => void): Comment;
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseComment = void 0;
4
+ const assert_1 = require("assert");
5
+ const models_1 = require("../../models");
6
+ const utils_1 = require("../../utils");
7
+ const blockLexer_1 = require("./blockLexer");
8
+ function makeLookaheadGenerator(gen) {
9
+ let nextItem = gen.next();
10
+ return {
11
+ done() {
12
+ return !!nextItem.done;
13
+ },
14
+ peek() {
15
+ (0, assert_1.ok)(!nextItem.done);
16
+ return nextItem.value;
17
+ },
18
+ take() {
19
+ const thisItem = nextItem;
20
+ (0, assert_1.ok)(!thisItem.done);
21
+ nextItem = gen.next();
22
+ return thisItem.value;
23
+ },
24
+ };
25
+ }
26
+ function parseComment(tokens, config, warning) {
27
+ const lexer = makeLookaheadGenerator(tokens);
28
+ const comment = new models_1.Comment();
29
+ comment.summary = blockContent(comment, lexer, config, warning);
30
+ while (!lexer.done()) {
31
+ comment.blockTags.push(blockTag(comment, lexer, config, warning));
32
+ }
33
+ postProcessComment(comment, warning);
34
+ return comment;
35
+ }
36
+ exports.parseComment = parseComment;
37
+ const HAS_USER_IDENTIFIER = [
38
+ "@callback",
39
+ "@param",
40
+ "@prop",
41
+ "@property",
42
+ "@template",
43
+ "@typedef",
44
+ "@typeParam",
45
+ "@inheritDoc",
46
+ ];
47
+ function makeCodeBlock(text) {
48
+ return "```ts\n" + text + "\n```";
49
+ }
50
+ /**
51
+ * Loop over comment, produce lint warnings, and set tag names for tags
52
+ * which have them.
53
+ */
54
+ function postProcessComment(comment, warning) {
55
+ for (const tag of comment.blockTags) {
56
+ if (HAS_USER_IDENTIFIER.includes(tag.tag) && tag.content.length) {
57
+ const first = tag.content[0];
58
+ if (first.kind === "text") {
59
+ let end = first.text.search(/\s/);
60
+ if (end === -1)
61
+ end = first.text.length;
62
+ tag.name = first.text.substring(0, end);
63
+ if (tag.name.startsWith("[") && tag.name.endsWith("]")) {
64
+ tag.name = tag.name.slice(1, tag.name.indexOf("="));
65
+ }
66
+ first.text = first.text.substring(end);
67
+ const endOfTrivia = first.text.search(/[^\-\s]/);
68
+ if (endOfTrivia !== -1) {
69
+ first.text = first.text.substring(endOfTrivia);
70
+ }
71
+ else {
72
+ // Remove this token, no real text in it.
73
+ tag.content.shift();
74
+ }
75
+ }
76
+ }
77
+ if (tag.content.some((part) => part.kind === "inline-tag" && part.tag === "@inheritDoc")) {
78
+ warning("An inline @inheritDoc tag should not appear within a block tag as it will not be processed");
79
+ }
80
+ if (tag.tag === "@example" &&
81
+ !tag.content.some((part) => part.kind === "code")) {
82
+ const caption = tag.content[0].text.match(/^\s*<caption>(.*?)<\/caption>\s*(\n|$)/);
83
+ if (caption) {
84
+ const code = models_1.Comment.combineDisplayParts([
85
+ {
86
+ kind: "text",
87
+ text: tag.content[0].text.slice(caption[0].length),
88
+ },
89
+ ...tag.content.slice(1),
90
+ ]);
91
+ tag.content = [
92
+ {
93
+ kind: "text",
94
+ text: caption[1] + "\n",
95
+ },
96
+ {
97
+ kind: "code",
98
+ text: makeCodeBlock(code),
99
+ },
100
+ ];
101
+ }
102
+ else {
103
+ tag.content = [
104
+ {
105
+ kind: "code",
106
+ text: makeCodeBlock(models_1.Comment.combineDisplayParts(tag.content)),
107
+ },
108
+ ];
109
+ }
110
+ }
111
+ }
112
+ const remarks = comment.blockTags.filter((tag) => tag.tag === "@remarks");
113
+ if (remarks.length > 1) {
114
+ warning("At most one @remarks tag is expected in a comment, ignoring all but the first");
115
+ (0, utils_1.removeIf)(comment.blockTags, (tag) => remarks.indexOf(tag) > 0);
116
+ }
117
+ const inheritDoc = comment.blockTags.filter((tag) => tag.tag === "@inheritDoc");
118
+ const inlineInheritDoc = comment.summary.filter((part) => part.kind === "inline-tag" && part.tag === "@inheritDoc");
119
+ if (inlineInheritDoc.length + inheritDoc.length > 1) {
120
+ warning("At most one @inheritDoc tag is expected in a comment, ignoring all but the first");
121
+ const allInheritTags = [...inlineInheritDoc, ...inheritDoc];
122
+ (0, utils_1.removeIf)(comment.summary, (part) => allInheritTags.indexOf(part) > 0);
123
+ (0, utils_1.removeIf)(comment.blockTags, (tag) => allInheritTags.indexOf(tag) > 0);
124
+ }
125
+ if ((inlineInheritDoc.length || inheritDoc.length) &&
126
+ comment.summary.some((part) => part.kind !== "inline-tag" && /\S/.test(part.text))) {
127
+ warning("Content in the summary section will be overwritten by the @inheritDoc tag");
128
+ }
129
+ if ((inlineInheritDoc.length || inheritDoc.length) && remarks.length) {
130
+ warning("Content in the @remarks block will be overwritten by the @inheritDoc tag");
131
+ }
132
+ }
133
+ const aliasedTags = new Map([["@return", "@returns"]]);
134
+ function blockTag(comment, lexer, config, warning) {
135
+ const blockTag = lexer.take();
136
+ (0, assert_1.ok)(blockTag.kind === blockLexer_1.TokenSyntaxKind.Tag); // blockContent is broken if this fails.
137
+ const tagName = aliasedTags.get(blockTag.text) || blockTag.text;
138
+ return new models_1.CommentTag(tagName, blockContent(comment, lexer, config, warning));
139
+ }
140
+ function blockContent(comment, lexer, config, warning) {
141
+ const content = [];
142
+ let atNewLine = true;
143
+ loop: while (!lexer.done()) {
144
+ const next = lexer.peek();
145
+ let consume = true;
146
+ switch (next.kind) {
147
+ case blockLexer_1.TokenSyntaxKind.NewLine:
148
+ case blockLexer_1.TokenSyntaxKind.Text:
149
+ content.push({ kind: "text", text: next.text });
150
+ break;
151
+ case blockLexer_1.TokenSyntaxKind.Code:
152
+ content.push({ kind: "code", text: next.text });
153
+ break;
154
+ case blockLexer_1.TokenSyntaxKind.Tag:
155
+ if (config.modifierTags.has(next.text)) {
156
+ comment.modifierTags.add(next.text);
157
+ break;
158
+ }
159
+ else if (!atNewLine && !config.blockTags.has(next.text)) {
160
+ // Treat unknown tag as a modifier, but warn about it.
161
+ comment.modifierTags.add(next.text);
162
+ warning(`Treating unrecognized tag "${next.text}" as a modifier tag`);
163
+ break;
164
+ }
165
+ else {
166
+ // Block tag or unknown tag, handled by our caller.
167
+ break loop;
168
+ }
169
+ case blockLexer_1.TokenSyntaxKind.TypeAnnotation:
170
+ // We always ignore these. In TS files they are redundant, in JS files
171
+ // they are required.
172
+ break;
173
+ case blockLexer_1.TokenSyntaxKind.CloseBrace:
174
+ // Unmatched closing brace, generate a warning, and treat it as text.
175
+ warning(`Unmatched closing brace in comment`);
176
+ content.push({ kind: "text", text: next.text });
177
+ break;
178
+ case blockLexer_1.TokenSyntaxKind.OpenBrace:
179
+ inlineTag(lexer, content, config, warning);
180
+ consume = false;
181
+ break;
182
+ default:
183
+ (0, utils_1.assertNever)(next.kind);
184
+ }
185
+ if (consume && lexer.take().kind === blockLexer_1.TokenSyntaxKind.NewLine) {
186
+ atNewLine = true;
187
+ }
188
+ }
189
+ // Collapse adjacent text parts
190
+ for (let i = 0; i < content.length - 1 /* inside loop */;) {
191
+ if (content[i].kind === "text" && content[i + 1].kind === "text") {
192
+ content[i].text += content[i + 1].text;
193
+ content.splice(i + 1, 1);
194
+ }
195
+ else {
196
+ i++;
197
+ }
198
+ }
199
+ // Now get rid of extra whitespace, and any empty parts
200
+ for (let i = 0; i < content.length /* inside loop */;) {
201
+ if (i === 0 || content[i].kind === "inline-tag") {
202
+ content[i].text = content[i].text.trimStart();
203
+ }
204
+ if (i === content.length - 1 || content[i].kind === "inline-tag") {
205
+ content[i].text = content[i].text.trimEnd();
206
+ }
207
+ if (!content[i].text && content[i].kind === "text") {
208
+ content.splice(i, 1);
209
+ }
210
+ else {
211
+ i++;
212
+ }
213
+ }
214
+ return content;
215
+ }
216
+ function inlineTag(lexer, block, config, warning) {
217
+ const openBrace = lexer.take();
218
+ // Now skip whitespace to grab the tag name.
219
+ // If the first non-whitespace text after the brace isn't a tag,
220
+ // then produce a warning and treat what we've consumed as plain text.
221
+ if (lexer.done() ||
222
+ ![blockLexer_1.TokenSyntaxKind.Text, blockLexer_1.TokenSyntaxKind.Tag].includes(lexer.peek().kind)) {
223
+ warning("Encountered an unescaped open brace without an inline tag");
224
+ block.push({ kind: "text", text: openBrace.text });
225
+ return;
226
+ }
227
+ let tagName = lexer.take();
228
+ if (lexer.done() ||
229
+ (tagName.kind === blockLexer_1.TokenSyntaxKind.Text &&
230
+ (!/^\s+$/.test(tagName.text) ||
231
+ lexer.peek().kind != blockLexer_1.TokenSyntaxKind.Tag))) {
232
+ warning("Encountered an unescaped open brace without an inline tag");
233
+ block.push({ kind: "text", text: openBrace.text + tagName.text });
234
+ return;
235
+ }
236
+ if (tagName.kind !== blockLexer_1.TokenSyntaxKind.Tag) {
237
+ tagName = lexer.take();
238
+ }
239
+ if (!config.inlineTags.has(tagName.text)) {
240
+ warning(`Encountered an unknown inline tag "${tagName.text}"`);
241
+ }
242
+ const content = [];
243
+ // At this point, we know we have an inline tag. Treat everything following as plain text,
244
+ // until we get to the closing brace.
245
+ while (!lexer.done() && lexer.peek().kind !== blockLexer_1.TokenSyntaxKind.CloseBrace) {
246
+ const token = lexer.take();
247
+ if (token.kind === blockLexer_1.TokenSyntaxKind.OpenBrace) {
248
+ warning("Encountered an open brace within an inline tag, this is likely a mistake");
249
+ }
250
+ content.push(token.kind === blockLexer_1.TokenSyntaxKind.NewLine ? " " : token.text);
251
+ }
252
+ if (lexer.done()) {
253
+ warning("Inline tag is not closed");
254
+ }
255
+ else {
256
+ lexer.take(); // Close brace
257
+ }
258
+ block.push({
259
+ kind: "inline-tag",
260
+ tag: tagName.text,
261
+ text: content.join(""),
262
+ });
263
+ }
@@ -1,6 +1,7 @@
1
1
  import * as ts from "typescript";
2
2
  import { Reflection, ProjectReflection, DeclarationReflection, ReflectionKind } from "../models/index";
3
3
  import type { Converter } from "./converter";
4
+ import { CommentParserConfig } from "./comments";
4
5
  /**
5
6
  * The context describes the current state the converter is in.
6
7
  */
@@ -35,18 +36,6 @@ export declare class Context {
35
36
  isConvertingTypeNode(): boolean;
36
37
  /** @internal */
37
38
  setConvertingTypeNode(): void;
38
- /**
39
- * This is a horrible hack to avoid breaking backwards compatibility for plugins
40
- * that use EVENT_CREATE_DECLARATION. The comment plugin needs to be able to check
41
- * this to properly get the comment for module re-exports:
42
- * ```ts
43
- * /** We should use this comment *&#47;
44
- * export * as Mod from "./mod"
45
- * ```
46
- * Will be removed in 0.23.
47
- * @internal
48
- */
49
- exportSymbol?: ts.Symbol;
50
39
  /** @internal */
51
40
  shouldBeStatic: boolean;
52
41
  private convertingTypeNode;
@@ -73,8 +62,10 @@ export declare class Context {
73
62
  getSymbolAtLocation(node: ts.Node): ts.Symbol | undefined;
74
63
  expectSymbolAtLocation(node: ts.Node): ts.Symbol;
75
64
  resolveAliasedSymbol(symbol: ts.Symbol): ts.Symbol;
65
+ config: CommentParserConfig;
76
66
  createDeclarationReflection(kind: ReflectionKind, symbol: ts.Symbol | undefined, exportSymbol: ts.Symbol | undefined, nameOverride?: string): DeclarationReflection;
77
- finalizeDeclarationReflection(reflection: DeclarationReflection, symbol: ts.Symbol | undefined, exportSymbol?: ts.Symbol, commentNode?: ts.Node): void;
67
+ postReflectionCreation(reflection: Reflection, symbol: ts.Symbol | undefined, exportSymbol: ts.Symbol | undefined): void;
68
+ finalizeDeclarationReflection(reflection: DeclarationReflection): void;
78
69
  addChild(reflection: DeclarationReflection): void;
79
70
  shouldIgnore(symbol: ts.Symbol): boolean;
80
71
  /**