@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,18 @@
1
+ {
2
+ "name": "vitepress-example",
3
+ "scripts": {
4
+ "docs:clean": "rimraf --glob 'docs/!(.vitepress|index-frontmatter.md|api-examples.md|markdown-examples.md)'",
5
+ "apexdocs:build": "npm run docs:clean && ts-node ../../src/cli/generate.ts markdown",
6
+ "docs:build": "vitepress build docs",
7
+ "docs:gen": "npm run docs:clean && npm run docs:build",
8
+ "docs:dev": "vitepress dev docs",
9
+ "docs:preview": "vitepress preview docs"
10
+ },
11
+ "devDependencies": {
12
+ "ts-node": "^10.9.2",
13
+ "vitepress": "^1.3.1"
14
+ },
15
+ "dependencies": {
16
+ "rimraf": "^5.0.7"
17
+ }
18
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "packageDirectories": [
3
+ {
4
+ "path": "force-app",
5
+ "default": true
6
+ }
7
+ ],
8
+ "name": "vitepress",
9
+ "namespace": "",
10
+ "sfdcLoginUrl": "https://login.salesforce.com",
11
+ "sourceApiVersion": "61.0"
12
+ }
package/jest.config.js CHANGED
@@ -5,5 +5,6 @@ module.exports = {
5
5
  moduleNameMapper: {
6
6
  '^chalk$': '<rootDir>/__mocks__/chalk.js',
7
7
  '^log-update$': '<rootDir>/__mocks__/log-update.js',
8
+ '#utils/(.*)$': '<rootDir>/src/util/$1',
8
9
  },
9
10
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cparra/apexdocs",
3
- "version": "2.25.0-alpha.3",
3
+ "version": "2.25.0-alpha.5",
4
4
  "description": "Library with CLI capabilities to generate documentation for Salesforce Apex classes.",
5
5
  "keywords": [
6
6
  "apex",
@@ -13,11 +13,11 @@
13
13
  "exports": "./dist/index.js",
14
14
  "types": "./dist/index.d.ts",
15
15
  "bin": {
16
- "apexdocs-generate": "./dist/cli/generate.js"
16
+ "apexdocs": "./dist/cli/generate.js"
17
17
  },
18
18
  "scripts": {
19
19
  "test": "npm run build && jest",
20
- "build": "rimraf ./lib && npm run lint && pkgroll --minify",
20
+ "build": "rimraf ./lib && npm run lint && tsc --noEmit && pkgroll",
21
21
  "lint": "eslint \"./src/**/*.{js,ts}\" --quiet --fix",
22
22
  "prepare": "npm run build",
23
23
  "version": "npm run format && git add -A src",
@@ -34,7 +34,6 @@
34
34
  "devDependencies": {
35
35
  "@eslint/js": "^9.6.0",
36
36
  "@types/eslint__js": "^8.42.3",
37
- "@types/html-entities": "^1.3.4",
38
37
  "@types/jest": "^29.5.12",
39
38
  "@types/node": "^20.14.10",
40
39
  "@types/shelljs": "^0.8.15",
@@ -44,7 +43,7 @@
44
43
  "husky": "^9.0.11",
45
44
  "jest": "^29.7.0",
46
45
  "lint-staged": "^15.2.7",
47
- "pkgroll": "^2.1.1",
46
+ "pkgroll": "^2.4.2",
48
47
  "prettier": "^3.3.2",
49
48
  "rimraf": "^6.0.0",
50
49
  "ts-jest": "^29.2.0",
@@ -62,16 +61,21 @@
62
61
  ]
63
62
  },
64
63
  "dependencies": {
65
- "@cparra/apex-reflection": "2.9.5",
64
+ "@cparra/apex-reflection": "2.11.2",
66
65
  "@types/js-yaml": "^4.0.9",
67
66
  "@types/yargs": "^17.0.32",
68
67
  "chalk": "^4.1.2",
69
68
  "cosmiconfig": "^9.0.0",
69
+ "cosmiconfig-typescript-loader": "^5.0.0",
70
70
  "fast-xml-parser": "^4.4.0",
71
71
  "fp-ts": "^2.16.8",
72
72
  "handlebars": "^4.7.8",
73
73
  "js-yaml": "^4.1.0",
74
74
  "log-update": "4.0.0",
75
+ "type-fest": "^4.23.0",
75
76
  "yargs": "^17.7.2"
77
+ },
78
+ "imports": {
79
+ "#utils/*": "./src/util/*.ts"
76
80
  }
77
81
  }
@@ -1,20 +1,10 @@
1
- import { ApexFileReader } from '../service/apex-file-reader';
2
- import { DefaultFileSystem } from '../service/file-system';
3
- import { ReflectionResult, reflect, Type } from '@cparra/apex-reflection';
4
- import { Logger } from '../util/logger';
5
- import { createManifest } from '../service/manifest-factory';
6
- import { RawBodyParser } from '../service/parser';
7
- import { Settings, TargetFile } from '../settings';
8
- import Transpiler from '../transpiler/transpiler';
9
- import { FileWriter } from '../service/file-writer';
10
- import ErrorLogger from '../util/error-logger';
11
- import ApexBundle from '../core/apex-bundle';
12
- import Manifest from '../core/manifest';
13
- import { TypesRepository } from '../model/types-repository';
14
- import { TypeTranspilerFactory } from '../transpiler/factory';
15
- import { generateMarkdownFiles } from './generators/generate-markdown-files';
16
- import { AllConfigurableOptions } from '../cli/args';
17
- import { GeneratorChoices } from '../transpiler/generator-choices';
1
+ import markdown from './generators/markdown';
2
+ import openApi from './generators/openapi';
3
+
4
+ import { ApexFileReader } from './apex-file-reader';
5
+ import { DefaultFileSystem } from './file-system';
6
+ import { Logger } from '#utils/logger';
7
+ import { UserDefinedConfig } from '../core/shared/types';
18
8
 
19
9
  /**
20
10
  * Application entry-point to generate documentation out of Apex source files.
@@ -23,98 +13,18 @@ export class Apexdocs {
23
13
  /**
24
14
  * Generates documentation out of Apex source files.
25
15
  */
26
- static generate(config: AllConfigurableOptions): void {
16
+ static async generate(config: UserDefinedConfig): Promise<void> {
27
17
  Logger.logSingle('Initializing...', false);
28
- this.initializeSettings(config);
29
- const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem());
30
-
31
- if (Settings.getInstance().targetGenerator === 'plain-markdown') {
32
- generateMarkdownFiles(fileBodies);
33
- } else {
34
- const manifest = createManifest(new RawBodyParser(fileBodies), this._reflectionWithLogger);
35
- TypesRepository.getInstance().populateAll(manifest.types);
36
- const filteredTypes = this.filterByScopes(manifest);
37
- TypesRepository.getInstance().populateScoped(filteredTypes);
38
- const processor = TypeTranspilerFactory.get(Settings.getInstance().targetGenerator);
39
- Transpiler.generate(filteredTypes, processor);
40
- const generatedFiles = processor.fileBuilder().files();
41
-
42
- const files: TargetFile[] = [];
43
- FileWriter.write(generatedFiles, (file: TargetFile) => {
44
- Logger.logSingle(`${file.name} processed.`, false, 'green', false);
45
- files.push(file);
46
- });
47
18
 
48
- Settings.getInstance().onAfterProcess(files);
19
+ const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem(), config.sourceDir, config.includeMetadata);
49
20
 
50
- // Error logging
51
- ErrorLogger.logErrors(filteredTypes);
21
+ switch (config.targetGenerator) {
22
+ case 'markdown':
23
+ await markdown(fileBodies, config);
24
+ break;
25
+ case 'openapi':
26
+ openApi(fileBodies, config);
27
+ break;
52
28
  }
53
29
  }
54
-
55
- private static initializeSettings(argv: AllConfigurableOptions) {
56
- const targetGenerator = argv.targetGenerator as GeneratorChoices;
57
- Settings.build({
58
- sourceDirectory: argv.sourceDir,
59
- recursive: argv.recursive,
60
- scope: argv.scope,
61
- outputDir: argv.targetDir,
62
- targetGenerator: targetGenerator,
63
- indexOnly: argv.indexOnly,
64
- defaultGroupName: argv.defaultGroupName,
65
- sanitizeHtml: argv.sanitizeHtml,
66
- openApiTitle: argv.openApiTitle,
67
- title: argv.title,
68
- namespace: argv.namespace,
69
- openApiFileName: argv.openApiFileName,
70
- sortMembersAlphabetically: argv.sortMembersAlphabetically,
71
- includeMetadata: argv.includeMetadata,
72
- rootDir: argv.documentationRootDir,
73
- onAfterProcess: argv.onAfterProcess,
74
- onBeforeFileWrite: argv.onBeforeFileWrite,
75
- frontMatterHeader: argv.frontMatterHeader,
76
- linkingStrategy:
77
- targetGenerator === 'plain-markdown'
78
- ? 'path-relative'
79
- : TypeTranspilerFactory.get(targetGenerator).getLinkingStrategy(),
80
- });
81
- }
82
-
83
- private static filterByScopes(manifest: Manifest) {
84
- let filteredTypes: Type[];
85
- let filteredLogMessage;
86
- if (Settings.getInstance().config.targetGenerator !== 'openapi') {
87
- filteredTypes = manifest.filteredByAccessModifierAndAnnotations(Settings.getInstance().scope);
88
- filteredLogMessage = `Filtered ${manifest.types.length - filteredTypes.length} file(s) based on scope: ${
89
- Settings.getInstance().scope
90
- }`;
91
- } else {
92
- // If we are dealing with an OpenApi generator, we ignore the passed in access modifiers, and instead
93
- // we only keep classes annotated as @RestResource
94
- filteredTypes = manifest.filteredByAccessModifierAndAnnotations([
95
- 'restresource',
96
- 'httpdelete',
97
- 'httpget',
98
- 'httppatch',
99
- 'httppost',
100
- 'httpput',
101
- ]);
102
- filteredLogMessage = `Filtered ${
103
- manifest.types.length - filteredTypes.length
104
- } file(s), only keeping classes annotated as @RestResource.`;
105
- }
106
- Logger.clear();
107
-
108
- Logger.logSingle(filteredLogMessage, false, 'green', false);
109
- Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, 'green', false);
110
- return filteredTypes;
111
- }
112
-
113
- static _reflectionWithLogger = (apexBundle: ApexBundle): ReflectionResult => {
114
- const result = reflect(apexBundle.rawTypeContent);
115
- if (result.error) {
116
- Logger.error(`${apexBundle.filePath} - Parsing error ${result.error?.message}`);
117
- }
118
- return result;
119
- };
120
30
  }
@@ -0,0 +1,104 @@
1
+ import { Settings, SettingsConfig } from '../../core/settings';
2
+ import { ApexFileReader } from '../apex-file-reader';
3
+
4
+ describe('File Reader', () => {
5
+ beforeEach(() => {
6
+ Settings.build({
7
+ sourceDirectory: '',
8
+ recursive: true,
9
+ scope: [],
10
+ outputDir: '',
11
+ targetGenerator: 'markdown',
12
+ indexOnly: false,
13
+ defaultGroupName: 'Misc',
14
+ sanitizeHtml: true,
15
+ openApiFileName: 'openapi',
16
+ title: 'Classes',
17
+ includeMetadata: false,
18
+ } as SettingsConfig);
19
+ });
20
+
21
+ it('returns an empty list when there are no files in the directory', () => {
22
+ const result = ApexFileReader.processFiles(
23
+ {
24
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
25
+ isDirectory(_: string): boolean {
26
+ return false;
27
+ },
28
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
+ joinPath(_: string): string {
30
+ return '';
31
+ },
32
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
+ readDirectory(_: string): string[] {
34
+ return [];
35
+ },
36
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
37
+ readFile(_: string): string {
38
+ return '';
39
+ },
40
+ exists(): boolean {
41
+ return true;
42
+ },
43
+ },
44
+ '',
45
+ false,
46
+ );
47
+ expect(result.length).toBe(0);
48
+ });
49
+
50
+ it('returns an empty list when there are no Apex files in the directory', () => {
51
+ const result = ApexFileReader.processFiles(
52
+ {
53
+ isDirectory(): boolean {
54
+ return false;
55
+ },
56
+ joinPath(): string {
57
+ return '';
58
+ },
59
+ readDirectory(): string[] {
60
+ return ['SomeFile.md'];
61
+ },
62
+ readFile(): string {
63
+ return '';
64
+ },
65
+ exists(): boolean {
66
+ return true;
67
+ },
68
+ },
69
+ '',
70
+ false,
71
+ );
72
+ expect(result.length).toBe(0);
73
+ });
74
+
75
+ it('returns the file contents for an Apex file', () => {
76
+ const result = ApexFileReader.processFiles(
77
+ {
78
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
79
+ isDirectory(_: string): boolean {
80
+ return false;
81
+ },
82
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
83
+ joinPath(_: string): string {
84
+ return '';
85
+ },
86
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
87
+ readDirectory(_: string): string[] {
88
+ return ['SomeApexFile.cls'];
89
+ },
90
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
91
+ readFile(_: string): string {
92
+ return 'public class MyClass{}';
93
+ },
94
+ exists(): boolean {
95
+ return true;
96
+ },
97
+ },
98
+ '',
99
+ false,
100
+ );
101
+ expect(result.length).toBe(1);
102
+ expect(result[0].content).toBe('public class MyClass{}');
103
+ });
104
+ });
@@ -0,0 +1,42 @@
1
+ import { FileSystem } from './file-system';
2
+ import { SourceFile } from '../core/shared/types';
3
+
4
+ const APEX_FILE_EXTENSION = '.cls';
5
+
6
+ /**
7
+ * Reads from .cls files and returns their raw body.
8
+ */
9
+ export class ApexFileReader {
10
+ /**
11
+ * Reads from .cls files and returns their raw body.
12
+ */
13
+ static processFiles(fileSystem: FileSystem, rootPath: string, includeMetadata: boolean): SourceFile[] {
14
+ let bundles: SourceFile[] = [];
15
+
16
+ const directoryContents = fileSystem.readDirectory(rootPath);
17
+ directoryContents.forEach((filePath) => {
18
+ const currentPath = fileSystem.joinPath(rootPath, filePath);
19
+ if (fileSystem.isDirectory(currentPath)) {
20
+ bundles = bundles.concat(this.processFiles(fileSystem, currentPath, includeMetadata));
21
+ }
22
+
23
+ if (!this.isApexFile(filePath)) {
24
+ return;
25
+ }
26
+
27
+ const rawTypeContent = fileSystem.readFile(currentPath);
28
+ const metadataPath = fileSystem.joinPath(rootPath, `${filePath}-meta.xml`);
29
+ let rawMetadataContent = null;
30
+ if (includeMetadata) {
31
+ rawMetadataContent = fileSystem.exists(metadataPath) ? fileSystem.readFile(metadataPath) : null;
32
+ }
33
+
34
+ bundles.push({ filePath: currentPath, content: rawTypeContent, metadataContent: rawMetadataContent });
35
+ });
36
+ return bundles;
37
+ }
38
+
39
+ private static isApexFile(currentFile: string): boolean {
40
+ return currentFile.endsWith(APEX_FILE_EXTENSION);
41
+ }
42
+ }
@@ -0,0 +1,25 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { PageData } from '../core/shared/types';
4
+
5
+ export class FileWriter {
6
+ static write(files: PageData[], outputDir: string, onWriteCallback: (file: PageData) => void) {
7
+ files.forEach((file) => {
8
+ const resolvedFile = this.getTargetLocation(file, outputDir);
9
+ if (!fs.existsSync(resolvedFile.directory)) {
10
+ fs.mkdirSync(resolvedFile.directory, { recursive: true });
11
+ }
12
+
13
+ const filePath = path.join(resolvedFile.directory, `${resolvedFile.fileName}.${resolvedFile.fileExtension}`);
14
+ fs.writeFileSync(filePath, resolvedFile.content, 'utf8');
15
+ onWriteCallback(resolvedFile);
16
+ });
17
+ }
18
+
19
+ private static getTargetLocation(file: PageData, outputDir: string): PageData {
20
+ return {
21
+ ...file,
22
+ directory: path.join(outputDir, file.directory),
23
+ };
24
+ }
25
+ }
@@ -0,0 +1,53 @@
1
+ import { generateDocs } from '../../core/markdown/generate-docs';
2
+ import { FileWriter } from '../file-writer';
3
+ import { Logger } from '#utils/logger';
4
+ import { pipe } from 'fp-ts/function';
5
+ import { PageData, PostHookDocumentationBundle, SourceFile, UserDefinedMarkdownConfig } from '../../core/shared/types';
6
+ import { ReflectionError } from '../../core/markdown/reflection/error-handling';
7
+ import { referenceGuideTemplate } from '../../core/markdown/templates/reference-guide';
8
+ import * as TE from 'fp-ts/TaskEither';
9
+ import { isSkip } from '../../core/shared/utils';
10
+
11
+ export default function generate(bundles: SourceFile[], config: UserDefinedMarkdownConfig) {
12
+ return pipe(
13
+ generateDocumentationBundle(bundles, config),
14
+ TE.map((files) => writeFilesToSystem(files, config.targetDir)),
15
+ TE.mapLeft((error) => {
16
+ if (error._tag === 'HookError') {
17
+ Logger.error('Error(s) occurred while processing hooks. Please review the following issues:');
18
+ Logger.error(error.error);
19
+ return;
20
+ }
21
+
22
+ const errorMessages = [
23
+ 'Error(s) occurred while parsing files. Please review the following issues:',
24
+ ...error.errors.map(formatReflectionError),
25
+ ].join('\n');
26
+
27
+ Logger.error(errorMessages);
28
+ }),
29
+ )();
30
+ }
31
+
32
+ function generateDocumentationBundle(bundles: SourceFile[], config: UserDefinedMarkdownConfig) {
33
+ return generateDocs(bundles, {
34
+ ...config,
35
+ referenceGuideTemplate: referenceGuideTemplate,
36
+ });
37
+ }
38
+
39
+ function writeFilesToSystem(files: PostHookDocumentationBundle, outputDir: string) {
40
+ FileWriter.write(
41
+ [files.referenceGuide, ...files.docs]
42
+ // Filter out any files that should be skipped
43
+ .filter((file) => !isSkip(file)) as PageData[],
44
+ outputDir,
45
+ (file: PageData) => {
46
+ Logger.logSingle(`${file.fileName} processed.`, false, 'green', false);
47
+ },
48
+ );
49
+ }
50
+
51
+ function formatReflectionError(error: ReflectionError) {
52
+ return `Source file: ${error.file}\n${error.message}\n`;
53
+ }
@@ -0,0 +1,56 @@
1
+ import { createManifest } from '../../core/openapi/manifest-factory';
2
+ import { RawBodyParser } from '../../core/openapi/parser';
3
+ import { TypesRepository } from '../../core/openapi/types-repository';
4
+ import Transpiler from '../../core/openapi/transpiler';
5
+ import { FileWriter } from '../file-writer';
6
+ import { Logger } from '#utils/logger';
7
+ import ErrorLogger from '#utils/error-logger';
8
+ import { reflect, ReflectionResult } from '@cparra/apex-reflection';
9
+ import Manifest from '../../core/manifest';
10
+ import { PageData, SourceFile, UserDefinedOpenApiConfig } from '../../core/shared/types';
11
+ import { OpenApiDocsProcessor } from '../../core/openapi/open-api-docs-processor';
12
+
13
+ export default function openApi(fileBodies: SourceFile[], config: UserDefinedOpenApiConfig) {
14
+ const manifest = createManifest(new RawBodyParser(fileBodies), reflectionWithLogger);
15
+ TypesRepository.getInstance().populateAll(manifest.types);
16
+ const filteredTypes = filterByScopes(manifest);
17
+ const processor = new OpenApiDocsProcessor();
18
+ Transpiler.generate(filteredTypes, processor);
19
+ const generatedFiles = processor.fileBuilder().files();
20
+
21
+ FileWriter.write(generatedFiles, config.targetDir, (file: PageData) => {
22
+ Logger.logSingle(`${file.fileName} processed.`, false, 'green', false);
23
+ });
24
+
25
+ // Error logging
26
+ ErrorLogger.logErrors(filteredTypes);
27
+ }
28
+
29
+ function reflectionWithLogger(apexBundle: SourceFile): ReflectionResult {
30
+ const result = reflect(apexBundle.content);
31
+ if (result.error) {
32
+ Logger.error(`${apexBundle.filePath} - Parsing error ${result.error?.message}`);
33
+ }
34
+ return result;
35
+ }
36
+
37
+ function filterByScopes(manifest: Manifest) {
38
+ // If we are dealing with an OpenApi generator, we ignore the passed in access modifiers, and instead
39
+ // we only keep classes annotated as @RestResource
40
+ const filteredTypes = manifest.filteredByAccessModifierAndAnnotations([
41
+ 'restresource',
42
+ 'httpdelete',
43
+ 'httpget',
44
+ 'httppatch',
45
+ 'httppost',
46
+ 'httpput',
47
+ ]);
48
+ const filteredLogMessage = `Filtered ${
49
+ manifest.types.length - filteredTypes.length
50
+ } file(s), only keeping classes annotated as @RestResource.`;
51
+ Logger.clear();
52
+
53
+ Logger.logSingle(filteredLogMessage, false, 'green', false);
54
+ Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, 'green', false);
55
+ return filteredTypes;
56
+ }
package/src/cli/args.ts CHANGED
@@ -1,25 +1,19 @@
1
- import { Settings } from '../settings';
2
1
  import { cosmiconfig, CosmiconfigResult } from 'cosmiconfig';
3
2
  import * as yargs from 'yargs';
4
-
5
- type OnlyConfigurableThroughFile = {
6
- onAfterProcess: Settings['onAfterProcess'];
7
- onBeforeFileWrite: Settings['onBeforeFileWrite'];
8
- frontMatterHeader: Settings['frontMatterHeader'];
9
- };
10
-
11
- type YargsArgs = ReturnType<typeof _extractYargs>;
12
-
13
- type ConfigurableThroughFile = YargsArgs & OnlyConfigurableThroughFile;
14
-
15
- export type AllConfigurableOptions = Partial<ConfigurableThroughFile> & YargsArgs;
3
+ import { UserDefinedMarkdownConfig } from '../core/shared/types';
4
+ import { TypeScriptLoader } from 'cosmiconfig-typescript-loader';
5
+ import { markdownOptions } from './commands/markdown';
16
6
 
17
7
  /**
18
8
  * Extracts configuration from a configuration file or the package.json
19
9
  * through cosmiconfig.
20
10
  */
21
11
  function _extractConfig(): Promise<CosmiconfigResult> {
22
- return cosmiconfig('apexdocs').search();
12
+ return cosmiconfig('apexdocs', {
13
+ loaders: {
14
+ '.ts': TypeScriptLoader(),
15
+ },
16
+ }).search();
23
17
  }
24
18
 
25
19
  /**
@@ -29,108 +23,21 @@ function _extractConfig(): Promise<CosmiconfigResult> {
29
23
  function _extractYargs(config?: CosmiconfigResult) {
30
24
  return yargs
31
25
  .config(config?.config)
32
- .options({
33
- sourceDir: {
34
- type: 'string',
35
- alias: 's',
36
- demandOption: true,
37
- describe: 'The directory location which contains your apex .cls classes.',
38
- },
39
- targetDir: {
40
- type: 'string',
41
- alias: 't',
42
- default: './docs/',
43
- describe: 'The directory location where documentation will be generated to.',
44
- },
45
- recursive: {
46
- type: 'boolean',
47
- alias: 'r',
48
- default: true,
49
- describe: 'Whether .cls classes will be searched for recursively in the directory provided.',
50
- },
51
- scope: {
52
- type: 'string',
53
- array: true,
54
- alias: 'p',
55
- default: ['global'],
56
- describe:
57
- 'A list of scopes to document. Values should be separated by a space, e.g --scope global public namespaceaccessible. ' +
58
- 'Annotations are supported and should be passed lowercased and without the @ symbol, e.g. namespaceaccessible auraenabled. ' +
59
- 'Note that this setting is ignored if generating an OpenApi REST specification since that looks for classes annotated with @RestResource.',
60
- },
61
- targetGenerator: {
62
- type: 'string',
63
- alias: 'g',
64
- default: 'jekyll',
65
- choices: ['jekyll', 'docsify', 'plain-markdown', 'openapi'],
66
- describe:
67
- 'Define the static file generator for which the documents will be created. ' +
68
- 'Currently supports jekyll, docsify, plain markdown, and OpenAPI v3.1.0.',
69
- },
70
- indexOnly: {
71
- type: 'boolean',
72
- default: false,
73
- describe: 'Defines whether only the index file should be generated.',
74
- },
75
- defaultGroupName: {
76
- type: 'string',
77
- default: 'Miscellaneous',
78
- describe: 'Defines the @group name to be used when a file does not specify it.',
79
- },
80
- sanitizeHtml: {
81
- type: 'boolean',
82
- default: true,
83
- describe:
84
- 'When on, any special character within your ApexDocs is converted into its HTML code representation. ' +
85
- 'This is specially useful when generic objects are described within the docs, e.g. "List< Foo>", "Map<Foo, Bar>" ' +
86
- 'because otherwise the content within < and > would be treated as HTML tags and not shown in the output. ' +
87
- 'Content in @example blocks are never sanitized.',
88
- },
89
- openApiTitle: {
90
- type: 'string',
91
- default: 'Apex REST Api',
92
- describe: 'If using "openapi" as the target generator, this allows you to specify the OpenApi title value.',
93
- },
94
- title: {
95
- type: 'string',
96
- describe: "If this allows you to specify the title of the generated documentation's home file.",
97
- default: 'Classes',
98
- },
99
- namespace: {
100
- type: 'string',
101
- describe:
102
- 'The package namespace, if any. If this value is provided the namespace will be added as a prefix to all of the parsed files. ' +
103
- "If generating an OpenApi definition, it will be added to the file's Server Url.",
104
- },
105
- openApiFileName: {
106
- type: 'string',
107
- describe: 'If using "openapi" as the target generator, this allows you to specify the name of the output file.',
108
- default: 'openapi',
109
- },
110
- sortMembersAlphabetically: {
111
- type: 'boolean',
112
- describe: 'Whether to sort members alphabetically.',
113
- default: false,
114
- },
115
- includeMetadata: {
116
- type: 'boolean',
117
- describe: "Whether to include the file's meta.xml information: Whether it is active and and the API version",
118
- default: false,
119
- },
120
- documentationRootDir: {
121
- type: 'string',
122
- describe:
123
- 'Allows you to specify the root documentation directory where the files are being generated. This can be helpful when embedding the generated docs into an existing site so that the links are generated correctly.',
124
- },
125
- })
26
+ .command('markdown', 'Generate documentation from Apex classes as a Markdown site.', (yargs) =>
27
+ yargs.options(markdownOptions),
28
+ )
29
+ .command('openapi', 'Generate an OpenApi REST specification from Apex classes.')
30
+ .demandCommand()
126
31
  .parseSync();
127
32
  }
128
33
 
129
34
  /**
130
35
  * Combines the extracted configuration and arguments.
131
36
  */
132
- export async function extractArgs(): Promise<AllConfigurableOptions> {
37
+ export async function extractArgs(): Promise<UserDefinedMarkdownConfig> {
133
38
  const config = await _extractConfig();
134
39
  const cliArgs = _extractYargs(config);
135
- return { ...config?.config, ...cliArgs };
40
+ const commandName = cliArgs._[0];
41
+
42
+ return { ...config?.config, ...cliArgs, targetGenerator: commandName as 'markdown' | 'openapi' };
136
43
  }