@cparra/apexdocs 3.0.0 → 3.1.0

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 (261) hide show
  1. package/README.md +11 -5
  2. package/package.json +4 -1
  3. package/.github/workflows/ci.yaml +0 -22
  4. package/.github/workflows/close_stale.yml +0 -22
  5. package/.prettierrc.js +0 -7
  6. package/__mocks__/chalk.js +0 -12
  7. package/__mocks__/log-update.js +0 -6
  8. package/eslint.config.mjs +0 -10
  9. package/examples/README.md +0 -5
  10. package/examples/docsify/README.md +0 -17
  11. package/examples/docsify/apexdocs.config.ts +0 -13
  12. package/examples/docsify/classes/ASampleClass.cls +0 -57
  13. package/examples/docsify/classes/CodeControl.cls +0 -19
  14. package/examples/docsify/classes/SampleClass.cls +0 -95
  15. package/examples/docsify/classes/SampleInterface.cls +0 -17
  16. package/examples/docsify/classes/SomeDto.cls +0 -122
  17. package/examples/docsify/docs/.nojekyll +0 -0
  18. package/examples/docsify/docs/README.md +0 -25
  19. package/examples/docsify/docs/_config.yml +0 -1
  20. package/examples/docsify/docs/index.html +0 -22
  21. package/examples/docsify/docs/miscellaneous/ASampleClass.md +0 -88
  22. package/examples/docsify/docs/miscellaneous/CodeControl.md +0 -107
  23. package/examples/docsify/docs/miscellaneous/SomeDto.md +0 -244
  24. package/examples/docsify/docs/sample-classes/SampleClass.md +0 -171
  25. package/examples/docsify/docs/sample-interfaces/SampleInterface.md +0 -36
  26. package/examples/docsify/package-lock.json +0 -2459
  27. package/examples/docsify/package.json +0 -14
  28. package/examples/imported/.forceignore +0 -12
  29. package/examples/imported/README.md +0 -6
  30. package/examples/imported/config/project-scratch-def.json +0 -5
  31. package/examples/imported/docs/index.md +0 -109
  32. package/examples/imported/docs/miscellaneous/BaseClass.md +0 -13
  33. package/examples/imported/docs/miscellaneous/MultiInheritanceClass.md +0 -69
  34. package/examples/imported/docs/miscellaneous/ParentInterface.md +0 -12
  35. package/examples/imported/docs/miscellaneous/ReferencedEnum.md +0 -5
  36. package/examples/imported/docs/miscellaneous/SampleException.md +0 -21
  37. package/examples/imported/docs/miscellaneous/SampleInterface.md +0 -113
  38. package/examples/imported/docs/miscellaneous/Url.md +0 -308
  39. package/examples/imported/docs/sample-enums/SampleEnum.md +0 -33
  40. package/examples/imported/docs/samplegroup/SampleClass.md +0 -167
  41. package/examples/imported/force-app/classes/BaseClass.cls +0 -3
  42. package/examples/imported/force-app/classes/MultiInheritanceClass.cls +0 -1
  43. package/examples/imported/force-app/classes/ParentInterface.cls +0 -3
  44. package/examples/imported/force-app/classes/ReferencedEnum.cls +0 -3
  45. package/examples/imported/force-app/classes/SampleClass.cls +0 -72
  46. package/examples/imported/force-app/classes/SampleEnum.cls +0 -30
  47. package/examples/imported/force-app/classes/SampleException.cls +0 -17
  48. package/examples/imported/force-app/classes/SampleInterface.cls +0 -50
  49. package/examples/imported/force-app/classes/Url.cls +0 -196
  50. package/examples/imported/package-lock.json +0 -665
  51. package/examples/imported/package.json +0 -6
  52. package/examples/imported/scripts/process-docs.mjs +0 -16
  53. package/examples/imported/sfdx-project.json +0 -12
  54. package/examples/markdown/.forceignore +0 -12
  55. package/examples/markdown/README.md +0 -7
  56. package/examples/markdown/config/project-scratch-def.json +0 -5
  57. package/examples/markdown/docs/index.md +0 -109
  58. package/examples/markdown/docs/miscellaneous/BaseClass.md +0 -16
  59. package/examples/markdown/docs/miscellaneous/MultiInheritanceClass.md +0 -72
  60. package/examples/markdown/docs/miscellaneous/ParentInterface.md +0 -15
  61. package/examples/markdown/docs/miscellaneous/ReferencedEnum.md +0 -8
  62. package/examples/markdown/docs/miscellaneous/SampleException.md +0 -24
  63. package/examples/markdown/docs/miscellaneous/SampleInterface.md +0 -116
  64. package/examples/markdown/docs/miscellaneous/Url.md +0 -311
  65. package/examples/markdown/docs/sample-enums/SampleEnum.md +0 -36
  66. package/examples/markdown/docs/samplegroup/SampleClass.md +0 -170
  67. package/examples/markdown/force-app/classes/BaseClass.cls +0 -3
  68. package/examples/markdown/force-app/classes/MultiInheritanceClass.cls +0 -1
  69. package/examples/markdown/force-app/classes/ParentInterface.cls +0 -3
  70. package/examples/markdown/force-app/classes/ReferencedEnum.cls +0 -3
  71. package/examples/markdown/force-app/classes/SampleClass.cls +0 -72
  72. package/examples/markdown/force-app/classes/SampleEnum.cls +0 -30
  73. package/examples/markdown/force-app/classes/SampleException.cls +0 -17
  74. package/examples/markdown/force-app/classes/SampleInterface.cls +0 -50
  75. package/examples/markdown/force-app/classes/Url.cls +0 -196
  76. package/examples/markdown/package-lock.json +0 -665
  77. package/examples/markdown/package.json +0 -20
  78. package/examples/markdown/sfdx-project.json +0 -12
  79. package/examples/markdown-jsconfig/.forceignore +0 -12
  80. package/examples/markdown-jsconfig/README.md +0 -9
  81. package/examples/markdown-jsconfig/apexdocs.config.mjs +0 -22
  82. package/examples/markdown-jsconfig/config/project-scratch-def.json +0 -5
  83. package/examples/markdown-jsconfig/docs/index.md +0 -12
  84. package/examples/markdown-jsconfig/docs/miscellaneous/Url.md +0 -315
  85. package/examples/markdown-jsconfig/force-app/classes/Url.cls +0 -196
  86. package/examples/markdown-jsconfig/package-lock.json +0 -665
  87. package/examples/markdown-jsconfig/package.json +0 -15
  88. package/examples/markdown-jsconfig/sfdx-project.json +0 -12
  89. package/examples/open-api/README.md +0 -5
  90. package/examples/open-api/config/project-scratch-def.json +0 -13
  91. package/examples/open-api/docs/openapi.json +0 -14
  92. package/examples/open-api/force-app/main/default/classes/ChildClass.cls +0 -42
  93. package/examples/open-api/force-app/main/default/classes/SampleClass.cls +0 -167
  94. package/examples/open-api/force-app/main/default/restapi/SampleRestResource.cls +0 -195
  95. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceToSkip.cls +0 -35
  96. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithInnerClass.cls +0 -24
  97. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithoutApexDocs.cls +0 -15
  98. package/examples/open-api/force-app/main/default/restapi/references/Reference1.cls +0 -9
  99. package/examples/open-api/force-app/main/default/restapi/references/Reference2.cls +0 -9
  100. package/examples/open-api/force-app/main/default/restapi/references/Reference3.cls +0 -3
  101. package/examples/open-api/force-app/main/default/restapi/references/Reference4.cls +0 -3
  102. package/examples/open-api/force-app/main/default/restapi/references/Reference5.cls +0 -3
  103. package/examples/open-api/force-app/main/default/restapi/references/Reference6.cls +0 -6
  104. package/examples/open-api/force-app/main/default/restapi/references/Reference7.cls +0 -3
  105. package/examples/open-api/package-lock.json +0 -724
  106. package/examples/open-api/package.json +0 -20
  107. package/examples/open-api/sfdx-project.json +0 -12
  108. package/examples/vitepress/.forceignore +0 -12
  109. package/examples/vitepress/README.md +0 -25
  110. package/examples/vitepress/apexdocs.config.ts +0 -113
  111. package/examples/vitepress/config/project-scratch-def.json +0 -13
  112. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js +0 -259
  113. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js.map +0 -7
  114. package/examples/vitepress/docs/.vitepress/cache/deps/_metadata.json +0 -40
  115. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js +0 -11474
  116. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js.map +0 -7
  117. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js +0 -9172
  118. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js.map +0 -7
  119. package/examples/vitepress/docs/.vitepress/cache/deps/package.json +0 -3
  120. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4339
  121. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  122. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -567
  123. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  124. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js +0 -323
  125. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js.map +0 -7
  126. package/examples/vitepress/docs/.vitepress/config.mts +0 -21
  127. package/examples/vitepress/docs/.vitepress/sidebar.json +0 -119
  128. package/examples/vitepress/docs/api-examples.md +0 -49
  129. package/examples/vitepress/docs/index-frontmatter.md +0 -16
  130. package/examples/vitepress/docs/index.md +0 -56
  131. package/examples/vitepress/docs/markdown-examples.md +0 -85
  132. package/examples/vitepress/docs/miscellaneous/BaseClass.md +0 -20
  133. package/examples/vitepress/docs/miscellaneous/MultiInheritanceClass.md +0 -76
  134. package/examples/vitepress/docs/miscellaneous/ParentInterface.md +0 -19
  135. package/examples/vitepress/docs/miscellaneous/ReferencedEnum.md +0 -15
  136. package/examples/vitepress/docs/miscellaneous/SampleException.md +0 -28
  137. package/examples/vitepress/docs/miscellaneous/SampleInterface.md +0 -116
  138. package/examples/vitepress/docs/miscellaneous/Url.md +0 -317
  139. package/examples/vitepress/docs/sample-enums/SampleEnum.md +0 -40
  140. package/examples/vitepress/docs/samplegroup/SampleClass.md +0 -174
  141. package/examples/vitepress/force-app/main/default/classes/BaseClass.cls +0 -3
  142. package/examples/vitepress/force-app/main/default/classes/MultiInheritanceClass.cls +0 -1
  143. package/examples/vitepress/force-app/main/default/classes/ParentInterface.cls +0 -3
  144. package/examples/vitepress/force-app/main/default/classes/ReferencedEnum.cls +0 -5
  145. package/examples/vitepress/force-app/main/default/classes/Url.cls +0 -198
  146. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleClass.cls +0 -73
  147. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleEnum.cls +0 -30
  148. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleException.cls +0 -17
  149. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleInterface.cls +0 -46
  150. package/examples/vitepress/package-lock.json +0 -2574
  151. package/examples/vitepress/package.json +0 -18
  152. package/examples/vitepress/sfdx-project.json +0 -12
  153. package/jest.config.js +0 -10
  154. package/jest.d.ts +0 -7
  155. package/src/application/Apexdocs.ts +0 -69
  156. package/src/application/__tests__/apex-file-reader.spec.ts +0 -128
  157. package/src/application/apex-file-reader.ts +0 -56
  158. package/src/application/file-system.ts +0 -69
  159. package/src/application/file-writer.ts +0 -43
  160. package/src/application/generators/markdown.ts +0 -45
  161. package/src/application/generators/openapi.ts +0 -75
  162. package/src/cli/args.ts +0 -55
  163. package/src/cli/commands/markdown.ts +0 -56
  164. package/src/cli/commands/openapi.ts +0 -36
  165. package/src/cli/generate.ts +0 -32
  166. package/src/core/__test__/manifest.spec.ts +0 -16
  167. package/src/core/manifest.ts +0 -90
  168. package/src/core/markdown/__test__/expect-extensions.ts +0 -32
  169. package/src/core/markdown/__test__/generating-class-docs.spec.ts +0 -362
  170. package/src/core/markdown/__test__/generating-docs.spec.ts +0 -378
  171. package/src/core/markdown/__test__/generating-enum-docs.spec.ts +0 -61
  172. package/src/core/markdown/__test__/generating-interface-docs.spec.ts +0 -169
  173. package/src/core/markdown/__test__/generating-reference-guide.spec.ts +0 -196
  174. package/src/core/markdown/__test__/inheritance-chain.test.ts +0 -54
  175. package/src/core/markdown/__test__/test-helpers.ts +0 -25
  176. package/src/core/markdown/adapters/__tests__/documentables.spec.ts +0 -109
  177. package/src/core/markdown/adapters/__tests__/interface-adapter.spec.ts +0 -150
  178. package/src/core/markdown/adapters/__tests__/link-generator.spec.ts +0 -130
  179. package/src/core/markdown/adapters/__tests__/references.spec.ts +0 -136
  180. package/src/core/markdown/adapters/apex-types.ts +0 -238
  181. package/src/core/markdown/adapters/documentables.ts +0 -115
  182. package/src/core/markdown/adapters/fields-and-properties.ts +0 -45
  183. package/src/core/markdown/adapters/generate-link.ts +0 -82
  184. package/src/core/markdown/adapters/inline.ts +0 -143
  185. package/src/core/markdown/adapters/methods-and-constructors.ts +0 -133
  186. package/src/core/markdown/adapters/reference-guide.ts +0 -37
  187. package/src/core/markdown/adapters/renderable-bundle.ts +0 -61
  188. package/src/core/markdown/adapters/renderable-to-page-data.ts +0 -91
  189. package/src/core/markdown/adapters/type-utils.ts +0 -13
  190. package/src/core/markdown/adapters/types.d.ts +0 -180
  191. package/src/core/markdown/generate-docs.ts +0 -210
  192. package/src/core/markdown/reflection/__test__/filter-scope.spec.ts +0 -290
  193. package/src/core/markdown/reflection/__test__/helpers.ts +0 -18
  194. package/src/core/markdown/reflection/__test__/remove-excluded-tags.spec.ts +0 -200
  195. package/src/core/markdown/reflection/filter-scope.ts +0 -13
  196. package/src/core/markdown/reflection/inheritance-chain-expanion.ts +0 -22
  197. package/src/core/markdown/reflection/inheritance-chain.ts +0 -23
  198. package/src/core/markdown/reflection/inherited-member-expansion.ts +0 -105
  199. package/src/core/markdown/reflection/reflect-source.ts +0 -123
  200. package/src/core/markdown/reflection/remove-excluded-tags.ts +0 -168
  201. package/src/core/markdown/reflection/sort-types-and-members.ts +0 -61
  202. package/src/core/markdown/templates/class-template.ts +0 -75
  203. package/src/core/markdown/templates/constructors-partial-template.ts +0 -32
  204. package/src/core/markdown/templates/documentable-partial-template.ts +0 -26
  205. package/src/core/markdown/templates/enum-template.ts +0 -12
  206. package/src/core/markdown/templates/fieldsPartialTemplate.ts +0 -23
  207. package/src/core/markdown/templates/grouped-members-partial-template.ts +0 -6
  208. package/src/core/markdown/templates/hookable.ts +0 -7
  209. package/src/core/markdown/templates/interface-template.ts +0 -16
  210. package/src/core/markdown/templates/methods-partial-template.ts +0 -43
  211. package/src/core/markdown/templates/reference-guide.ts +0 -14
  212. package/src/core/markdown/templates/template.ts +0 -114
  213. package/src/core/markdown/templates/type-doc-partial.ts +0 -27
  214. package/src/core/markdown/utils.ts +0 -3
  215. package/src/core/openApiSettings.ts +0 -41
  216. package/src/core/openapi/__tests__/manifest-factory.spec.ts +0 -16
  217. package/src/core/openapi/__tests__/open-api-docs-processor.spec.ts +0 -59
  218. package/src/core/openapi/__tests__/open-api.spec.ts +0 -22
  219. package/src/core/openapi/apex-doc-types.ts +0 -26
  220. package/src/core/openapi/apex-type-wrappers/ClassMirrorWrapper.ts +0 -12
  221. package/src/core/openapi/apex-type-wrappers/MethodMirrorWrapper.ts +0 -11
  222. package/src/core/openapi/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +0 -15
  223. package/src/core/openapi/file-container.ts +0 -13
  224. package/src/core/openapi/manifest-factory.ts +0 -16
  225. package/src/core/openapi/open-api-docs-processor.ts +0 -93
  226. package/src/core/openapi/open-api-types.ts +0 -119
  227. package/src/core/openapi/open-api.ts +0 -45
  228. package/src/core/openapi/openapi-type-file.ts +0 -12
  229. package/src/core/openapi/parser.ts +0 -163
  230. package/src/core/openapi/parsers/Builder.ts +0 -40
  231. package/src/core/openapi/parsers/MethodParser.ts +0 -249
  232. package/src/core/openapi/parsers/ParameterObjectBuilder.ts +0 -13
  233. package/src/core/openapi/parsers/ReferenceBuilder.ts +0 -299
  234. package/src/core/openapi/parsers/RequestBodyBuilder.ts +0 -19
  235. package/src/core/openapi/parsers/ResponsesBuilder.ts +0 -21
  236. package/src/core/openapi/parsers/__tests__/MethodParser.spec.ts +0 -44
  237. package/src/core/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +0 -68
  238. package/src/core/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +0 -751
  239. package/src/core/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +0 -64
  240. package/src/core/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +0 -55
  241. package/src/core/openapi/transpiler.ts +0 -17
  242. package/src/core/openapi/types-repository.ts +0 -54
  243. package/src/core/parse-apex-metadata.ts +0 -30
  244. package/src/core/shared/types.d.ts +0 -150
  245. package/src/core/shared/utils.ts +0 -5
  246. package/src/defaults.ts +0 -21
  247. package/src/index.ts +0 -110
  248. package/src/test-helpers/AnnotationBuilder.ts +0 -29
  249. package/src/test-helpers/ClassMirrorBuilder.ts +0 -69
  250. package/src/test-helpers/DocCommentAnnotationBuilder.ts +0 -24
  251. package/src/test-helpers/DocCommentBuilder.ts +0 -36
  252. package/src/test-helpers/FieldMirrorBuilder.ts +0 -59
  253. package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -39
  254. package/src/test-helpers/MethodMirrorBuilder.ts +0 -77
  255. package/src/test-helpers/SettingsBuilder.ts +0 -17
  256. package/src/util/error-logger.ts +0 -92
  257. package/src/util/fp.ts +0 -3
  258. package/src/util/logger.ts +0 -51
  259. package/src/util/string-utils.ts +0 -7
  260. package/tsconfig.json +0 -25
  261. package/tslint.json +0 -6
@@ -1,210 +0,0 @@
1
- import { pipe } from 'fp-ts/function';
2
- import * as TE from 'fp-ts/TaskEither';
3
- import yaml from 'js-yaml';
4
-
5
- import { apply } from '#utils/fp';
6
- import {
7
- DocPageData,
8
- DocumentationBundle,
9
- Frontmatter,
10
- PostHookDocumentationBundle,
11
- ReferenceGuidePageData,
12
- UnparsedSourceFile,
13
- TransformDocPage,
14
- TransformDocs,
15
- TransformReferenceGuide,
16
- UserDefinedMarkdownConfig,
17
- DocPageReference,
18
- TransformReference,
19
- ParsedFile,
20
- } from '../shared/types';
21
- import { parsedFilesToRenderableBundle } from './adapters/renderable-bundle';
22
- import { reflectBundles } from './reflection/reflect-source';
23
- import { addInheritanceChainToTypes } from './reflection/inheritance-chain-expanion';
24
- import { addInheritedMembersToTypes } from './reflection/inherited-member-expansion';
25
- import { convertToDocumentationBundle } from './adapters/renderable-to-page-data';
26
- import { filterScope } from './reflection/filter-scope';
27
- import { Template } from './templates/template';
28
- import { hookableTemplate } from './templates/hookable';
29
- import { sortTypesAndMembers } from './reflection/sort-types-and-members';
30
- import { isSkip } from '../shared/utils';
31
- import { parsedFilesToReferenceGuide } from './adapters/reference-guide';
32
- import { removeExcludedTags } from './reflection/remove-excluded-tags';
33
-
34
- export type MarkdownGeneratorConfig = Omit<
35
- UserDefinedMarkdownConfig,
36
- 'sourceDir' | 'targetGenerator' | 'includeMetadata'
37
- > & {
38
- referenceGuideTemplate: string;
39
- };
40
-
41
- export class HookError {
42
- readonly _tag = 'HookError';
43
-
44
- constructor(public error: unknown) {}
45
- }
46
-
47
- export function generateDocs(apexBundles: UnparsedSourceFile[], config: MarkdownGeneratorConfig) {
48
- const filterOutOfScope = apply(filterScope, config.scope);
49
- const convertToReferences = apply(parsedFilesToReferenceGuide, config);
50
- const convertToRenderableBundle = apply(parsedFilesToRenderableBundle, config);
51
- const convertToDocumentationBundleForTemplate = apply(
52
- convertToDocumentationBundle,
53
- config.referenceGuideTitle,
54
- config.referenceGuideTemplate,
55
- );
56
- const sort = apply(sortTypesAndMembers, config.sortAlphabetically);
57
- const removeExcluded = apply(removeExcludedTags, config.excludeTags);
58
-
59
- return pipe(
60
- apexBundles,
61
- reflectBundles,
62
- TE.map(filterOutOfScope),
63
- TE.map(addInheritedMembersToTypes),
64
- TE.map(addInheritanceChainToTypes),
65
- TE.map(sort),
66
- TE.map(removeExcluded),
67
- TE.bindTo('parsedFiles'),
68
- TE.bind('references', ({ parsedFiles }) => TE.right(convertToReferences(parsedFiles))),
69
- TE.flatMap(({ parsedFiles, references }) => transformReferenceHook(config)({ references, parsedFiles })),
70
- TE.map(({ parsedFiles, references }) => convertToRenderableBundle(parsedFiles, references)),
71
- TE.map(convertToDocumentationBundleForTemplate),
72
- TE.flatMap(transformDocumentationBundleHook(config)),
73
- TE.map(postHookCompile),
74
- );
75
- }
76
-
77
- function transformReferenceHook(config: MarkdownGeneratorConfig) {
78
- async function _execute(
79
- references: Record<string, DocPageReference>,
80
- parsedFiles: ParsedFile[],
81
- transformReference?: TransformReference | undefined,
82
- ): Promise<{
83
- references: Record<string, DocPageReference>;
84
- parsedFiles: ParsedFile[];
85
- }> {
86
- return {
87
- references: await execTransformReferenceHook(Object.values(references), transformReference),
88
- parsedFiles,
89
- };
90
- }
91
-
92
- return ({ references, parsedFiles }: { references: Record<string, DocPageReference>; parsedFiles: ParsedFile[] }) =>
93
- TE.tryCatch(
94
- () => _execute(references, parsedFiles, config.transformReference),
95
- (error) => new HookError(error),
96
- );
97
- }
98
-
99
- function transformDocumentationBundleHook(config: MarkdownGeneratorConfig) {
100
- return (bundle: DocumentationBundle) =>
101
- TE.tryCatch(
102
- () => documentationBundleHook(bundle, config),
103
- (error) => new HookError(error),
104
- );
105
- }
106
-
107
- // Configurable hooks
108
- function passThroughHook<T>(value: T): T {
109
- return value;
110
- }
111
-
112
- const execTransformReferenceHook = async (
113
- references: DocPageReference[],
114
- hook: TransformReference = passThroughHook,
115
- ): Promise<Record<string, DocPageReference>> => {
116
- const hooked = references.map<Promise<DocPageReference>>(async (reference) => {
117
- const hookedResult = await hook(reference);
118
- return {
119
- ...reference,
120
- ...hookedResult,
121
- };
122
- });
123
- const awaited = await Promise.all(hooked);
124
-
125
- return awaited.reduce<Record<string, DocPageReference>>((acc, reference) => {
126
- acc[reference.source.name] = reference;
127
- return acc;
128
- }, {});
129
- };
130
-
131
- const documentationBundleHook = async (
132
- bundle: DocumentationBundle,
133
- config: MarkdownGeneratorConfig,
134
- ): Promise<PostHookDocumentationBundle> => {
135
- return {
136
- referenceGuide: await transformReferenceGuide(bundle.referenceGuide, config.transformReferenceGuide),
137
- docs: await transformDocs(bundle.docs, config.transformDocs, config.transformDocPage),
138
- };
139
- };
140
-
141
- const transformReferenceGuide = async (
142
- referenceGuide: ReferenceGuidePageData,
143
- hook: TransformReferenceGuide = passThroughHook,
144
- ) => {
145
- const result = await hook(referenceGuide);
146
- if (isSkip(result)) {
147
- return result;
148
- }
149
-
150
- return {
151
- ...referenceGuide,
152
- ...(await hook(referenceGuide)),
153
- };
154
- };
155
-
156
- const transformDocs = async (
157
- docs: DocPageData[],
158
- transformDocsHook: TransformDocs = passThroughHook,
159
- transformDocPageHook: TransformDocPage = passThroughHook,
160
- ): Promise<Awaited<DocPageData[]>> => {
161
- const transformed = await transformDocsHook(docs);
162
- return Promise.all(transformed.map((doc) => transformDocPage(doc, transformDocPageHook)));
163
- };
164
-
165
- const transformDocPage = async (doc: DocPageData, hook: TransformDocPage = passThroughHook) => {
166
- return {
167
- ...doc,
168
- ...(await hook(doc)),
169
- };
170
- };
171
-
172
- function postHookCompile(bundle: PostHookDocumentationBundle) {
173
- return {
174
- referenceGuide: isSkip(bundle.referenceGuide)
175
- ? bundle.referenceGuide
176
- : {
177
- ...bundle.referenceGuide,
178
- content: Template.getInstance().compile({
179
- source: {
180
- frontmatter: toFrontmatterString(bundle.referenceGuide.frontmatter),
181
- content: bundle.referenceGuide.content,
182
- },
183
- template: hookableTemplate,
184
- }),
185
- },
186
- docs: bundle.docs.map((doc) => ({
187
- ...doc,
188
- content: Template.getInstance().compile({
189
- source: {
190
- frontmatter: toFrontmatterString(doc.frontmatter),
191
- content: doc.content,
192
- },
193
- template: hookableTemplate,
194
- }),
195
- })),
196
- };
197
- }
198
-
199
- function toFrontmatterString(frontmatter: Frontmatter): string {
200
- if (typeof frontmatter === 'string') {
201
- return frontmatter;
202
- }
203
-
204
- if (!frontmatter) {
205
- return '';
206
- }
207
-
208
- const yamlString = yaml.dump(frontmatter);
209
- return `---\n${yamlString}---\n`;
210
- }
@@ -1,290 +0,0 @@
1
- import { ClassMirror, EnumMirror, InterfaceMirror } from '@cparra/apex-reflection';
2
- import { filterScope } from '../filter-scope';
3
- import { parsedFileFromRawString } from './helpers';
4
-
5
- describe('When filtering scope', () => {
6
- it('filters out files with the @ignore annotation', () => {
7
- const properties: [string, number][] = [
8
- [
9
- `
10
- /**
11
- * @ignore
12
- */
13
- global class MyClass {}
14
- `,
15
- 0,
16
- ],
17
- ['global class MyClass {}', 1],
18
- ];
19
-
20
- for (const [input, expected] of properties) {
21
- const parsedFile = parsedFileFromRawString(input);
22
-
23
- const result = filterScope(['global'], [parsedFile]);
24
-
25
- expect(result).toHaveLength(expected);
26
- }
27
- });
28
-
29
- describe('when scoping a class', () => {
30
- it('filters out methods tagged with @ignore', () => {
31
- const properties: [string, number][] = [
32
- [
33
- `
34
- global class MyClass {
35
- /**
36
- * @ignore
37
- */
38
- global void myMethod() {}
39
- }
40
- `,
41
- 0,
42
- ],
43
- [
44
- `
45
- global class MyClass {
46
- global void myMethod() {}
47
- }
48
- `,
49
- 1,
50
- ],
51
- ];
52
-
53
- for (const [input, expected] of properties) {
54
- const parsedFile = parsedFileFromRawString(input);
55
-
56
- const result = filterScope(['global'], [parsedFile]);
57
-
58
- expect((result[0].type as ClassMirror).methods).toHaveLength(expected);
59
- }
60
- });
61
-
62
- it('filters out properties tagged with @ignore', () => {
63
- const properties: [string, number][] = [
64
- [
65
- `
66
- global class MyClass {
67
- /**
68
- * @ignore
69
- */
70
- global Integer myProperty { get; set; }
71
- }
72
- `,
73
- 0,
74
- ],
75
- [
76
- `
77
- global class MyClass {
78
- global Integer myProperty { get; set; }
79
- }
80
- `,
81
- 1,
82
- ],
83
- ];
84
-
85
- for (const [input, expected] of properties) {
86
- const parsedFile = parsedFileFromRawString(input);
87
-
88
- const result = filterScope(['global'], [parsedFile]);
89
-
90
- expect((result[0].type as ClassMirror).properties).toHaveLength(expected);
91
- }
92
- });
93
-
94
- it('filters out fields tagged with @ignore', () => {
95
- const properties: [string, number][] = [
96
- [
97
- `
98
- global class MyClass {
99
- /**
100
- * @ignore
101
- */
102
- global Integer myField;
103
- }
104
- `,
105
- 0,
106
- ],
107
- [
108
- `
109
- global class MyClass {
110
- global Integer myField;
111
- }
112
- `,
113
- 1,
114
- ],
115
- ];
116
-
117
- for (const [input, expected] of properties) {
118
- const parsedFile = parsedFileFromRawString(input);
119
-
120
- const result = filterScope(['global'], [parsedFile]);
121
-
122
- expect((result[0].type as ClassMirror).fields).toHaveLength(expected);
123
- }
124
- });
125
-
126
- it('filters out inner classes tagged with @ignore', () => {
127
- const properties: [string, number][] = [
128
- [
129
- `
130
- global class MyClass {
131
- /**
132
- * @ignore
133
- */
134
- global class InnerClass {}
135
- }
136
- `,
137
- 0,
138
- ],
139
- [
140
- `
141
- global class MyClass {
142
- global class InnerClass {}
143
- }
144
- `,
145
- 1,
146
- ],
147
- ];
148
-
149
- for (const [input, expected] of properties) {
150
- const parsedFile = parsedFileFromRawString(input);
151
-
152
- const result = filterScope(['global'], [parsedFile]);
153
-
154
- expect((result[0].type as ClassMirror).classes).toHaveLength(expected);
155
- }
156
- });
157
-
158
- it('filters out inner interfaces tagged with @ignore', () => {
159
- const properties: [string, number][] = [
160
- [
161
- `
162
- global class MyClass {
163
- /**
164
- * @ignore
165
- */
166
- global interface InnerInterface {}
167
- }
168
- `,
169
- 0,
170
- ],
171
- [
172
- `
173
- global class MyClass {
174
- global interface InnerInterface {}
175
- }
176
- `,
177
- 1,
178
- ],
179
- ];
180
-
181
- for (const [input, expected] of properties) {
182
- const parsedFile = parsedFileFromRawString(input);
183
-
184
- const result = filterScope(['global'], [parsedFile]);
185
-
186
- expect((result[0].type as ClassMirror).interfaces).toHaveLength(expected);
187
- }
188
- });
189
-
190
- it('filters out inner enums tagged with @ignore', () => {
191
- const properties: [string, number][] = [
192
- [
193
- `
194
- global class MyClass {
195
- /**
196
- * @ignore
197
- */
198
- global enum InnerEnum {}
199
- }
200
- `,
201
- 0,
202
- ],
203
- [
204
- `
205
- global class MyClass {
206
- global enum InnerEnum {}
207
- }
208
- `,
209
- 1,
210
- ],
211
- ];
212
-
213
- for (const [input, expected] of properties) {
214
- const parsedFile = parsedFileFromRawString(input);
215
-
216
- const result = filterScope(['global'], [parsedFile]);
217
-
218
- expect((result[0].type as ClassMirror).enums).toHaveLength(expected);
219
- }
220
- });
221
- });
222
-
223
- describe('when scoping an interface', () => {
224
- it('filters out methods tagged with @ignore', () => {
225
- const properties: [string, number][] = [
226
- [
227
- `
228
- global interface MyInterface {
229
- /**
230
- * @ignore
231
- */
232
- void myMethod();
233
- }
234
- `,
235
- 0,
236
- ],
237
- [
238
- `
239
- global interface MyInterface {
240
- void myMethod();
241
- }
242
- `,
243
- 1,
244
- ],
245
- ];
246
-
247
- for (const [input, expected] of properties) {
248
- const parsedFile = parsedFileFromRawString(input);
249
-
250
- const result = filterScope(['global'], [parsedFile]);
251
-
252
- expect((result[0].type as InterfaceMirror).methods).toHaveLength(expected);
253
- }
254
- });
255
- });
256
-
257
- describe('when scoping an enum', () => {
258
- it('never filters out enum values, even if tagged with @ignore', () => {
259
- const properties: [string, number][] = [
260
- [
261
- `
262
- global enum MyEnum {
263
- /**
264
- * @ignore
265
- */
266
- VALUE
267
- }
268
- `,
269
- 1,
270
- ],
271
- [
272
- `
273
- global enum MyEnum {
274
- VALUE
275
- }
276
- `,
277
- 1,
278
- ],
279
- ];
280
-
281
- for (const [input, expected] of properties) {
282
- const parsedFile = parsedFileFromRawString(input);
283
-
284
- const result = filterScope(['global'], [parsedFile]);
285
-
286
- expect((result[0].type as EnumMirror).values).toHaveLength(expected);
287
- }
288
- });
289
- });
290
- });
@@ -1,18 +0,0 @@
1
- import { ParsedFile } from '../../../shared/types';
2
- import { reflect } from '@cparra/apex-reflection';
3
-
4
- export function parsedFileFromRawString(raw: string): ParsedFile {
5
- const { error, typeMirror } = reflect(raw);
6
- if (error) {
7
- throw new Error(error.message);
8
- }
9
-
10
- return {
11
- source: {
12
- filePath: 'test.cls',
13
- name: typeMirror!.name,
14
- type: typeMirror!.type_name,
15
- },
16
- type: typeMirror!,
17
- };
18
- }
@@ -1,200 +0,0 @@
1
- import { parsedFileFromRawString } from './helpers';
2
- import { removeExcludedTags } from '../remove-excluded-tags';
3
- import { ClassMirror, InterfaceMirror } from '@cparra/apex-reflection';
4
-
5
- describe('when removing excluded tags', () => {
6
- describe('from any type', () => {
7
- it('removes annotations', () => {
8
- const tagsToExclude = ['group'];
9
- const content = `
10
- /**
11
- * @group MyGroup
12
- * @custom myCustomTag
13
- */
14
- global class MyClass {}
15
- `;
16
- const parsedFile = parsedFileFromRawString(content);
17
-
18
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
19
-
20
- expect(result[0].type.docComment?.annotations).toHaveLength(1);
21
- expect(result[0].type.docComment?.annotations[0].name).toBe('custom');
22
- });
23
-
24
- it('removes example annotations', () => {
25
- const tagsToExclude = ['example'];
26
- const content = `
27
- /**
28
- * @example
29
- * This is my example
30
- * public void myMethod() {}
31
- */
32
- global class MyClass {}
33
- `;
34
- const parsedFile = parsedFileFromRawString(content);
35
-
36
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
37
-
38
- expect(result[0].type.docComment?.exampleAnnotation).toBeNull();
39
- });
40
-
41
- it('removes params annotations', () => {
42
- const tagsToExclude = ['param'];
43
- const content = `
44
- /**
45
- * @param myParam
46
- * public void myMethod() {}
47
- */
48
- global class MyClass {}
49
- `;
50
- const parsedFile = parsedFileFromRawString(content);
51
-
52
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
53
-
54
- expect(result[0].type.docComment?.paramAnnotations).toHaveLength(0);
55
- });
56
-
57
- it('removes the return annotation', () => {
58
- const tagsToExclude = ['return'];
59
- const content = `
60
- /**
61
- * @return myReturn
62
- * public void myMethod() {}
63
- */
64
- global class MyClass {}
65
- `;
66
- const parsedFile = parsedFileFromRawString(content);
67
-
68
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
69
-
70
- expect(result[0].type.docComment?.returnAnnotation).toBeNull();
71
- });
72
-
73
- it('removes the throws annotations', () => {
74
- const tagsToExclude = ['throws'];
75
- const content = `
76
- /**
77
- * @throws MyException
78
- * public void myMethod() {}
79
- */
80
- global class MyClass {}
81
- `;
82
- const parsedFile = parsedFileFromRawString(content);
83
-
84
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
85
-
86
- expect(result[0].type.docComment?.throwsAnnotations).toHaveLength(0);
87
- });
88
-
89
- it('removes the exception annotations', () => {
90
- const tagsToExclude = ['exception'];
91
- const content = `
92
- /**
93
- * @exception MyException
94
- * public void myMethod() {}
95
- */
96
- global class MyClass {}
97
- `;
98
- const parsedFile = parsedFileFromRawString(content);
99
-
100
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
101
-
102
- expect(result[0].type.docComment?.throwsAnnotations).toHaveLength(0);
103
- });
104
-
105
- it('removes descriptions', () => {
106
- const tagsToExclude = ['description'];
107
- const content = `
108
- /**
109
- * @description This is my description
110
- * public void myMethod() {}
111
- */
112
- global class MyClass {}
113
- `;
114
- const parsedFile = parsedFileFromRawString(content);
115
-
116
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
117
-
118
- expect(result[0].type.docComment?.description).toBe('');
119
- expect(result[0].type.docComment?.descriptionLines).toHaveLength(0);
120
- });
121
- });
122
-
123
- describe('from an interface', () => {
124
- it('removes annotations from methods', () => {
125
- const tagsToExclude = ['throws'];
126
- const content = `
127
- global interface MyInterface {
128
- /**
129
- * @throws MyException
130
- */
131
- void myMethod();
132
- }
133
- `;
134
- const parsedFile = parsedFileFromRawString(content);
135
-
136
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
137
-
138
- expect((result[0].type as InterfaceMirror).methods[0].docComment?.throwsAnnotations).toHaveLength(0);
139
- });
140
- });
141
-
142
- describe('from a class', () => {
143
- it('removes annotations from members', () => {
144
- const tagsToExclude = ['throws'];
145
- const content = `
146
- global class MyClass {
147
- /**
148
- * @throws MyException
149
- */
150
- String myProperty {get; set;}
151
-
152
- /**
153
- * @throws MyException
154
- */
155
- String myField;
156
- /**
157
- * @throws MyException
158
- */
159
- void myMethod() {}
160
-
161
- /**
162
- * @throws MyException
163
- */
164
- MyClass() {}
165
-
166
- /**
167
- * @throws MyException
168
- */
169
- public enum MyEnum {}
170
-
171
- /**
172
- * @throws MyException
173
- */
174
- interface MyInnerInterface {}
175
-
176
- /**
177
- * @throws MyException
178
- */
179
- class MyInnerClass {}
180
- }
181
- `;
182
- const parsedFile = parsedFileFromRawString(content);
183
-
184
- const result = removeExcludedTags(tagsToExclude, [parsedFile]);
185
-
186
- const classMirror = result[0].type as ClassMirror;
187
- expect(classMirror.methods[0].docComment?.throwsAnnotations).toHaveLength(0);
188
- expect(classMirror.properties[0].docComment?.throwsAnnotations).toHaveLength(0);
189
- expect(classMirror.fields[0].docComment?.throwsAnnotations).toHaveLength(0);
190
- expect(classMirror.constructors[0].docComment?.throwsAnnotations).toHaveLength(0);
191
- expect(classMirror.enums[0].docComment?.throwsAnnotations).toHaveLength(0);
192
- expect(classMirror.interfaces[0].docComment?.throwsAnnotations).toHaveLength(0);
193
- expect(classMirror.classes[0].docComment?.throwsAnnotations).toHaveLength(0);
194
- });
195
- });
196
- });
197
-
198
- // fields
199
- // inner interfaces
200
- // inner classes