@cparra/apexdocs 3.0.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/README.md +11 -5
  2. package/dist/cli/generate.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/logger-BATX7-be.js +3278 -0
  5. package/package.json +4 -1
  6. package/.github/workflows/ci.yaml +0 -22
  7. package/.github/workflows/close_stale.yml +0 -22
  8. package/.prettierrc.js +0 -7
  9. package/__mocks__/chalk.js +0 -12
  10. package/__mocks__/log-update.js +0 -6
  11. package/eslint.config.mjs +0 -10
  12. package/examples/README.md +0 -5
  13. package/examples/docsify/README.md +0 -17
  14. package/examples/docsify/apexdocs.config.ts +0 -13
  15. package/examples/docsify/classes/ASampleClass.cls +0 -57
  16. package/examples/docsify/classes/CodeControl.cls +0 -19
  17. package/examples/docsify/classes/SampleClass.cls +0 -95
  18. package/examples/docsify/classes/SampleInterface.cls +0 -17
  19. package/examples/docsify/classes/SomeDto.cls +0 -122
  20. package/examples/docsify/docs/.nojekyll +0 -0
  21. package/examples/docsify/docs/README.md +0 -25
  22. package/examples/docsify/docs/_config.yml +0 -1
  23. package/examples/docsify/docs/index.html +0 -22
  24. package/examples/docsify/docs/miscellaneous/ASampleClass.md +0 -88
  25. package/examples/docsify/docs/miscellaneous/CodeControl.md +0 -107
  26. package/examples/docsify/docs/miscellaneous/SomeDto.md +0 -244
  27. package/examples/docsify/docs/sample-classes/SampleClass.md +0 -171
  28. package/examples/docsify/docs/sample-interfaces/SampleInterface.md +0 -36
  29. package/examples/docsify/package-lock.json +0 -2459
  30. package/examples/docsify/package.json +0 -14
  31. package/examples/imported/.forceignore +0 -12
  32. package/examples/imported/README.md +0 -6
  33. package/examples/imported/config/project-scratch-def.json +0 -5
  34. package/examples/imported/docs/index.md +0 -109
  35. package/examples/imported/docs/miscellaneous/BaseClass.md +0 -13
  36. package/examples/imported/docs/miscellaneous/MultiInheritanceClass.md +0 -69
  37. package/examples/imported/docs/miscellaneous/ParentInterface.md +0 -12
  38. package/examples/imported/docs/miscellaneous/ReferencedEnum.md +0 -5
  39. package/examples/imported/docs/miscellaneous/SampleException.md +0 -21
  40. package/examples/imported/docs/miscellaneous/SampleInterface.md +0 -113
  41. package/examples/imported/docs/miscellaneous/Url.md +0 -308
  42. package/examples/imported/docs/sample-enums/SampleEnum.md +0 -33
  43. package/examples/imported/docs/samplegroup/SampleClass.md +0 -167
  44. package/examples/imported/force-app/classes/BaseClass.cls +0 -3
  45. package/examples/imported/force-app/classes/MultiInheritanceClass.cls +0 -1
  46. package/examples/imported/force-app/classes/ParentInterface.cls +0 -3
  47. package/examples/imported/force-app/classes/ReferencedEnum.cls +0 -3
  48. package/examples/imported/force-app/classes/SampleClass.cls +0 -72
  49. package/examples/imported/force-app/classes/SampleEnum.cls +0 -30
  50. package/examples/imported/force-app/classes/SampleException.cls +0 -17
  51. package/examples/imported/force-app/classes/SampleInterface.cls +0 -50
  52. package/examples/imported/force-app/classes/Url.cls +0 -196
  53. package/examples/imported/package-lock.json +0 -665
  54. package/examples/imported/package.json +0 -6
  55. package/examples/imported/scripts/process-docs.mjs +0 -16
  56. package/examples/imported/sfdx-project.json +0 -12
  57. package/examples/markdown/.forceignore +0 -12
  58. package/examples/markdown/README.md +0 -7
  59. package/examples/markdown/config/project-scratch-def.json +0 -5
  60. package/examples/markdown/docs/index.md +0 -109
  61. package/examples/markdown/docs/miscellaneous/BaseClass.md +0 -16
  62. package/examples/markdown/docs/miscellaneous/MultiInheritanceClass.md +0 -72
  63. package/examples/markdown/docs/miscellaneous/ParentInterface.md +0 -15
  64. package/examples/markdown/docs/miscellaneous/ReferencedEnum.md +0 -8
  65. package/examples/markdown/docs/miscellaneous/SampleException.md +0 -24
  66. package/examples/markdown/docs/miscellaneous/SampleInterface.md +0 -116
  67. package/examples/markdown/docs/miscellaneous/Url.md +0 -311
  68. package/examples/markdown/docs/sample-enums/SampleEnum.md +0 -36
  69. package/examples/markdown/docs/samplegroup/SampleClass.md +0 -170
  70. package/examples/markdown/force-app/classes/BaseClass.cls +0 -3
  71. package/examples/markdown/force-app/classes/MultiInheritanceClass.cls +0 -1
  72. package/examples/markdown/force-app/classes/ParentInterface.cls +0 -3
  73. package/examples/markdown/force-app/classes/ReferencedEnum.cls +0 -3
  74. package/examples/markdown/force-app/classes/SampleClass.cls +0 -72
  75. package/examples/markdown/force-app/classes/SampleEnum.cls +0 -30
  76. package/examples/markdown/force-app/classes/SampleException.cls +0 -17
  77. package/examples/markdown/force-app/classes/SampleInterface.cls +0 -50
  78. package/examples/markdown/force-app/classes/Url.cls +0 -196
  79. package/examples/markdown/package-lock.json +0 -665
  80. package/examples/markdown/package.json +0 -20
  81. package/examples/markdown/sfdx-project.json +0 -12
  82. package/examples/markdown-jsconfig/.forceignore +0 -12
  83. package/examples/markdown-jsconfig/README.md +0 -9
  84. package/examples/markdown-jsconfig/apexdocs.config.mjs +0 -22
  85. package/examples/markdown-jsconfig/config/project-scratch-def.json +0 -5
  86. package/examples/markdown-jsconfig/docs/index.md +0 -12
  87. package/examples/markdown-jsconfig/docs/miscellaneous/Url.md +0 -315
  88. package/examples/markdown-jsconfig/force-app/classes/Url.cls +0 -196
  89. package/examples/markdown-jsconfig/package-lock.json +0 -665
  90. package/examples/markdown-jsconfig/package.json +0 -15
  91. package/examples/markdown-jsconfig/sfdx-project.json +0 -12
  92. package/examples/open-api/README.md +0 -5
  93. package/examples/open-api/config/project-scratch-def.json +0 -13
  94. package/examples/open-api/docs/openapi.json +0 -14
  95. package/examples/open-api/force-app/main/default/classes/ChildClass.cls +0 -42
  96. package/examples/open-api/force-app/main/default/classes/SampleClass.cls +0 -167
  97. package/examples/open-api/force-app/main/default/restapi/SampleRestResource.cls +0 -195
  98. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceToSkip.cls +0 -35
  99. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithInnerClass.cls +0 -24
  100. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithoutApexDocs.cls +0 -15
  101. package/examples/open-api/force-app/main/default/restapi/references/Reference1.cls +0 -9
  102. package/examples/open-api/force-app/main/default/restapi/references/Reference2.cls +0 -9
  103. package/examples/open-api/force-app/main/default/restapi/references/Reference3.cls +0 -3
  104. package/examples/open-api/force-app/main/default/restapi/references/Reference4.cls +0 -3
  105. package/examples/open-api/force-app/main/default/restapi/references/Reference5.cls +0 -3
  106. package/examples/open-api/force-app/main/default/restapi/references/Reference6.cls +0 -6
  107. package/examples/open-api/force-app/main/default/restapi/references/Reference7.cls +0 -3
  108. package/examples/open-api/package-lock.json +0 -724
  109. package/examples/open-api/package.json +0 -20
  110. package/examples/open-api/sfdx-project.json +0 -12
  111. package/examples/vitepress/.forceignore +0 -12
  112. package/examples/vitepress/README.md +0 -25
  113. package/examples/vitepress/apexdocs.config.ts +0 -113
  114. package/examples/vitepress/config/project-scratch-def.json +0 -13
  115. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js +0 -259
  116. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js.map +0 -7
  117. package/examples/vitepress/docs/.vitepress/cache/deps/_metadata.json +0 -40
  118. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js +0 -11474
  119. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js.map +0 -7
  120. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js +0 -9172
  121. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js.map +0 -7
  122. package/examples/vitepress/docs/.vitepress/cache/deps/package.json +0 -3
  123. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4339
  124. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  125. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -567
  126. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  127. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js +0 -323
  128. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js.map +0 -7
  129. package/examples/vitepress/docs/.vitepress/config.mts +0 -21
  130. package/examples/vitepress/docs/.vitepress/sidebar.json +0 -119
  131. package/examples/vitepress/docs/api-examples.md +0 -49
  132. package/examples/vitepress/docs/index-frontmatter.md +0 -16
  133. package/examples/vitepress/docs/index.md +0 -56
  134. package/examples/vitepress/docs/markdown-examples.md +0 -85
  135. package/examples/vitepress/docs/miscellaneous/BaseClass.md +0 -20
  136. package/examples/vitepress/docs/miscellaneous/MultiInheritanceClass.md +0 -76
  137. package/examples/vitepress/docs/miscellaneous/ParentInterface.md +0 -19
  138. package/examples/vitepress/docs/miscellaneous/ReferencedEnum.md +0 -15
  139. package/examples/vitepress/docs/miscellaneous/SampleException.md +0 -28
  140. package/examples/vitepress/docs/miscellaneous/SampleInterface.md +0 -116
  141. package/examples/vitepress/docs/miscellaneous/Url.md +0 -317
  142. package/examples/vitepress/docs/sample-enums/SampleEnum.md +0 -40
  143. package/examples/vitepress/docs/samplegroup/SampleClass.md +0 -174
  144. package/examples/vitepress/force-app/main/default/classes/BaseClass.cls +0 -3
  145. package/examples/vitepress/force-app/main/default/classes/MultiInheritanceClass.cls +0 -1
  146. package/examples/vitepress/force-app/main/default/classes/ParentInterface.cls +0 -3
  147. package/examples/vitepress/force-app/main/default/classes/ReferencedEnum.cls +0 -5
  148. package/examples/vitepress/force-app/main/default/classes/Url.cls +0 -198
  149. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleClass.cls +0 -73
  150. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleEnum.cls +0 -30
  151. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleException.cls +0 -17
  152. package/examples/vitepress/force-app/main/default/classes/feature-a/SampleInterface.cls +0 -46
  153. package/examples/vitepress/package-lock.json +0 -2574
  154. package/examples/vitepress/package.json +0 -18
  155. package/examples/vitepress/sfdx-project.json +0 -12
  156. package/jest.config.js +0 -10
  157. package/jest.d.ts +0 -7
  158. package/src/application/Apexdocs.ts +0 -69
  159. package/src/application/__tests__/apex-file-reader.spec.ts +0 -128
  160. package/src/application/apex-file-reader.ts +0 -56
  161. package/src/application/file-system.ts +0 -69
  162. package/src/application/file-writer.ts +0 -43
  163. package/src/application/generators/markdown.ts +0 -45
  164. package/src/application/generators/openapi.ts +0 -75
  165. package/src/cli/args.ts +0 -55
  166. package/src/cli/commands/markdown.ts +0 -56
  167. package/src/cli/commands/openapi.ts +0 -36
  168. package/src/cli/generate.ts +0 -32
  169. package/src/core/__test__/manifest.spec.ts +0 -16
  170. package/src/core/manifest.ts +0 -90
  171. package/src/core/markdown/__test__/expect-extensions.ts +0 -32
  172. package/src/core/markdown/__test__/generating-class-docs.spec.ts +0 -362
  173. package/src/core/markdown/__test__/generating-docs.spec.ts +0 -378
  174. package/src/core/markdown/__test__/generating-enum-docs.spec.ts +0 -61
  175. package/src/core/markdown/__test__/generating-interface-docs.spec.ts +0 -169
  176. package/src/core/markdown/__test__/generating-reference-guide.spec.ts +0 -196
  177. package/src/core/markdown/__test__/inheritance-chain.test.ts +0 -54
  178. package/src/core/markdown/__test__/test-helpers.ts +0 -25
  179. package/src/core/markdown/adapters/__tests__/documentables.spec.ts +0 -109
  180. package/src/core/markdown/adapters/__tests__/interface-adapter.spec.ts +0 -150
  181. package/src/core/markdown/adapters/__tests__/link-generator.spec.ts +0 -130
  182. package/src/core/markdown/adapters/__tests__/references.spec.ts +0 -136
  183. package/src/core/markdown/adapters/apex-types.ts +0 -238
  184. package/src/core/markdown/adapters/documentables.ts +0 -115
  185. package/src/core/markdown/adapters/fields-and-properties.ts +0 -45
  186. package/src/core/markdown/adapters/generate-link.ts +0 -82
  187. package/src/core/markdown/adapters/inline.ts +0 -143
  188. package/src/core/markdown/adapters/methods-and-constructors.ts +0 -133
  189. package/src/core/markdown/adapters/reference-guide.ts +0 -37
  190. package/src/core/markdown/adapters/renderable-bundle.ts +0 -61
  191. package/src/core/markdown/adapters/renderable-to-page-data.ts +0 -91
  192. package/src/core/markdown/adapters/type-utils.ts +0 -13
  193. package/src/core/markdown/adapters/types.d.ts +0 -180
  194. package/src/core/markdown/generate-docs.ts +0 -210
  195. package/src/core/markdown/reflection/__test__/filter-scope.spec.ts +0 -290
  196. package/src/core/markdown/reflection/__test__/helpers.ts +0 -18
  197. package/src/core/markdown/reflection/__test__/remove-excluded-tags.spec.ts +0 -200
  198. package/src/core/markdown/reflection/filter-scope.ts +0 -13
  199. package/src/core/markdown/reflection/inheritance-chain-expanion.ts +0 -22
  200. package/src/core/markdown/reflection/inheritance-chain.ts +0 -23
  201. package/src/core/markdown/reflection/inherited-member-expansion.ts +0 -105
  202. package/src/core/markdown/reflection/reflect-source.ts +0 -123
  203. package/src/core/markdown/reflection/remove-excluded-tags.ts +0 -168
  204. package/src/core/markdown/reflection/sort-types-and-members.ts +0 -61
  205. package/src/core/markdown/templates/class-template.ts +0 -75
  206. package/src/core/markdown/templates/constructors-partial-template.ts +0 -32
  207. package/src/core/markdown/templates/documentable-partial-template.ts +0 -26
  208. package/src/core/markdown/templates/enum-template.ts +0 -12
  209. package/src/core/markdown/templates/fieldsPartialTemplate.ts +0 -23
  210. package/src/core/markdown/templates/grouped-members-partial-template.ts +0 -6
  211. package/src/core/markdown/templates/hookable.ts +0 -7
  212. package/src/core/markdown/templates/interface-template.ts +0 -16
  213. package/src/core/markdown/templates/methods-partial-template.ts +0 -43
  214. package/src/core/markdown/templates/reference-guide.ts +0 -14
  215. package/src/core/markdown/templates/template.ts +0 -114
  216. package/src/core/markdown/templates/type-doc-partial.ts +0 -27
  217. package/src/core/markdown/utils.ts +0 -3
  218. package/src/core/openApiSettings.ts +0 -41
  219. package/src/core/openapi/__tests__/manifest-factory.spec.ts +0 -16
  220. package/src/core/openapi/__tests__/open-api-docs-processor.spec.ts +0 -59
  221. package/src/core/openapi/__tests__/open-api.spec.ts +0 -22
  222. package/src/core/openapi/apex-doc-types.ts +0 -26
  223. package/src/core/openapi/apex-type-wrappers/ClassMirrorWrapper.ts +0 -12
  224. package/src/core/openapi/apex-type-wrappers/MethodMirrorWrapper.ts +0 -11
  225. package/src/core/openapi/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +0 -15
  226. package/src/core/openapi/file-container.ts +0 -13
  227. package/src/core/openapi/manifest-factory.ts +0 -16
  228. package/src/core/openapi/open-api-docs-processor.ts +0 -93
  229. package/src/core/openapi/open-api-types.ts +0 -119
  230. package/src/core/openapi/open-api.ts +0 -45
  231. package/src/core/openapi/openapi-type-file.ts +0 -12
  232. package/src/core/openapi/parser.ts +0 -163
  233. package/src/core/openapi/parsers/Builder.ts +0 -40
  234. package/src/core/openapi/parsers/MethodParser.ts +0 -249
  235. package/src/core/openapi/parsers/ParameterObjectBuilder.ts +0 -13
  236. package/src/core/openapi/parsers/ReferenceBuilder.ts +0 -299
  237. package/src/core/openapi/parsers/RequestBodyBuilder.ts +0 -19
  238. package/src/core/openapi/parsers/ResponsesBuilder.ts +0 -21
  239. package/src/core/openapi/parsers/__tests__/MethodParser.spec.ts +0 -44
  240. package/src/core/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +0 -68
  241. package/src/core/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +0 -751
  242. package/src/core/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +0 -64
  243. package/src/core/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +0 -55
  244. package/src/core/openapi/transpiler.ts +0 -17
  245. package/src/core/openapi/types-repository.ts +0 -54
  246. package/src/core/parse-apex-metadata.ts +0 -30
  247. package/src/core/shared/types.d.ts +0 -150
  248. package/src/core/shared/utils.ts +0 -5
  249. package/src/defaults.ts +0 -21
  250. package/src/index.ts +0 -110
  251. package/src/test-helpers/AnnotationBuilder.ts +0 -29
  252. package/src/test-helpers/ClassMirrorBuilder.ts +0 -69
  253. package/src/test-helpers/DocCommentAnnotationBuilder.ts +0 -24
  254. package/src/test-helpers/DocCommentBuilder.ts +0 -36
  255. package/src/test-helpers/FieldMirrorBuilder.ts +0 -59
  256. package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -39
  257. package/src/test-helpers/MethodMirrorBuilder.ts +0 -77
  258. package/src/test-helpers/SettingsBuilder.ts +0 -17
  259. package/src/util/error-logger.ts +0 -92
  260. package/src/util/fp.ts +0 -3
  261. package/src/util/logger.ts +0 -51
  262. package/src/util/string-utils.ts +0 -7
  263. package/tsconfig.json +0 -25
  264. 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