@cparra/apexdocs 2.25.0-alpha.3 → 2.25.0-alpha.5

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 (455) hide show
  1. package/dist/cli/generate.js +2746 -40
  2. package/dist/defaults-DUwru49Q.js +12 -0
  3. package/dist/defaults-SH0Rsi5E.js +11 -0
  4. package/dist/index.d.ts +62 -2
  5. package/dist/index.js +36 -1
  6. package/examples/plain-markdown/docs/Miscellaneous/ns.BaseClass.md +1 -1
  7. package/examples/plain-markdown/docs/Miscellaneous/ns.MultiInheritanceClass.md +1 -1
  8. package/examples/plain-markdown/docs/Miscellaneous/ns.ParentInterface.md +1 -1
  9. package/examples/plain-markdown/docs/Miscellaneous/ns.ReferencedEnum.md +1 -1
  10. package/examples/plain-markdown/docs/Miscellaneous/ns.SampleException.md +1 -1
  11. package/examples/plain-markdown/docs/Miscellaneous/ns.SampleInterface.md +1 -1
  12. package/examples/plain-markdown/docs/Miscellaneous/ns.Url.md +320 -0
  13. package/examples/plain-markdown/docs/Sample-Enums/ns.SampleEnum.md +1 -1
  14. package/examples/plain-markdown/docs/SampleGroup/ns.SampleClass.md +1 -1
  15. package/examples/plain-markdown/docs/index.md +83 -1
  16. package/examples/plain-markdown/force-app/classes/Url.cls +194 -0
  17. package/examples/plain-markdown/package.json +2 -2
  18. package/examples/vitepress/.forceignore +12 -0
  19. package/examples/vitepress/apexdocs.config.ts +108 -0
  20. package/examples/vitepress/config/project-scratch-def.json +13 -0
  21. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js +259 -0
  22. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js.map +7 -0
  23. package/examples/vitepress/docs/.vitepress/cache/deps/_metadata.json +40 -0
  24. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js +11474 -0
  25. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js.map +7 -0
  26. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js +9172 -0
  27. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js.map +7 -0
  28. package/examples/vitepress/docs/.vitepress/cache/deps/package.json +3 -0
  29. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4339 -0
  30. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  31. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +567 -0
  32. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  33. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js +323 -0
  34. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js.map +7 -0
  35. package/examples/vitepress/docs/.vitepress/config.mts +21 -0
  36. package/examples/vitepress/docs/.vitepress/sidebar.json +119 -0
  37. package/examples/vitepress/docs/Miscellaneous/apexdocs.BaseClass.md +20 -0
  38. package/examples/vitepress/docs/Miscellaneous/apexdocs.MultiInheritanceClass.md +78 -0
  39. package/examples/vitepress/docs/Miscellaneous/apexdocs.ParentInterface.md +19 -0
  40. package/examples/vitepress/docs/Miscellaneous/apexdocs.ReferencedEnum.md +15 -0
  41. package/examples/vitepress/docs/Miscellaneous/apexdocs.SampleException.md +28 -0
  42. package/examples/vitepress/docs/Miscellaneous/apexdocs.SampleInterface.md +122 -0
  43. package/examples/vitepress/docs/Miscellaneous/apexdocs.Url.md +318 -0
  44. package/examples/vitepress/docs/Sample-Enums/apexdocs.SampleEnum.md +41 -0
  45. package/examples/vitepress/docs/SampleGroup/apexdocs.SampleClass.md +178 -0
  46. package/examples/vitepress/docs/api-examples.md +49 -0
  47. package/examples/vitepress/docs/index-frontmatter.md +16 -0
  48. package/examples/vitepress/docs/index.md +127 -0
  49. package/examples/vitepress/docs/markdown-examples.md +85 -0
  50. package/examples/vitepress/force-app/main/default/classes/BaseClass.cls +3 -0
  51. package/examples/vitepress/force-app/main/default/classes/MultiInheritanceClass.cls +1 -0
  52. package/examples/vitepress/force-app/main/default/classes/ParentInterface.cls +3 -0
  53. package/examples/vitepress/force-app/main/default/classes/ReferencedEnum.cls +5 -0
  54. package/examples/vitepress/force-app/main/default/classes/SampleClass.cls +72 -0
  55. package/examples/vitepress/force-app/main/default/classes/SampleEnum.cls +30 -0
  56. package/examples/vitepress/force-app/main/default/classes/SampleException.cls +17 -0
  57. package/examples/vitepress/force-app/main/default/classes/SampleInterface.cls +46 -0
  58. package/examples/vitepress/force-app/main/default/classes/Url.cls +195 -0
  59. package/examples/vitepress/package-lock.json +2574 -0
  60. package/examples/vitepress/package.json +18 -0
  61. package/examples/vitepress/sfdx-project.json +12 -0
  62. package/jest.config.js +1 -0
  63. package/package.json +10 -6
  64. package/src/application/Apexdocs.ts +16 -106
  65. package/src/application/__tests__/apex-file-reader.spec.ts +104 -0
  66. package/src/application/apex-file-reader.ts +42 -0
  67. package/src/application/file-writer.ts +25 -0
  68. package/src/application/generators/markdown.ts +53 -0
  69. package/src/application/generators/openapi.ts +56 -0
  70. package/src/cli/args.ts +17 -110
  71. package/src/cli/commands/markdown.ts +58 -0
  72. package/src/cli/generate.ts +7 -7
  73. package/src/{model/__tests__ → core/__test__}/manifest.spec.ts +1 -1
  74. package/src/core/manifest.ts +57 -51
  75. package/src/{__spec__/core → core/markdown/__test__}/expect-extensions.ts +5 -5
  76. package/src/core/markdown/__test__/generating-class-docs.spec.ts +727 -0
  77. package/src/{__spec__/core → core/markdown/__test__}/generating-enum-docs.spec.ts +82 -59
  78. package/src/{__spec__/core → core/markdown/__test__}/generating-interface-docs.spec.ts +94 -75
  79. package/src/core/markdown/__test__/generating-reference-guide.spec.ts +184 -0
  80. package/src/core/{__test__ → markdown/__test__}/inheritance-chain.test.ts +2 -2
  81. package/src/core/markdown/__test__/test-helpers.ts +22 -0
  82. package/src/core/markdown/adapters/__tests__/documentables.spec.ts +109 -0
  83. package/src/core/{adapters → markdown/adapters}/__tests__/interface-adapter.spec.ts +38 -8
  84. package/src/core/{adapters → markdown/adapters}/__tests__/references.spec.ts +12 -1
  85. package/src/core/{adapters → markdown/adapters}/apex-types.ts +8 -5
  86. package/src/core/{adapters → markdown/adapters}/documentables.ts +2 -62
  87. package/src/core/{adapters → markdown/adapters}/fields-and-properties.ts +7 -2
  88. package/src/core/{adapters/references.ts → markdown/adapters/inline.ts} +43 -10
  89. package/src/core/{adapters → markdown/adapters}/methods-and-constructors.ts +7 -2
  90. package/src/core/markdown/adapters/renderable-bundle.ts +144 -0
  91. package/src/core/markdown/adapters/renderable-to-page-data.ts +92 -0
  92. package/src/core/{adapters → markdown/adapters}/type-utils.ts +5 -1
  93. package/src/core/{adapters → markdown/adapters}/types.d.ts +24 -3
  94. package/src/core/markdown/generate-docs.ts +158 -0
  95. package/src/core/markdown/reflection/error-handling.ts +37 -0
  96. package/src/core/markdown/reflection/filter-scope.ts +13 -0
  97. package/src/core/markdown/reflection/inheritance-chain-expanion.ts +22 -0
  98. package/src/core/markdown/reflection/inherited-member-expansion.ts +105 -0
  99. package/src/core/markdown/reflection/reflect-source.ts +41 -0
  100. package/src/core/markdown/reflection/sort-members.ts +59 -0
  101. package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/class-template.ts +2 -0
  102. package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/constructors-partial-template.ts +1 -1
  103. package/src/core/markdown/templates/hookable.ts +7 -0
  104. package/src/core/{template.ts → markdown/templates/template.ts} +15 -12
  105. package/src/core/markdown/utils.ts +3 -0
  106. package/src/{transpiler → core}/openapi/__tests__/open-api-docs-processor.spec.ts +1 -1
  107. package/src/{model → core/openapi}/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +3 -3
  108. package/src/core/openapi/file-container.ts +13 -0
  109. package/src/{service → core/openapi}/manifest-factory.ts +3 -3
  110. package/src/{transpiler → core}/openapi/open-api-docs-processor.ts +9 -10
  111. package/src/core/openapi/openapi-type-file.ts +14 -0
  112. package/src/{service → core/openapi}/parser.ts +8 -8
  113. package/src/{transpiler → core}/openapi/parsers/Builder.ts +2 -2
  114. package/src/{transpiler → core}/openapi/parsers/MethodParser.ts +5 -5
  115. package/src/{transpiler → core}/openapi/parsers/ParameterObjectBuilder.ts +2 -2
  116. package/src/{transpiler → core}/openapi/parsers/ReferenceBuilder.ts +3 -3
  117. package/src/{transpiler → core}/openapi/parsers/RequestBodyBuilder.ts +2 -2
  118. package/src/{transpiler → core}/openapi/parsers/ResponsesBuilder.ts +2 -2
  119. package/src/{transpiler → core}/openapi/parsers/__tests__/MethodParser.spec.ts +1 -1
  120. package/src/{transpiler → core}/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +2 -2
  121. package/src/{transpiler → core}/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +2 -2
  122. package/src/{transpiler → core}/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +2 -2
  123. package/src/{transpiler → core}/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +1 -1
  124. package/src/{transpiler → core/openapi}/transpiler.ts +2 -6
  125. package/src/{model → core/openapi}/types-repository.ts +0 -9
  126. package/src/core/parse-apex-metadata.ts +14 -0
  127. package/src/core/settings.ts +56 -0
  128. package/src/core/shared/types.d.ts +92 -0
  129. package/src/core/shared/utils.ts +5 -0
  130. package/src/defaults.ts +8 -0
  131. package/src/index.ts +34 -2
  132. package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -5
  133. package/src/test-helpers/SettingsBuilder.ts +1 -5
  134. package/src/util/fp.ts +3 -0
  135. package/src/util/logger.ts +2 -2
  136. package/src/util/string-utils.ts +0 -4
  137. package/tsconfig.json +5 -1
  138. package/apexdocs.config.ts +0 -13
  139. package/dist/__spec__/core/expect-extensions.d.ts +0 -3
  140. package/dist/__spec__/core/expect-extensions.js +0 -55
  141. package/dist/__spec__/core/expect-extensions.js.map +0 -1
  142. package/dist/__spec__/core/generating-class-docs.spec.d.ts +0 -1
  143. package/dist/__spec__/core/generating-class-docs.spec.js +0 -444
  144. package/dist/__spec__/core/generating-class-docs.spec.js.map +0 -1
  145. package/dist/__spec__/core/generating-enum-docs.spec.d.ts +0 -1
  146. package/dist/__spec__/core/generating-enum-docs.spec.js +0 -306
  147. package/dist/__spec__/core/generating-enum-docs.spec.js.map +0 -1
  148. package/dist/__spec__/core/generating-interface-docs.spec.d.ts +0 -1
  149. package/dist/__spec__/core/generating-interface-docs.spec.js +0 -364
  150. package/dist/__spec__/core/generating-interface-docs.spec.js.map +0 -1
  151. package/dist/__spec__/core/generating-reference-guide.spec.d.ts +0 -1
  152. package/dist/__spec__/core/generating-reference-guide.spec.js +0 -162
  153. package/dist/__spec__/core/generating-reference-guide.spec.js.map +0 -1
  154. package/dist/__spec__/core/test-helpers.d.ts +0 -2
  155. package/dist/__spec__/core/test-helpers.js +0 -12
  156. package/dist/__spec__/core/test-helpers.js.map +0 -1
  157. package/dist/application/Apexdocs.d.ts +0 -15
  158. package/dist/application/Apexdocs.js +0 -113
  159. package/dist/application/Apexdocs.js.map +0 -1
  160. package/dist/application/generators/generate-markdown-files.d.ts +0 -3
  161. package/dist/application/generators/generate-markdown-files.js +0 -64
  162. package/dist/application/generators/generate-markdown-files.js.map +0 -1
  163. package/dist/cli/args.d.ts +0 -39
  164. package/dist/cli/args.js +0 -154
  165. package/dist/cli/args.js.map +0 -1
  166. package/dist/cli/generate.d.ts +0 -2
  167. package/dist/cli/generate.js.map +0 -1
  168. package/dist/core/__test__/inheritance-chain.test.d.ts +0 -1
  169. package/dist/core/__test__/inheritance-chain.test.js +0 -42
  170. package/dist/core/__test__/inheritance-chain.test.js.map +0 -1
  171. package/dist/core/adapters/apex-types.d.ts +0 -6
  172. package/dist/core/adapters/apex-types.js +0 -109
  173. package/dist/core/adapters/apex-types.js.map +0 -1
  174. package/dist/core/adapters/documentables.d.ts +0 -7
  175. package/dist/core/adapters/documentables.js +0 -154
  176. package/dist/core/adapters/documentables.js.map +0 -1
  177. package/dist/core/adapters/fields-and-properties.d.ts +0 -3
  178. package/dist/core/adapters/fields-and-properties.js +0 -37
  179. package/dist/core/adapters/fields-and-properties.js.map +0 -1
  180. package/dist/core/adapters/methods-and-constructors.d.ts +0 -5
  181. package/dist/core/adapters/methods-and-constructors.js +0 -100
  182. package/dist/core/adapters/methods-and-constructors.js.map +0 -1
  183. package/dist/core/adapters/references.d.ts +0 -4
  184. package/dist/core/adapters/references.js +0 -78
  185. package/dist/core/adapters/references.js.map +0 -1
  186. package/dist/core/adapters/type-utils.d.ts +0 -3
  187. package/dist/core/adapters/type-utils.js +0 -12
  188. package/dist/core/adapters/type-utils.js.map +0 -1
  189. package/dist/core/apex-bundle.d.ts +0 -6
  190. package/dist/core/apex-bundle.js +0 -11
  191. package/dist/core/apex-bundle.js.map +0 -1
  192. package/dist/core/generate-docs.d.ts +0 -28
  193. package/dist/core/generate-docs.js +0 -296
  194. package/dist/core/generate-docs.js.map +0 -1
  195. package/dist/core/inheritance-chain.d.ts +0 -2
  196. package/dist/core/inheritance-chain.js +0 -36
  197. package/dist/core/inheritance-chain.js.map +0 -1
  198. package/dist/core/manifest.d.ts +0 -22
  199. package/dist/core/manifest.js +0 -53
  200. package/dist/core/manifest.js.map +0 -1
  201. package/dist/core/template.d.ts +0 -10
  202. package/dist/core/template.js +0 -97
  203. package/dist/core/template.js.map +0 -1
  204. package/dist/core/templates/reference-guide.d.ts +0 -1
  205. package/dist/core/templates/reference-guide.js +0 -18
  206. package/dist/core/templates/reference-guide.js.map +0 -1
  207. package/dist/index.js.map +0 -1
  208. package/dist/model/apex-type-wrappers/ClassMirrorWrapper.d.ts +0 -7
  209. package/dist/model/apex-type-wrappers/ClassMirrorWrapper.js +0 -14
  210. package/dist/model/apex-type-wrappers/ClassMirrorWrapper.js.map +0 -1
  211. package/dist/model/apex-type-wrappers/MethodMirrorWrapper.d.ts +0 -7
  212. package/dist/model/apex-type-wrappers/MethodMirrorWrapper.js +0 -12
  213. package/dist/model/apex-type-wrappers/MethodMirrorWrapper.js.map +0 -1
  214. package/dist/model/markdown-file.d.ts +0 -16
  215. package/dist/model/markdown-file.js +0 -111
  216. package/dist/model/markdown-file.js.map +0 -1
  217. package/dist/model/markdown-generation-util/doc-comment-annotation-util.d.ts +0 -8
  218. package/dist/model/markdown-generation-util/doc-comment-annotation-util.js +0 -47
  219. package/dist/model/markdown-generation-util/doc-comment-annotation-util.js.map +0 -1
  220. package/dist/model/markdown-generation-util/field-declaration-util.d.ts +0 -3
  221. package/dist/model/markdown-generation-util/field-declaration-util.js +0 -55
  222. package/dist/model/markdown-generation-util/field-declaration-util.js.map +0 -1
  223. package/dist/model/markdown-generation-util/index.d.ts +0 -3
  224. package/dist/model/markdown-generation-util/index.js +0 -20
  225. package/dist/model/markdown-generation-util/index.js.map +0 -1
  226. package/dist/model/markdown-generation-util/method-declaration-util.d.ts +0 -4
  227. package/dist/model/markdown-generation-util/method-declaration-util.js +0 -115
  228. package/dist/model/markdown-generation-util/method-declaration-util.js.map +0 -1
  229. package/dist/model/markdown-generation-util/type-declaration-util.d.ts +0 -3
  230. package/dist/model/markdown-generation-util/type-declaration-util.js +0 -82
  231. package/dist/model/markdown-generation-util/type-declaration-util.js.map +0 -1
  232. package/dist/model/markdown-home-file.d.ts +0 -11
  233. package/dist/model/markdown-home-file.js +0 -57
  234. package/dist/model/markdown-home-file.js.map +0 -1
  235. package/dist/model/markdown-type-file.d.ts +0 -26
  236. package/dist/model/markdown-type-file.js +0 -137
  237. package/dist/model/markdown-type-file.js.map +0 -1
  238. package/dist/model/openapi/apex-doc-types.d.ts +0 -19
  239. package/dist/model/openapi/apex-doc-types.js +0 -5
  240. package/dist/model/openapi/apex-doc-types.js.map +0 -1
  241. package/dist/model/openapi/open-api-types.d.ts +0 -93
  242. package/dist/model/openapi/open-api-types.js +0 -3
  243. package/dist/model/openapi/open-api-types.js.map +0 -1
  244. package/dist/model/openapi/open-api.d.ts +0 -16
  245. package/dist/model/openapi/open-api.js +0 -34
  246. package/dist/model/openapi/open-api.js.map +0 -1
  247. package/dist/model/openapi/openapi-type-file.d.ts +0 -7
  248. package/dist/model/openapi/openapi-type-file.js +0 -17
  249. package/dist/model/openapi/openapi-type-file.js.map +0 -1
  250. package/dist/model/outputFile.d.ts +0 -10
  251. package/dist/model/outputFile.js +0 -22
  252. package/dist/model/outputFile.js.map +0 -1
  253. package/dist/model/types-repository.d.ts +0 -16
  254. package/dist/model/types-repository.js +0 -54
  255. package/dist/model/types-repository.js.map +0 -1
  256. package/dist/service/apex-file-reader.d.ts +0 -14
  257. package/dist/service/apex-file-reader.js +0 -49
  258. package/dist/service/apex-file-reader.js.map +0 -1
  259. package/dist/service/file-system.d.ts +0 -14
  260. package/dist/service/file-system.js +0 -48
  261. package/dist/service/file-system.js.map +0 -1
  262. package/dist/service/file-writer.d.ts +0 -6
  263. package/dist/service/file-writer.js +0 -57
  264. package/dist/service/file-writer.js.map +0 -1
  265. package/dist/service/manifest-factory.d.ts +0 -10
  266. package/dist/service/manifest-factory.js +0 -17
  267. package/dist/service/manifest-factory.js.map +0 -1
  268. package/dist/service/metadata-processor.d.ts +0 -3
  269. package/dist/service/metadata-processor.js +0 -17
  270. package/dist/service/metadata-processor.js.map +0 -1
  271. package/dist/service/parser.d.ts +0 -21
  272. package/dist/service/parser.js +0 -138
  273. package/dist/service/parser.js.map +0 -1
  274. package/dist/service/state.d.ts +0 -9
  275. package/dist/service/state.js +0 -20
  276. package/dist/service/state.js.map +0 -1
  277. package/dist/service/walkers/class-walker.d.ts +0 -4
  278. package/dist/service/walkers/class-walker.js +0 -33
  279. package/dist/service/walkers/class-walker.js.map +0 -1
  280. package/dist/service/walkers/enum-walker.d.ts +0 -4
  281. package/dist/service/walkers/enum-walker.js +0 -11
  282. package/dist/service/walkers/enum-walker.js.map +0 -1
  283. package/dist/service/walkers/interface-walker.d.ts +0 -4
  284. package/dist/service/walkers/interface-walker.js +0 -15
  285. package/dist/service/walkers/interface-walker.js.map +0 -1
  286. package/dist/service/walkers/walker-factory.d.ts +0 -5
  287. package/dist/service/walkers/walker-factory.js +0 -21
  288. package/dist/service/walkers/walker-factory.js.map +0 -1
  289. package/dist/service/walkers/walker.d.ts +0 -19
  290. package/dist/service/walkers/walker.js +0 -17
  291. package/dist/service/walkers/walker.js.map +0 -1
  292. package/dist/settings.d.ts +0 -67
  293. package/dist/settings.js +0 -92
  294. package/dist/settings.js.map +0 -1
  295. package/dist/test-helpers/AnnotationBuilder.d.ts +0 -12
  296. package/dist/test-helpers/AnnotationBuilder.js +0 -31
  297. package/dist/test-helpers/AnnotationBuilder.js.map +0 -1
  298. package/dist/test-helpers/ClassMirrorBuilder.d.ts +0 -22
  299. package/dist/test-helpers/ClassMirrorBuilder.js +0 -64
  300. package/dist/test-helpers/ClassMirrorBuilder.js.map +0 -1
  301. package/dist/test-helpers/DocCommentAnnotationBuilder.d.ts +0 -8
  302. package/dist/test-helpers/DocCommentAnnotationBuilder.js +0 -26
  303. package/dist/test-helpers/DocCommentAnnotationBuilder.js.map +0 -1
  304. package/dist/test-helpers/DocCommentBuilder.d.ts +0 -12
  305. package/dist/test-helpers/DocCommentBuilder.js +0 -38
  306. package/dist/test-helpers/DocCommentBuilder.js.map +0 -1
  307. package/dist/test-helpers/FieldMirrorBuilder.d.ts +0 -18
  308. package/dist/test-helpers/FieldMirrorBuilder.js +0 -54
  309. package/dist/test-helpers/FieldMirrorBuilder.js.map +0 -1
  310. package/dist/test-helpers/InterfaceMirrorBuilder.d.ts +0 -16
  311. package/dist/test-helpers/InterfaceMirrorBuilder.js +0 -43
  312. package/dist/test-helpers/InterfaceMirrorBuilder.js.map +0 -1
  313. package/dist/test-helpers/MethodMirrorBuilder.d.ts +0 -29
  314. package/dist/test-helpers/MethodMirrorBuilder.js +0 -72
  315. package/dist/test-helpers/MethodMirrorBuilder.js.map +0 -1
  316. package/dist/test-helpers/SettingsBuilder.d.ts +0 -8
  317. package/dist/test-helpers/SettingsBuilder.js +0 -28
  318. package/dist/test-helpers/SettingsBuilder.js.map +0 -1
  319. package/dist/transpiler/factory.d.ts +0 -6
  320. package/dist/transpiler/factory.js +0 -33
  321. package/dist/transpiler/factory.js.map +0 -1
  322. package/dist/transpiler/file-container.d.ts +0 -6
  323. package/dist/transpiler/file-container.js +0 -16
  324. package/dist/transpiler/file-container.js.map +0 -1
  325. package/dist/transpiler/generator-choices.d.ts +0 -1
  326. package/dist/transpiler/generator-choices.js +0 -3
  327. package/dist/transpiler/generator-choices.js.map +0 -1
  328. package/dist/transpiler/markdown/class-file-generatorHelper.d.ts +0 -9
  329. package/dist/transpiler/markdown/class-file-generatorHelper.js +0 -61
  330. package/dist/transpiler/markdown/class-file-generatorHelper.js.map +0 -1
  331. package/dist/transpiler/markdown/docsify/docsify-docs-processor.d.ts +0 -6
  332. package/dist/transpiler/markdown/docsify/docsify-docs-processor.js +0 -13
  333. package/dist/transpiler/markdown/docsify/docsify-docs-processor.js.map +0 -1
  334. package/dist/transpiler/markdown/jekyll/jekyll-docsProcessor.d.ts +0 -11
  335. package/dist/transpiler/markdown/jekyll/jekyll-docsProcessor.js +0 -51
  336. package/dist/transpiler/markdown/jekyll/jekyll-docsProcessor.js.map +0 -1
  337. package/dist/transpiler/markdown/markdown-transpiler-base.d.ts +0 -11
  338. package/dist/transpiler/markdown/markdown-transpiler-base.js +0 -27
  339. package/dist/transpiler/markdown/markdown-transpiler-base.js.map +0 -1
  340. package/dist/transpiler/markdown/plain-markdown/class-template.d.ts +0 -1
  341. package/dist/transpiler/markdown/plain-markdown/class-template.js +0 -77
  342. package/dist/transpiler/markdown/plain-markdown/class-template.js.map +0 -1
  343. package/dist/transpiler/markdown/plain-markdown/constructors-partial-template.d.ts +0 -1
  344. package/dist/transpiler/markdown/plain-markdown/constructors-partial-template.js +0 -36
  345. package/dist/transpiler/markdown/plain-markdown/constructors-partial-template.js.map +0 -1
  346. package/dist/transpiler/markdown/plain-markdown/documentable-partial-template.d.ts +0 -1
  347. package/dist/transpiler/markdown/plain-markdown/documentable-partial-template.js +0 -30
  348. package/dist/transpiler/markdown/plain-markdown/documentable-partial-template.js.map +0 -1
  349. package/dist/transpiler/markdown/plain-markdown/enum-template.d.ts +0 -1
  350. package/dist/transpiler/markdown/plain-markdown/enum-template.js +0 -16
  351. package/dist/transpiler/markdown/plain-markdown/enum-template.js.map +0 -1
  352. package/dist/transpiler/markdown/plain-markdown/fieldsPartialTemplate.d.ts +0 -1
  353. package/dist/transpiler/markdown/plain-markdown/fieldsPartialTemplate.js +0 -27
  354. package/dist/transpiler/markdown/plain-markdown/fieldsPartialTemplate.js.map +0 -1
  355. package/dist/transpiler/markdown/plain-markdown/grouped-members-partial-template.d.ts +0 -1
  356. package/dist/transpiler/markdown/plain-markdown/grouped-members-partial-template.js +0 -10
  357. package/dist/transpiler/markdown/plain-markdown/grouped-members-partial-template.js.map +0 -1
  358. package/dist/transpiler/markdown/plain-markdown/interface-template.d.ts +0 -1
  359. package/dist/transpiler/markdown/plain-markdown/interface-template.js +0 -20
  360. package/dist/transpiler/markdown/plain-markdown/interface-template.js.map +0 -1
  361. package/dist/transpiler/markdown/plain-markdown/methods-partial-template.d.ts +0 -1
  362. package/dist/transpiler/markdown/plain-markdown/methods-partial-template.js +0 -47
  363. package/dist/transpiler/markdown/plain-markdown/methods-partial-template.js.map +0 -1
  364. package/dist/transpiler/markdown/plain-markdown/type-doc-partial.d.ts +0 -1
  365. package/dist/transpiler/markdown/plain-markdown/type-doc-partial.js +0 -31
  366. package/dist/transpiler/markdown/plain-markdown/type-doc-partial.js.map +0 -1
  367. package/dist/transpiler/openapi/open-api-docs-processor.d.ts +0 -13
  368. package/dist/transpiler/openapi/open-api-docs-processor.js +0 -78
  369. package/dist/transpiler/openapi/open-api-docs-processor.js.map +0 -1
  370. package/dist/transpiler/openapi/parsers/Builder.d.ts +0 -16
  371. package/dist/transpiler/openapi/parsers/Builder.js +0 -30
  372. package/dist/transpiler/openapi/parsers/Builder.js.map +0 -1
  373. package/dist/transpiler/openapi/parsers/MethodParser.d.ts +0 -20
  374. package/dist/transpiler/openapi/parsers/MethodParser.js +0 -190
  375. package/dist/transpiler/openapi/parsers/MethodParser.js.map +0 -1
  376. package/dist/transpiler/openapi/parsers/ParameterObjectBuilder.d.ts +0 -7
  377. package/dist/transpiler/openapi/parsers/ParameterObjectBuilder.js +0 -11
  378. package/dist/transpiler/openapi/parsers/ParameterObjectBuilder.js.map +0 -1
  379. package/dist/transpiler/openapi/parsers/ReferenceBuilder.d.ts +0 -39
  380. package/dist/transpiler/openapi/parsers/ReferenceBuilder.js +0 -250
  381. package/dist/transpiler/openapi/parsers/ReferenceBuilder.js.map +0 -1
  382. package/dist/transpiler/openapi/parsers/RequestBodyBuilder.d.ts +0 -10
  383. package/dist/transpiler/openapi/parsers/RequestBodyBuilder.js +0 -20
  384. package/dist/transpiler/openapi/parsers/RequestBodyBuilder.js.map +0 -1
  385. package/dist/transpiler/openapi/parsers/ResponsesBuilder.d.ts +0 -7
  386. package/dist/transpiler/openapi/parsers/ResponsesBuilder.js +0 -22
  387. package/dist/transpiler/openapi/parsers/ResponsesBuilder.js.map +0 -1
  388. package/dist/transpiler/processor-type-transpiler.d.ts +0 -10
  389. package/dist/transpiler/processor-type-transpiler.js +0 -9
  390. package/dist/transpiler/processor-type-transpiler.js.map +0 -1
  391. package/dist/transpiler/transpiler.d.ts +0 -5
  392. package/dist/transpiler/transpiler.js +0 -30
  393. package/dist/transpiler/transpiler.js.map +0 -1
  394. package/dist/util/error-logger.d.ts +0 -8
  395. package/dist/util/error-logger.js +0 -90
  396. package/dist/util/error-logger.js.map +0 -1
  397. package/dist/util/logger.d.ts +0 -21
  398. package/dist/util/logger.js +0 -61
  399. package/dist/util/logger.js.map +0 -1
  400. package/dist/util/string-utils.d.ts +0 -2
  401. package/dist/util/string-utils.js +0 -15
  402. package/dist/util/string-utils.js.map +0 -1
  403. package/examples/plain-markdown/template.md +0 -3
  404. package/src/__spec__/core/generating-class-docs.spec.ts +0 -531
  405. package/src/__spec__/core/generating-reference-guide.spec.ts +0 -164
  406. package/src/__spec__/core/test-helpers.ts +0 -9
  407. package/src/application/generators/generate-markdown-files.ts +0 -53
  408. package/src/core/apex-bundle.ts +0 -3
  409. package/src/core/generate-docs.ts +0 -432
  410. package/src/model/markdown-file.ts +0 -122
  411. package/src/model/markdown-generation-util/doc-comment-annotation-util.ts +0 -50
  412. package/src/model/markdown-generation-util/field-declaration-util.ts +0 -71
  413. package/src/model/markdown-generation-util/index.ts +0 -3
  414. package/src/model/markdown-generation-util/method-declaration-util.ts +0 -166
  415. package/src/model/markdown-generation-util/type-declaration-util.ts +0 -91
  416. package/src/model/markdown-home-file.ts +0 -58
  417. package/src/model/markdown-type-file.ts +0 -169
  418. package/src/model/openapi/openapi-type-file.ts +0 -14
  419. package/src/model/outputFile.ts +0 -20
  420. package/src/service/__tests__/apex-file-reader.spec.ts +0 -93
  421. package/src/service/apex-file-reader.ts +0 -51
  422. package/src/service/file-writer.ts +0 -34
  423. package/src/service/metadata-processor.ts +0 -16
  424. package/src/service/state.ts +0 -24
  425. package/src/service/walkers/class-walker.ts +0 -30
  426. package/src/service/walkers/enum-walker.ts +0 -7
  427. package/src/service/walkers/interface-walker.ts +0 -12
  428. package/src/service/walkers/walker-factory.ts +0 -19
  429. package/src/service/walkers/walker.ts +0 -42
  430. package/src/settings.ts +0 -153
  431. package/src/transpiler/factory.ts +0 -31
  432. package/src/transpiler/file-container.ts +0 -13
  433. package/src/transpiler/generator-choices.ts +0 -1
  434. package/src/transpiler/markdown/class-file-generatorHelper.ts +0 -61
  435. package/src/transpiler/markdown/docsify/docsify-docs-processor.ts +0 -12
  436. package/src/transpiler/markdown/jekyll/jekyll-docsProcessor.ts +0 -50
  437. package/src/transpiler/markdown/markdown-transpiler-base.ts +0 -28
  438. package/src/transpiler/processor-type-transpiler.ts +0 -18
  439. /package/src/{service → application}/file-system.ts +0 -0
  440. /package/src/core/{inheritance-chain.ts → markdown/reflection/inheritance-chain.ts} +0 -0
  441. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/documentable-partial-template.ts +0 -0
  442. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/enum-template.ts +0 -0
  443. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/fieldsPartialTemplate.ts +0 -0
  444. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/grouped-members-partial-template.ts +0 -0
  445. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/interface-template.ts +0 -0
  446. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/methods-partial-template.ts +0 -0
  447. /package/src/core/{templates → markdown/templates}/reference-guide.ts +0 -0
  448. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/type-doc-partial.ts +0 -0
  449. /package/src/{service → core/openapi}/__tests__/manifest-factory.spec.ts +0 -0
  450. /package/src/{model → core}/openapi/__tests__/open-api.spec.ts +0 -0
  451. /package/src/{model → core}/openapi/apex-doc-types.ts +0 -0
  452. /package/src/{model → core/openapi}/apex-type-wrappers/ClassMirrorWrapper.ts +0 -0
  453. /package/src/{model → core/openapi}/apex-type-wrappers/MethodMirrorWrapper.ts +0 -0
  454. /package/src/{model → core}/openapi/open-api-types.ts +0 -0
  455. /package/src/{model → core}/openapi/open-api.ts +0 -0
@@ -0,0 +1,727 @@
1
+ import { assertEither, extendExpect } from './expect-extensions';
2
+ import { apexBundleFromRawString, generateDocs } from './test-helpers';
3
+
4
+ describe('Generates interface documentation', () => {
5
+ beforeAll(() => {
6
+ extendExpect();
7
+ });
8
+
9
+ describe('documentation output', () => {
10
+ it('returns the name of the class', async () => {
11
+ const input = 'public class MyClass {}';
12
+
13
+ const result = await generateDocs([apexBundleFromRawString(input)])();
14
+ expect(result).documentationBundleHasLength(1);
15
+ assertEither(result, (data) => expect(data.docs[0].fileName).toBe('MyClass'));
16
+ });
17
+
18
+ it('returns the type as class', async () => {
19
+ const input = 'public class MyClass {}';
20
+
21
+ const result = await generateDocs([apexBundleFromRawString(input)])();
22
+ expect(result).documentationBundleHasLength(1);
23
+ assertEither(result, (data) => expect(data.docs[0].source.type).toBe('class'));
24
+ });
25
+
26
+ it('does not return classes out of scope', async () => {
27
+ const input1 = `
28
+ global class MyClass {}
29
+ `;
30
+
31
+ const input2 = `
32
+ public class AnotherClass {}
33
+ `;
34
+
35
+ const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)], {
36
+ scope: ['global'],
37
+ })();
38
+ expect(result).documentationBundleHasLength(1);
39
+ });
40
+
41
+ it('does not return classes that have an @ignore in the docs', async () => {
42
+ const input = `
43
+ /**
44
+ * @ignore
45
+ */
46
+ public class MyClass {}`;
47
+
48
+ const result = await generateDocs([apexBundleFromRawString(input)])();
49
+ expect(result).documentationBundleHasLength(0);
50
+ });
51
+
52
+ it('does not return class methods that have @ignore in the docs', async () => {
53
+ const input = `
54
+ public class MyClass {
55
+ /**
56
+ * @ignore
57
+ */
58
+ public void myMethod() {}
59
+ }`;
60
+
61
+ const result = await generateDocs([apexBundleFromRawString(input)])();
62
+ expect(result).documentationBundleHasLength(1);
63
+ assertEither(result, (data) => expect(data.docs[0].content).not.toContain('myMethod'));
64
+ });
65
+
66
+ it('does not return class properties that have @ignore in the docs', async () => {
67
+ const input = `
68
+ public class MyClass {
69
+ /**
70
+ * @ignore
71
+ */
72
+ public String myProperty { get; set; }
73
+ }`;
74
+
75
+ const result = await generateDocs([apexBundleFromRawString(input)])();
76
+ expect(result).documentationBundleHasLength(1);
77
+ assertEither(result, (data) => expect(data.docs[0].content).not.toContain('myProperty'));
78
+ });
79
+
80
+ it('does not return class fields that have @ignore in the docs', async () => {
81
+ const input = `
82
+ public class MyClass {
83
+ /**
84
+ * @ignore
85
+ */
86
+ public String myField;
87
+ }`;
88
+
89
+ const result = await generateDocs([apexBundleFromRawString(input)])();
90
+ expect(result).documentationBundleHasLength(1);
91
+ assertEither(result, (data) => expect(data.docs[0].content).not.toContain('myField'));
92
+ });
93
+
94
+ it('does not return class inner classes that have @ignore in the docs', async () => {
95
+ const input = `
96
+ public class MyClass {
97
+ /**
98
+ * @ignore
99
+ */
100
+ public class InnerClass {}
101
+ }`;
102
+
103
+ const result = await generateDocs([apexBundleFromRawString(input)])();
104
+ expect(result).documentationBundleHasLength(1);
105
+ assertEither(result, (data) => expect(data.docs[0].content).not.toContain('InnerClass'));
106
+ });
107
+
108
+ it('does not return class inner interfaces that have @ignore in the docs', async () => {
109
+ const input = `
110
+ public class MyClass {
111
+ /**
112
+ * @ignore
113
+ */
114
+ public interface InnerInterface {}
115
+ }`;
116
+
117
+ const result = await generateDocs([apexBundleFromRawString(input)])();
118
+ expect(result).documentationBundleHasLength(1);
119
+ assertEither(result, (data) => expect(data.docs[0].content).not.toContain('InnerInterface'));
120
+ });
121
+
122
+ it('does not return class inner enums that have @ignore in the docs', async () => {
123
+ const input = `
124
+ public class MyClass {
125
+ /**
126
+ * @ignore
127
+ */
128
+ public enum InnerEnum {}
129
+ }`;
130
+
131
+ const result = await generateDocs([apexBundleFromRawString(input)])();
132
+ expect(result).documentationBundleHasLength(1);
133
+ assertEither(result, (data) => expect(data.docs[0].content).not.toContain('InnerEnum'));
134
+ });
135
+ });
136
+
137
+ describe('documentation content', () => {
138
+ describe('type level information', () => {
139
+ it('generates a heading with the class name', async () => {
140
+ const input = 'public class MyClass {}';
141
+
142
+ const output = `# MyClass Class`;
143
+ const result = await generateDocs([apexBundleFromRawString(input)])();
144
+ expect(result).documentationBundleHasLength(1);
145
+ assertEither(result, (data) => expect(data).firstDocContains(output));
146
+ });
147
+
148
+ it('displays type level annotations', async () => {
149
+ const input = `
150
+ @NamespaceAccessible
151
+ public class MyClass {
152
+ @Deprecated
153
+ public void myMethod() {}
154
+ }
155
+ `;
156
+
157
+ const result = await generateDocs([apexBundleFromRawString(input)])();
158
+ expect(result).documentationBundleHasLength(1);
159
+ assertEither(result, (data) => expect(data).firstDocContains('NAMESPACEACCESSIBLE'));
160
+ assertEither(result, (data) => expect(data).firstDocContains('DEPRECATED'));
161
+ });
162
+
163
+ it('displays metadata as annotations', async () => {
164
+ const input = 'public class MyClass {}';
165
+ const metadata = `
166
+ <?xml version="1.0" encoding="UTF-8"?>
167
+ <ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
168
+ <apiVersion>59.0</apiVersion>
169
+ <status>Active</status>
170
+ </ApexClass>
171
+ `;
172
+
173
+ const result = await generateDocs([apexBundleFromRawString(input, metadata)])();
174
+
175
+ expect(result).documentationBundleHasLength(1);
176
+ assertEither(result, (data) => expect(data).firstDocContains('APIVERSION'));
177
+ assertEither(result, (data) => expect(data).firstDocContains('STATUS'));
178
+ });
179
+
180
+ it('displays the description', async () => {
181
+ const input = `
182
+ /**
183
+ * This is a description
184
+ */
185
+ public class MyClass {}
186
+ `;
187
+
188
+ const result = await generateDocs([apexBundleFromRawString(input)])();
189
+ expect(result).documentationBundleHasLength(1);
190
+ assertEither(result, (data) => expect(data).firstDocContains('This is a description'));
191
+ });
192
+
193
+ it('display custom documentation tags', async () => {
194
+ const input = `
195
+ /**
196
+ * @custom-tag My Value
197
+ */
198
+ public class MyClass {}
199
+ `;
200
+
201
+ const result = await generateDocs([apexBundleFromRawString(input)])();
202
+ expect(result).documentationBundleHasLength(1);
203
+ assertEither(result, (data) => expect(data).firstDocContains('Custom Tag'));
204
+ assertEither(result, (data) => expect(data).firstDocContains('My Value'));
205
+ });
206
+
207
+ it('displays the group', async () => {
208
+ const input = `
209
+ /**
210
+ * @group MyGroup
211
+ */
212
+ public class MyClass {}`;
213
+
214
+ const result = await generateDocs([apexBundleFromRawString(input)])();
215
+ expect(result).documentationBundleHasLength(1);
216
+ assertEither(result, (data) => expect(data).firstDocContains('Group'));
217
+ assertEither(result, (data) => expect(data).firstDocContains('MyGroup'));
218
+ });
219
+
220
+ it('displays the author', async () => {
221
+ const input = `
222
+ /**
223
+ * @author John Doe
224
+ */
225
+ public class MyClass {}`;
226
+
227
+ const result = await generateDocs([apexBundleFromRawString(input)])();
228
+ expect(result).documentationBundleHasLength(1);
229
+ assertEither(result, (data) => expect(data).firstDocContains('Author'));
230
+ assertEither(result, (data) => expect(data).firstDocContains('John Doe'));
231
+ });
232
+
233
+ it('displays the date', async () => {
234
+ const input = `
235
+ /**
236
+ * @date 2021-01-01
237
+ */
238
+ public class MyClass {}`;
239
+
240
+ const result = await generateDocs([apexBundleFromRawString(input)])();
241
+ expect(result).documentationBundleHasLength(1);
242
+ assertEither(result, (data) => expect(data).firstDocContains('Date'));
243
+ assertEither(result, (data) => expect(data).firstDocContains('2021-01-01'));
244
+ });
245
+
246
+ it('displays descriptions', async () => {
247
+ const input = `
248
+ /**
249
+ * @description This is a description
250
+ */
251
+ public class MyClass {}`;
252
+
253
+ const result = await generateDocs([apexBundleFromRawString(input)])();
254
+ expect(result).documentationBundleHasLength(1);
255
+ assertEither(result, (data) => expect(data).firstDocContains('This is a description'));
256
+ });
257
+
258
+ it('displays descriptions with links', async () => {
259
+ const input1 = `
260
+ /**
261
+ * @description This is a description with a {@link ClassRef} reference
262
+ */
263
+ public enum MyClass {}
264
+ `;
265
+
266
+ const input2 = 'public class ClassRef {}';
267
+
268
+ const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)])();
269
+ expect(result).documentationBundleHasLength(2);
270
+ assertEither(result, (data) =>
271
+ expect(data).firstDocContains('This is a description with a [ClassRef](./ClassRef.md) reference'),
272
+ );
273
+ });
274
+
275
+ it('displays descriptions with emails', async () => {
276
+ const input = `
277
+ /**
278
+ * @description This is a description with an {@email test@testerson.com} email
279
+ */
280
+ public class MyClass {}
281
+ `;
282
+
283
+ const result = await generateDocs([apexBundleFromRawString(input)])();
284
+ expect(result).documentationBundleHasLength(1);
285
+ assertEither(result, (data) =>
286
+ expect(data).firstDocContains(
287
+ 'This is a description with an [test@testerson.com](mailto:test@testerson.com) email',
288
+ ),
289
+ );
290
+ });
291
+
292
+ it('displays sees with accurately resolved links', async () => {
293
+ const input1 = `
294
+ /**
295
+ * @see ClassRef
296
+ */
297
+ public class MyClass {}
298
+ `;
299
+
300
+ const input2 = 'public class ClassRef {}';
301
+
302
+ const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)])();
303
+ expect(result).documentationBundleHasLength(2);
304
+ assertEither(result, (data) => expect(data).firstDocContains('See'));
305
+ assertEither(result, (data) => expect(data).firstDocContains('[ClassRef](./ClassRef.md)'));
306
+ });
307
+
308
+ it('displays sees without links when the reference is not found', async () => {
309
+ const input = `
310
+ /**
311
+ * @see ClassRef
312
+ */
313
+ public class MyClass {}
314
+ `;
315
+
316
+ const result = await generateDocs([apexBundleFromRawString(input)])();
317
+ expect(result).documentationBundleHasLength(1);
318
+ assertEither(result, (data) => expect(data).firstDocContains('See'));
319
+ assertEither(result, (data) => expect(data).firstDocContains('ClassRef'));
320
+ });
321
+
322
+ it('displays the namespace if present in the config', async () => {
323
+ const input = 'public class MyClass {}';
324
+
325
+ const result = await generateDocs([apexBundleFromRawString(input)], { namespace: 'MyNamespace' })();
326
+ expect(result).documentationBundleHasLength(1);
327
+ assertEither(result, (data) => expect(data).firstDocContains('## Namespace'));
328
+ assertEither(result, (data) => expect(data).firstDocContains('MyNamespace'));
329
+ });
330
+
331
+ it('does not display the namespace if not present in the config', async () => {
332
+ const input = 'public class MyClass {}';
333
+
334
+ const result = await generateDocs([apexBundleFromRawString(input)])();
335
+ expect(result).documentationBundleHasLength(1);
336
+ assertEither(result, (data) => expect(data).firstDocContainsNot('## Namespace'));
337
+ });
338
+
339
+ it('displays a mermaid diagram', async () => {
340
+ const input = `
341
+ /**
342
+ * @mermaid
343
+ * graph TD
344
+ * A[Square Rect] -- Link text --> B((Circle))
345
+ * A --> C(Round Rect)
346
+ * B --> D{Rhombus}
347
+ * C --> D
348
+ */
349
+ public class MyClass {}
350
+ `;
351
+
352
+ const result = await generateDocs([apexBundleFromRawString(input)])();
353
+ expect(result).documentationBundleHasLength(1);
354
+ assertEither(result, (data) => expect(data).firstDocContains('```mermaid'));
355
+ assertEither(result, (data) => expect(data).firstDocContains('graph TD'));
356
+ });
357
+
358
+ it('displays an example code block', async () => {
359
+ const input = `
360
+ /**
361
+ * @example
362
+ * public class MyClass {
363
+ * public void myMethod() {
364
+ * System.debug('Hello, World!');
365
+ * }
366
+ * }
367
+ */
368
+ public class MyClass {}`;
369
+
370
+ const result = await generateDocs([apexBundleFromRawString(input)])();
371
+ expect(result).documentationBundleHasLength(1);
372
+ assertEither(result, (data) => expect(data).firstDocContains('```apex'));
373
+ assertEither(result, (data) => expect(data).firstDocContains('public class MyClass'));
374
+ });
375
+ });
376
+ });
377
+
378
+ describe('member information', () => {
379
+ it('displays the Method heading', async () => {
380
+ const input = `
381
+ public class MyClass {
382
+ public void myMethod() {}
383
+ }
384
+ `;
385
+
386
+ const result = await generateDocs([apexBundleFromRawString(input)])();
387
+ expect(result).documentationBundleHasLength(1);
388
+ assertEither(result, (data) => expect(data).firstDocContains('## Methods'));
389
+ });
390
+
391
+ it('sorts methods when sorting members alphabetically', async () => {
392
+ const input = `
393
+ public class MyClass {
394
+ public void zMethod() {}
395
+ public void aMethod() {}
396
+ }
397
+ `;
398
+
399
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: true })();
400
+ expect(result).documentationBundleHasLength(1);
401
+ assertEither(result, (data) => {
402
+ const aMethodIndex = data.docs[0].content.indexOf('aMethod');
403
+ const zMethodIndex = data.docs[0].content.indexOf('zMethod');
404
+ expect(aMethodIndex).toBeLessThan(zMethodIndex);
405
+ });
406
+ });
407
+
408
+ it('does not sort methods when not sorting members alphabetically', async () => {
409
+ const input = `
410
+ public class MyClass {
411
+ public void zMethod() {}
412
+ public void aMethod() {}
413
+ }
414
+ `;
415
+
416
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: false })();
417
+ expect(result).documentationBundleHasLength(1);
418
+ assertEither(result, (data) => {
419
+ const aMethodIndex = data.docs[0].content.indexOf('aMethod');
420
+ const zMethodIndex = data.docs[0].content.indexOf('zMethod');
421
+ expect(aMethodIndex).toBeGreaterThan(zMethodIndex);
422
+ });
423
+ });
424
+
425
+ it('displays the Property heading', async () => {
426
+ const input = `
427
+ public class MyClass {
428
+ public String myProperty { get; set; }
429
+ }
430
+ `;
431
+
432
+ const result = await generateDocs([apexBundleFromRawString(input)])();
433
+ expect(result).documentationBundleHasLength(1);
434
+ assertEither(result, (data) => expect(data).firstDocContains('## Properties'));
435
+ });
436
+
437
+ it('sorts properties when sorting members alphabetically', async () => {
438
+ const input = `
439
+ public class MyClass {
440
+ public String zProperty { get; set; }
441
+ public String aProperty { get; set; }
442
+ }
443
+ `;
444
+
445
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: true })();
446
+ expect(result).documentationBundleHasLength(1);
447
+ assertEither(result, (data) => {
448
+ const aPropertyIndex = data.docs[0].content.indexOf('aProperty');
449
+ const zPropertyIndex = data.docs[0].content.indexOf('zProperty');
450
+ expect(aPropertyIndex).toBeLessThan(zPropertyIndex);
451
+ });
452
+ });
453
+
454
+ it('does not sort properties when not sorting members alphabetically', async () => {
455
+ const input = `
456
+ public class MyClass {
457
+ public String zProperty { get; set; }
458
+ public String aProperty { get; set; }
459
+ }
460
+ `;
461
+
462
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: false })();
463
+ expect(result).documentationBundleHasLength(1);
464
+ assertEither(result, (data) => {
465
+ const aPropertyIndex = data.docs[0].content.indexOf('aProperty');
466
+ const zPropertyIndex = data.docs[0].content.indexOf('zProperty');
467
+ expect(aPropertyIndex).toBeGreaterThan(zPropertyIndex);
468
+ });
469
+ });
470
+
471
+ it('displays the Field heading', async () => {
472
+ const input = `
473
+ public class MyClass {
474
+ public String myField;
475
+ }
476
+ `;
477
+
478
+ const result = await generateDocs([apexBundleFromRawString(input)])();
479
+ expect(result).documentationBundleHasLength(1);
480
+ assertEither(result, (data) => expect(data).firstDocContains('## Fields'));
481
+ });
482
+
483
+ it('sort fields when sorting members alphabetically', async () => {
484
+ const input = `
485
+ public class MyClass {
486
+ public String zField;
487
+ public String aField;
488
+ }
489
+ `;
490
+
491
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: true })();
492
+ expect(result).documentationBundleHasLength(1);
493
+ assertEither(result, (data) => {
494
+ const aFieldIndex = data.docs[0].content.indexOf('aField');
495
+ const zFieldIndex = data.docs[0].content.indexOf('zField');
496
+ expect(aFieldIndex).toBeLessThan(zFieldIndex);
497
+ });
498
+ });
499
+
500
+ it('does not sort fields when not sorting members alphabetically', async () => {
501
+ const input = `
502
+ public class MyClass {
503
+ public String zField;
504
+ public String aField;
505
+ }
506
+ `;
507
+
508
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: false })();
509
+ expect(result).documentationBundleHasLength(1);
510
+ assertEither(result, (data) => {
511
+ const aFieldIndex = data.docs[0].content.indexOf('aField');
512
+ const zFieldIndex = data.docs[0].content.indexOf('zField');
513
+ expect(aFieldIndex).toBeGreaterThan(zFieldIndex);
514
+ });
515
+ });
516
+
517
+ it('displays the Constructor heading', async () => {
518
+ const input = `
519
+ public class MyClass {
520
+ public MyClass() {}
521
+ }
522
+ `;
523
+
524
+ const result = await generateDocs([apexBundleFromRawString(input)])();
525
+ expect(result).documentationBundleHasLength(1);
526
+ assertEither(result, (data) => expect(data).firstDocContains('## Constructors'));
527
+ });
528
+
529
+ it('displays the Inner Class heading', async () => {
530
+ const input = `
531
+ public class MyClass {
532
+ public class InnerClass {}
533
+ }
534
+ `;
535
+
536
+ const result = await generateDocs([apexBundleFromRawString(input)])();
537
+ expect(result).documentationBundleHasLength(1);
538
+ assertEither(result, (data) => expect(data).firstDocContains('## Classes'));
539
+ });
540
+
541
+ it('sorts inner classes when sorting members alphabetically', async () => {
542
+ const input = `
543
+ public class MyClass {
544
+ public class ZInnerClass {}
545
+ public class AInnerClass {}
546
+ }
547
+ `;
548
+
549
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: true })();
550
+ expect(result).documentationBundleHasLength(1);
551
+ assertEither(result, (data) => {
552
+ const aInnerClassIndex = data.docs[0].content.indexOf('AInnerClass');
553
+ const zInnerClassIndex = data.docs[0].content.indexOf('ZInnerClass');
554
+ expect(aInnerClassIndex).toBeLessThan(zInnerClassIndex);
555
+ });
556
+ });
557
+
558
+ it('does not sort inner classes when not sorting members alphabetically', async () => {
559
+ const input = `
560
+ public class MyClass {
561
+ public class ZInnerClass {}
562
+ public class AInnerClass {}
563
+ }
564
+ `;
565
+
566
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: false })();
567
+ expect(result).documentationBundleHasLength(1);
568
+ assertEither(result, (data) => {
569
+ const aInnerClassIndex = data.docs[0].content.indexOf('AInnerClass');
570
+ const zInnerClassIndex = data.docs[0].content.indexOf('ZInnerClass');
571
+ expect(aInnerClassIndex).toBeGreaterThan(zInnerClassIndex);
572
+ });
573
+ });
574
+
575
+ it('displays the Inner Interface heading', async () => {
576
+ const input = `
577
+ public class MyClass {
578
+ public interface InnerInterface {}
579
+ }
580
+ `;
581
+
582
+ const result = await generateDocs([apexBundleFromRawString(input)])();
583
+ expect(result).documentationBundleHasLength(1);
584
+ assertEither(result, (data) => expect(data).firstDocContains('## Interfaces'));
585
+ });
586
+
587
+ it('sorts inner interfaces when sorting members alphabetically', async () => {
588
+ const input = `
589
+ public class MyClass {
590
+ public interface ZInnerInterface {}
591
+ public interface AInnerInterface {}
592
+ }
593
+ `;
594
+
595
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: true })();
596
+ expect(result).documentationBundleHasLength(1);
597
+ assertEither(result, (data) => {
598
+ const aInnerInterfaceIndex = data.docs[0].content.indexOf('AInnerInterface');
599
+ const zInnerInterfaceIndex = data.docs[0].content.indexOf('ZInnerInterface');
600
+ expect(aInnerInterfaceIndex).toBeLessThan(zInnerInterfaceIndex);
601
+ });
602
+ });
603
+
604
+ it('does not sort inner interfaces when not sorting members alphabetically', async () => {
605
+ const input = `
606
+ public class MyClass {
607
+ public interface ZInnerInterface {}
608
+ public interface AInnerInterface {}
609
+ }
610
+ `;
611
+
612
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: false })();
613
+ expect(result).documentationBundleHasLength(1);
614
+ assertEither(result, (data) => {
615
+ const aInnerInterfaceIndex = data.docs[0].content.indexOf('AInnerInterface');
616
+ const zInnerInterfaceIndex = data.docs[0].content.indexOf('ZInnerInterface');
617
+ expect(aInnerInterfaceIndex).toBeGreaterThan(zInnerInterfaceIndex);
618
+ });
619
+ });
620
+
621
+ it('displays the Inner Enum heading', async () => {
622
+ const input = `
623
+ public class MyClass {
624
+ public enum InnerEnum {}
625
+ }
626
+ `;
627
+
628
+ const result = await generateDocs([apexBundleFromRawString(input)])();
629
+ expect(result).documentationBundleHasLength(1);
630
+ assertEither(result, (data) => expect(data).firstDocContains('## Enums'));
631
+ });
632
+
633
+ it('sort inner enums when sorting members alphabetically', async () => {
634
+ const input = `
635
+ public class MyClass {
636
+ public enum ZInnerEnum {}
637
+ public enum AInnerEnum {}
638
+ }
639
+ `;
640
+
641
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: true })();
642
+ expect(result).documentationBundleHasLength(1);
643
+ assertEither(result, (data) => {
644
+ const aInnerEnumIndex = data.docs[0].content.indexOf('AInnerEnum');
645
+ const zInnerEnumIndex = data.docs[0].content.indexOf('ZInnerEnum');
646
+ expect(aInnerEnumIndex).toBeLessThan(zInnerEnumIndex);
647
+ });
648
+ });
649
+
650
+ it('does not sort inner enums when not sorting members alphabetically', async () => {
651
+ const input = `
652
+ public class MyClass {
653
+ public enum ZInnerEnum {}
654
+ public enum AInnerEnum {}
655
+ }
656
+ `;
657
+
658
+ const result = await generateDocs([apexBundleFromRawString(input)], { sortMembersAlphabetically: false })();
659
+ expect(result).documentationBundleHasLength(1);
660
+ assertEither(result, (data) => {
661
+ const aInnerEnumIndex = data.docs[0].content.indexOf('AInnerEnum');
662
+ const zInnerEnumIndex = data.docs[0].content.indexOf('ZInnerEnum');
663
+ expect(aInnerEnumIndex).toBeGreaterThan(zInnerEnumIndex);
664
+ });
665
+ });
666
+
667
+ it('supports having mermaid diagrams in descriptions', async () => {
668
+ const input = `
669
+ public class MyClass {
670
+ /**
671
+ * @mermaid
672
+ * graph TD
673
+ * A[Square Rect] -- Link text --> B((Circle))
674
+ * A --> C(Round Rect)
675
+ * B --> D{Rhombus}
676
+ * C --> D
677
+ */
678
+ public void myMethod() {}
679
+ }
680
+ `;
681
+
682
+ const result = await generateDocs([apexBundleFromRawString(input)])();
683
+ expect(result).documentationBundleHasLength(1);
684
+ assertEither(result, (data) => expect(data).firstDocContains('```mermaid'));
685
+ assertEither(result, (data) => expect(data).firstDocContains('graph TD'));
686
+ });
687
+
688
+ it('supports having example code blocks in method descriptions', async () => {
689
+ const input = `
690
+ public class MyClass {
691
+ /**
692
+ * @example
693
+ * public class MyClass {
694
+ * public void myMethod() {
695
+ * System.debug('Hello, World!');
696
+ * }
697
+ * }
698
+ */
699
+ public void myMethod() {}
700
+ }
701
+ `;
702
+
703
+ const result = await generateDocs([apexBundleFromRawString(input)])();
704
+ expect(result).documentationBundleHasLength(1);
705
+ assertEither(result, (data) => expect(data).firstDocContains('```apex'));
706
+ assertEither(result, (data) => expect(data).firstDocContains('public class MyClass'));
707
+ });
708
+
709
+ it('displays an "inherited" tag if the method was inherited from a different interface', async () => {
710
+ const input1 = `
711
+ public virtual class MyClass {
712
+ public void myMethod() {}
713
+ }
714
+ `;
715
+
716
+ const input2 = `
717
+ public class AnotherClass extends MyClass {}
718
+ `;
719
+
720
+ const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)])();
721
+ expect(result).documentationBundleHasLength(2);
722
+ assertEither(result, (data) =>
723
+ expect(data.docs.find((doc) => doc.source.name === 'AnotherClass')?.content).toContain('Inherited'),
724
+ );
725
+ });
726
+ });
727
+ });