@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,378 +0,0 @@
1
- import { DocPageData, PostHookDocumentationBundle } from '../../shared/types';
2
- import { assertEither, extendExpect } from './expect-extensions';
3
- import { apexBundleFromRawString, generateDocs } from './test-helpers';
4
-
5
- function aSingleDoc(result: PostHookDocumentationBundle): DocPageData {
6
- expect(result.docs).toHaveLength(1);
7
- return result.docs[0];
8
- }
9
-
10
- describe('When generating documentation', () => {
11
- beforeAll(() => {
12
- extendExpect();
13
- });
14
-
15
- describe('the resulting files', () => {
16
- it('are named after the type', async () => {
17
- const properties: [string, string][] = [
18
- ['public class MyClass {}', 'MyClass.md'],
19
- ['public interface MyInterface {}', 'MyInterface.md'],
20
- ['public enum MyEnum {}', 'MyEnum.md'],
21
- ];
22
-
23
- for (const [input, expected] of properties) {
24
- const result = await generateDocs([apexBundleFromRawString(input)])();
25
- assertEither(result, (data) => expect(aSingleDoc(data).outputDocPath).toContain(expected));
26
- }
27
- });
28
-
29
- it('are placed in the miscellaneous folder if no group is provided', async () => {
30
- const properties: [string, string][] = [
31
- ['public class MyClass {}', 'miscellaneous'],
32
- ['public interface MyInterface {}', 'miscellaneous'],
33
- ['public enum MyEnum {}', 'miscellaneous'],
34
- ];
35
-
36
- for (const [input, expected] of properties) {
37
- const result = await generateDocs([apexBundleFromRawString(input)])();
38
- assertEither(result, (data) => expect(aSingleDoc(data).outputDocPath).toContain(expected));
39
- }
40
- });
41
-
42
- it('are placed in the slugified group folder if a group is provided', async () => {
43
- const properties: [string, string][] = [
44
- [
45
- `/**
46
- * @group MyGroup
47
- */
48
- public class MyClass {}`,
49
- 'mygroup',
50
- ],
51
- [
52
- `/**
53
- * @group MyGroup
54
- */
55
- public interface MyInterface {}`,
56
- 'mygroup',
57
- ],
58
- [
59
- `/**
60
- * @group MyGroup
61
- */
62
- public enum MyEnum {}`,
63
- 'mygroup',
64
- ],
65
- ];
66
-
67
- for (const [input, expected] of properties) {
68
- const result = await generateDocs([apexBundleFromRawString(input)])();
69
- assertEither(result, (data) => expect(aSingleDoc(data).outputDocPath).toContain(expected));
70
- }
71
- });
72
- });
73
-
74
- describe('the generated bundles', () => {
75
- it('return the type', async () => {
76
- const properties: [string, string][] = [
77
- ['public class MyClass {}', 'class'],
78
- ['public interface MyInterface {}', 'interface'],
79
- ['public enum MyEnum {}', 'enum'],
80
- ];
81
-
82
- for (const [input, expected] of properties) {
83
- const result = await generateDocs([apexBundleFromRawString(input)])();
84
- assertEither(result, (data) => expect(aSingleDoc(data).source.type).toBe(expected));
85
- }
86
- });
87
-
88
- it('do not return files out of scope', async () => {
89
- const input1 = 'global class MyClass {}';
90
- const input2 = 'public class AnotherClass {}';
91
-
92
- const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)], {
93
- scope: ['global'],
94
- })();
95
- expect(result).documentationBundleHasLength(1);
96
- });
97
-
98
- it('do not return files that have an @ignore in the docs', async () => {
99
- const input = `
100
- /**
101
- * @ignore
102
- */
103
- public class MyClass {}`;
104
-
105
- const result = await generateDocs([apexBundleFromRawString(input)])();
106
- expect(result).documentationBundleHasLength(0);
107
- });
108
- });
109
-
110
- describe('the documentation content', () => {
111
- it('includes a heading with the type name', async () => {
112
- const properties: [string, string][] = [
113
- ['public class MyClass {}', 'MyClass Class'],
114
- ['public enum MyEnum {}', 'MyEnum Enum'],
115
- ['public interface MyInterface {}', 'MyInterface Interface'],
116
- ];
117
-
118
- for (const [input, expected] of properties) {
119
- const result = await generateDocs([apexBundleFromRawString(input)])();
120
-
121
- expect(result).documentationBundleHasLength(1);
122
- assertEither(result, (data) => expect(data).firstDocContains(expected));
123
- }
124
- });
125
-
126
- it('displays type level annotations', async () => {
127
- const input = `
128
- @NamespaceAccessible
129
- public class MyClass {
130
- @Deprecated
131
- public void myMethod() {}
132
- }
133
- `;
134
-
135
- const result = await generateDocs([apexBundleFromRawString(input)])();
136
-
137
- expect(result).documentationBundleHasLength(1);
138
- assertEither(result, (data) => expect(data).firstDocContains('NAMESPACEACCESSIBLE'));
139
- assertEither(result, (data) => expect(data).firstDocContains('DEPRECATED'));
140
- });
141
-
142
- it('displays metadata as annotations', async () => {
143
- const input = 'public class MyClass {}';
144
- const metadata = `
145
- <?xml version="1.0" encoding="UTF-8"?>
146
- <ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
147
- <apiVersion>59.0</apiVersion>
148
- <status>Active</status>
149
- </ApexClass>
150
- `;
151
-
152
- const result = await generateDocs([apexBundleFromRawString(input, metadata)])();
153
-
154
- expect(result).documentationBundleHasLength(1);
155
- assertEither(result, (data) => expect(data).firstDocContains('APIVERSION'));
156
- assertEither(result, (data) => expect(data).firstDocContains('STATUS'));
157
- });
158
-
159
- it('displays the description when no @description tag is used', async () => {
160
- const input = `
161
- /**
162
- * This is a description
163
- */
164
- public class MyClass {}
165
- `;
166
-
167
- const result = await generateDocs([apexBundleFromRawString(input)])();
168
-
169
- expect(result).documentationBundleHasLength(1);
170
- assertEither(result, (data) => expect(data).firstDocContains('This is a description'));
171
- });
172
-
173
- it('displays the description when a @description tag is used', async () => {
174
- const input = `
175
- /**
176
- * @description This is a description
177
- */
178
- public class MyClass {}`;
179
-
180
- const result = await generateDocs([apexBundleFromRawString(input)])();
181
- expect(result).documentationBundleHasLength(1);
182
- assertEither(result, (data) => expect(data).firstDocContains('This is a description'));
183
- });
184
-
185
- it('display custom documentation tags', async () => {
186
- const input = `
187
- /**
188
- * @custom-tag My Value
189
- */
190
- public class MyClass {}
191
- `;
192
-
193
- const result = await generateDocs([apexBundleFromRawString(input)])();
194
- expect(result).documentationBundleHasLength(1);
195
- assertEither(result, (data) => expect(data).firstDocContains('Custom Tag'));
196
- assertEither(result, (data) => expect(data).firstDocContains('My Value'));
197
- });
198
-
199
- it('displays the group', async () => {
200
- const input = `
201
- /**
202
- * @group MyGroup
203
- */
204
- public class MyClass {}`;
205
-
206
- const result = await generateDocs([apexBundleFromRawString(input)])();
207
- expect(result).documentationBundleHasLength(1);
208
- assertEither(result, (data) => expect(data).firstDocContains('Group'));
209
- assertEither(result, (data) => expect(data).firstDocContains('MyGroup'));
210
- });
211
-
212
- it('displays the author', async () => {
213
- const input = `
214
- /**
215
- * @author John Doe
216
- */
217
- public class MyClass {}`;
218
-
219
- const result = await generateDocs([apexBundleFromRawString(input)])();
220
- expect(result).documentationBundleHasLength(1);
221
- assertEither(result, (data) => expect(data).firstDocContains('Author'));
222
- assertEither(result, (data) => expect(data).firstDocContains('John Doe'));
223
- });
224
-
225
- it('displays the date', async () => {
226
- const input = `
227
- /**
228
- * @date 2021-01-01
229
- */
230
- public class MyClass {}`;
231
-
232
- const result = await generateDocs([apexBundleFromRawString(input)])();
233
- expect(result).documentationBundleHasLength(1);
234
- assertEither(result, (data) => expect(data).firstDocContains('Date'));
235
- assertEither(result, (data) => expect(data).firstDocContains('2021-01-01'));
236
- });
237
-
238
- it('displays descriptions with links', async () => {
239
- const input1 = `
240
- /**
241
- * @description This is a description with a {@link ClassRef} reference
242
- */
243
- public enum MyClass {}
244
- `;
245
-
246
- const input2 = 'public class ClassRef {}';
247
-
248
- const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)])();
249
- expect(result).documentationBundleHasLength(2);
250
- assertEither(result, (data) =>
251
- expect(data).firstDocContains('This is a description with a [ClassRef](ClassRef.md) reference'),
252
- );
253
- });
254
-
255
- it('displays descriptions with emails', async () => {
256
- const input = `
257
- /**
258
- * @description This is a description with an {@email test@testerson.com} email
259
- */
260
- public class MyClass {}
261
- `;
262
-
263
- const result = await generateDocs([apexBundleFromRawString(input)])();
264
- expect(result).documentationBundleHasLength(1);
265
- assertEither(result, (data) =>
266
- expect(data).firstDocContains(
267
- 'This is a description with an [test@testerson.com](mailto:test@testerson.com) email',
268
- ),
269
- );
270
- });
271
-
272
- it('displays @sees with accurately resolved links', async () => {
273
- const input1 = `
274
- /**
275
- * @see ClassRef
276
- */
277
- public class MyClass {}
278
- `;
279
-
280
- const input2 = 'public class ClassRef {}';
281
-
282
- const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)])();
283
- expect(result).documentationBundleHasLength(2);
284
- assertEither(result, (data) => expect(data).firstDocContains('See'));
285
- assertEither(result, (data) => expect(data).firstDocContains('[ClassRef](ClassRef.md)'));
286
- });
287
-
288
- it('displays @sees without links when the reference is not found', async () => {
289
- const input = `
290
- /**
291
- * @see ClassRef
292
- */
293
- public class MyClass {}
294
- `;
295
-
296
- const result = await generateDocs([apexBundleFromRawString(input)])();
297
-
298
- expect(result).documentationBundleHasLength(1);
299
- assertEither(result, (data) => expect(data).firstDocContains('See'));
300
- assertEither(result, (data) => expect(data).firstDocContains('ClassRef'));
301
- });
302
-
303
- it('displays the namespace if present in the config', async () => {
304
- const input = 'public class MyClass {}';
305
-
306
- const result = await generateDocs([apexBundleFromRawString(input)], { namespace: 'MyNamespace' })();
307
- expect(result).documentationBundleHasLength(1);
308
- assertEither(result, (data) => expect(data).firstDocContains('## Namespace'));
309
- assertEither(result, (data) => expect(data).firstDocContains('MyNamespace'));
310
- });
311
-
312
- it('does not display the namespace if not present in the config', async () => {
313
- const input = 'public class MyClass {}';
314
-
315
- const result = await generateDocs([apexBundleFromRawString(input)])();
316
- expect(result).documentationBundleHasLength(1);
317
- assertEither(result, (data) => expect(data).firstDocContainsNot('## Namespace'));
318
- });
319
-
320
- it('displays a mermaid diagram', async () => {
321
- const input = `
322
- /**
323
- * @mermaid
324
- * \`\`\`mermaid
325
- * graph TD
326
- * A[Square Rect] -- Link text --> B((Circle))
327
- * A --> C(Round Rect)
328
- * B --> D{Rhombus}
329
- * C --> D
330
- * \`\`\`
331
- */
332
- public class MyClass {}
333
- `;
334
-
335
- const result = await generateDocs([apexBundleFromRawString(input)])();
336
- expect(result).documentationBundleHasLength(1);
337
- assertEither(result, (data) => expect(data).firstDocContains('```mermaid'));
338
- assertEither(result, (data) => expect(data).firstDocContains('graph TD'));
339
- });
340
-
341
- it('displays an example code block', async () => {
342
- const input = `
343
- /**
344
- * @example
345
- * \`\`\`apex
346
- * public class MyClass {
347
- * public void myMethod() {
348
- * System.debug('Hello, World!');
349
- * }
350
- * }
351
- * \`\`\`
352
- */
353
- public class MyClass {}`;
354
-
355
- const result = await generateDocs([apexBundleFromRawString(input)])();
356
-
357
- expect(result).documentationBundleHasLength(1);
358
- assertEither(result, (data) => expect(data).firstDocContains('```apex'));
359
- assertEither(result, (data) => expect(data).firstDocContains('public class MyClass'));
360
- });
361
-
362
- it('does not display tags marked as excluded', async () => {
363
- const input = `
364
- /**
365
- * @see ClassRef
366
- */
367
- public class MyClass {}
368
- `;
369
-
370
- const result = await generateDocs([apexBundleFromRawString(input)], {
371
- excludeTags: ['see'],
372
- })();
373
-
374
- expect(result).documentationBundleHasLength(1);
375
- assertEither(result, (data) => expect(data).firstDocContainsNot('See'));
376
- });
377
- });
378
- });
@@ -1,61 +0,0 @@
1
- import { assertEither, extendExpect } from './expect-extensions';
2
- import { apexBundleFromRawString, generateDocs } from './test-helpers';
3
-
4
- describe('Generates enum documentation', () => {
5
- beforeAll(() => {
6
- extendExpect();
7
- });
8
-
9
- describe('documentation content', () => {
10
- it('displays values', async () => {
11
- const input = `
12
- public enum MyEnum {
13
- VALUE1,
14
- VALUE2
15
- }
16
- `;
17
-
18
- const result = await generateDocs([apexBundleFromRawString(input)])();
19
- expect(result).documentationBundleHasLength(1);
20
- assertEither(result, (data) => expect(data).firstDocContains('## Values'));
21
- assertEither(result, (data) => expect(data).firstDocContains('VALUE1'));
22
- assertEither(result, (data) => expect(data).firstDocContains('VALUE2'));
23
- });
24
-
25
- it('displays values sorted when sortAlphabetically is true', async () => {
26
- const input = `
27
- public enum MyEnum {
28
- VALUE2,
29
- VALUE1
30
- }
31
- `;
32
-
33
- const result = await generateDocs([apexBundleFromRawString(input)], { sortAlphabetically: true })();
34
- expect(result).documentationBundleHasLength(1);
35
- assertEither(result, (data) => expect(data).firstDocContains('## Values'));
36
- assertEither(result, (data) => {
37
- const value1Index = data.docs[0].content.indexOf('VALUE1');
38
- const value2Index = data.docs[0].content.indexOf('VALUE2');
39
- expect(value1Index).toBeLessThan(value2Index);
40
- });
41
- });
42
-
43
- it('does not sort values when sortAlphabetically is false', async () => {
44
- const input = `
45
- public enum MyEnum {
46
- VALUE2,
47
- VALUE1
48
- }
49
- `;
50
-
51
- const result = await generateDocs([apexBundleFromRawString(input)], { sortAlphabetically: false })();
52
- expect(result).documentationBundleHasLength(1);
53
- assertEither(result, (data) => expect(data).firstDocContains('## Values'));
54
- assertEither(result, (data) => {
55
- const value1Index = data.docs[0].content.indexOf('VALUE1');
56
- const value2Index = data.docs[0].content.indexOf('VALUE2');
57
- expect(value1Index).toBeGreaterThan(value2Index);
58
- });
59
- });
60
- });
61
- });
@@ -1,169 +0,0 @@
1
- import { assertEither, extendExpect } from './expect-extensions';
2
- import { apexBundleFromRawString, generateDocs } from './test-helpers';
3
-
4
- describe('Generates interface documentation', () => {
5
- beforeAll(() => {
6
- extendExpect();
7
- });
8
-
9
- describe('documentation content', () => {
10
- describe('method information', () => {
11
- it('displays the Method heading', async () => {
12
- const input = `
13
- public interface MyInterface {
14
- void myMethod();
15
- }
16
- `;
17
-
18
- const result = await generateDocs([apexBundleFromRawString(input)])();
19
- expect(result).documentationBundleHasLength(1);
20
- assertEither(result, (data) => expect(data).firstDocContains('## Methods'));
21
- });
22
-
23
- it('displays methods sorted if sortAlphabetically is true', async () => {
24
- const input = `
25
- public interface MyInterface {
26
- void myMethod();
27
- void anotherMethod();
28
- }
29
- `;
30
-
31
- const result = await generateDocs([apexBundleFromRawString(input)], { sortAlphabetically: true })();
32
- expect(result).documentationBundleHasLength(1);
33
- assertEither(result, (data) => {
34
- expect(data.docs[0].content.indexOf('anotherMethod')).toBeLessThan(data.docs[0].content.indexOf('myMethod'));
35
- });
36
- });
37
-
38
- it('does not display methods sorted if sortAlphabetically is false', async () => {
39
- const input = `
40
- public interface MyInterface {
41
- void myMethod();
42
- void anotherMethod();
43
- }
44
- `;
45
-
46
- const result = await generateDocs([apexBundleFromRawString(input)], { sortAlphabetically: false })();
47
- expect(result).documentationBundleHasLength(1);
48
- assertEither(result, (data) => {
49
- expect(data.docs[0].content.indexOf('myMethod')).toBeLessThan(data.docs[0].content.indexOf('anotherMethod'));
50
- });
51
- });
52
-
53
- it('supports having mermaid diagrams in method descriptions', async () => {
54
- const input = `
55
- public interface MyInterface {
56
- /**
57
- * @mermaid
58
- * \`\`\`mermaid
59
- * graph TD
60
- * A[Square Rect] -- Link text --> B((Circle))
61
- * A --> C(Round Rect)
62
- * B --> D{Rhombus}
63
- * C --> D
64
- * \`\`\`
65
- */
66
- void myMethod();
67
- }
68
- `;
69
-
70
- const result = await generateDocs([apexBundleFromRawString(input)])();
71
- expect(result).documentationBundleHasLength(1);
72
- assertEither(result, (data) => expect(data).firstDocContains('```mermaid'));
73
- assertEither(result, (data) => expect(data).firstDocContains('graph TD'));
74
- });
75
-
76
- it('supports having example code blocks in method descriptions', async () => {
77
- const input = `
78
- public interface MyInterface {
79
- /**
80
- * @example
81
- * public class MyClass {
82
- * public void myMethod() {
83
- * System.debug('Hello, World!');
84
- * }
85
- * }
86
- */
87
- void myMethod();
88
- }
89
- `;
90
-
91
- const result = await generateDocs([apexBundleFromRawString(input)])();
92
- expect(result).documentationBundleHasLength(1);
93
- assertEither(result, (data) => expect(data).firstDocContains('```apex'));
94
- assertEither(result, (data) => expect(data).firstDocContains('public class MyClass'));
95
- });
96
-
97
- it('has a signature section', async () => {
98
- const input = `
99
- public interface MyInterface {
100
- void myMethod();
101
- }
102
- `;
103
-
104
- const result = await generateDocs([apexBundleFromRawString(input)])();
105
- expect(result).documentationBundleHasLength(1);
106
- assertEither(result, (data) => expect(data).firstDocContains('### Signature'));
107
- });
108
-
109
- it('has a parameters section', async () => {
110
- const input = `
111
- public interface MyInterface {
112
- void myMethod(String param1, Integer param2);
113
- }
114
- `;
115
-
116
- const result = await generateDocs([apexBundleFromRawString(input)])();
117
- expect(result).documentationBundleHasLength(1);
118
- assertEither(result, (data) => expect(data).firstDocContains('### Parameters'));
119
- });
120
-
121
- it('has a return type section', async () => {
122
- const input = `
123
- public interface MyInterface {
124
- String myMethod();
125
- }
126
- `;
127
-
128
- const result = await generateDocs([apexBundleFromRawString(input)])();
129
- expect(result).documentationBundleHasLength(1);
130
- assertEither(result, (data) => expect(data).firstDocContains('### Return Type'));
131
- });
132
-
133
- it('has a throws section', async () => {
134
- const input = `
135
- public interface MyInterface {
136
- /**
137
- * @throws MyException
138
- */
139
- void myMethod();
140
- }
141
- `;
142
-
143
- const result = await generateDocs([apexBundleFromRawString(input)])();
144
- expect(result).documentationBundleHasLength(1);
145
- assertEither(result, (data) => expect(data).firstDocContains('### Throws'));
146
- });
147
-
148
- it('displays an "inherited" tag if the method was inherited from a different interface', async () => {
149
- const input1 = `
150
- public interface MyInterface {
151
- void myMethod();
152
- }
153
- `;
154
-
155
- const input2 = `
156
- public interface AnotherInterface extends MyInterface {}
157
- `;
158
-
159
- const result = await generateDocs([apexBundleFromRawString(input1), apexBundleFromRawString(input2)])();
160
- expect(result).documentationBundleHasLength(2);
161
- assertEither(result, (data) =>
162
- expect(data.docs.find((doc) => doc.outputDocPath.includes('AnotherInterface'))?.content).toContain(
163
- 'Inherited',
164
- ),
165
- );
166
- });
167
- });
168
- });
169
- });