@cparra/apexdocs 3.0.0-rc.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 (226) hide show
  1. package/README.md +61 -576
  2. package/dist/cli/generate.js +73 -3094
  3. package/dist/defaults-BcE8DTat.js +13 -0
  4. package/dist/defaults-D07y_bq4.js +40 -0
  5. package/dist/defaults-gPzwP66p.js +14 -0
  6. package/dist/index.d.ts +35 -3
  7. package/dist/index.js +90 -2
  8. package/dist/logger-BEbUIfqN.js +3282 -0
  9. package/dist/logger-BGuf1PnL.js +3281 -0
  10. package/dist/logger-CWBRF2za.js +3284 -0
  11. package/dist/logger-CdBmDEN1.js +3283 -0
  12. package/dist/logger-Ce4QqPFR.js +3278 -0
  13. package/dist/logger-CyEVYaAC.js +3284 -0
  14. package/dist/logger-D7a83ycP.js +3277 -0
  15. package/dist/logger-DGaHeBKk.js +3279 -0
  16. package/dist/logger-Dqhl_lO_.js +3278 -0
  17. package/dist/logger-aySSWi0G.js +3280 -0
  18. package/dist/logger-qLCcAtiy.js +3284 -0
  19. package/package.json +5 -2
  20. package/.github/workflows/ci.yaml +0 -22
  21. package/.github/workflows/close_stale.yml +0 -22
  22. package/.prettierrc.js +0 -7
  23. package/__mocks__/chalk.js +0 -12
  24. package/__mocks__/log-update.js +0 -6
  25. package/eslint.config.mjs +0 -10
  26. package/examples/markdown/.forceignore +0 -12
  27. package/examples/markdown/config/project-scratch-def.json +0 -5
  28. package/examples/markdown/docs/index.md +0 -109
  29. package/examples/markdown/docs/miscellaneous/BaseClass.md +0 -16
  30. package/examples/markdown/docs/miscellaneous/MultiInheritanceClass.md +0 -72
  31. package/examples/markdown/docs/miscellaneous/ParentInterface.md +0 -15
  32. package/examples/markdown/docs/miscellaneous/ReferencedEnum.md +0 -8
  33. package/examples/markdown/docs/miscellaneous/SampleException.md +0 -24
  34. package/examples/markdown/docs/miscellaneous/SampleInterface.md +0 -116
  35. package/examples/markdown/docs/miscellaneous/Url.md +0 -311
  36. package/examples/markdown/docs/sample-enums/SampleEnum.md +0 -36
  37. package/examples/markdown/docs/samplegroup/SampleClass.md +0 -170
  38. package/examples/markdown/force-app/classes/BaseClass.cls +0 -3
  39. package/examples/markdown/force-app/classes/MultiInheritanceClass.cls +0 -1
  40. package/examples/markdown/force-app/classes/ParentInterface.cls +0 -3
  41. package/examples/markdown/force-app/classes/ReferencedEnum.cls +0 -3
  42. package/examples/markdown/force-app/classes/SampleClass.cls +0 -72
  43. package/examples/markdown/force-app/classes/SampleEnum.cls +0 -30
  44. package/examples/markdown/force-app/classes/SampleException.cls +0 -17
  45. package/examples/markdown/force-app/classes/SampleInterface.cls +0 -50
  46. package/examples/markdown/force-app/classes/Url.cls +0 -196
  47. package/examples/markdown/package-lock.json +0 -665
  48. package/examples/markdown/package.json +0 -20
  49. package/examples/markdown/sfdx-project.json +0 -12
  50. package/examples/markdown-jsconfig/.forceignore +0 -12
  51. package/examples/markdown-jsconfig/apexdocs.config.mjs +0 -21
  52. package/examples/markdown-jsconfig/config/project-scratch-def.json +0 -5
  53. package/examples/markdown-jsconfig/docs/index.md +0 -12
  54. package/examples/markdown-jsconfig/docs/miscellaneous/Url.md +0 -315
  55. package/examples/markdown-jsconfig/force-app/classes/Url.cls +0 -196
  56. package/examples/markdown-jsconfig/package-lock.json +0 -665
  57. package/examples/markdown-jsconfig/package.json +0 -15
  58. package/examples/markdown-jsconfig/sfdx-project.json +0 -12
  59. package/examples/open-api/config/project-scratch-def.json +0 -13
  60. package/examples/open-api/docs/openapi.json +0 -582
  61. package/examples/open-api/force-app/main/default/classes/ChildClass.cls +0 -42
  62. package/examples/open-api/force-app/main/default/classes/SampleClass.cls +0 -167
  63. package/examples/open-api/force-app/main/default/restapi/SampleRestResource.cls +0 -195
  64. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceToSkip.cls +0 -35
  65. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithInnerClass.cls +0 -24
  66. package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithoutApexDocs.cls +0 -15
  67. package/examples/open-api/force-app/main/default/restapi/references/Reference1.cls +0 -9
  68. package/examples/open-api/force-app/main/default/restapi/references/Reference2.cls +0 -9
  69. package/examples/open-api/force-app/main/default/restapi/references/Reference3.cls +0 -3
  70. package/examples/open-api/force-app/main/default/restapi/references/Reference4.cls +0 -3
  71. package/examples/open-api/force-app/main/default/restapi/references/Reference5.cls +0 -3
  72. package/examples/open-api/force-app/main/default/restapi/references/Reference6.cls +0 -6
  73. package/examples/open-api/force-app/main/default/restapi/references/Reference7.cls +0 -3
  74. package/examples/open-api/package-lock.json +0 -724
  75. package/examples/open-api/package.json +0 -20
  76. package/examples/open-api/sfdx-project.json +0 -12
  77. package/examples/vitepress/.forceignore +0 -12
  78. package/examples/vitepress/apexdocs.config.ts +0 -111
  79. package/examples/vitepress/config/project-scratch-def.json +0 -13
  80. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js +0 -259
  81. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js.map +0 -7
  82. package/examples/vitepress/docs/.vitepress/cache/deps/_metadata.json +0 -40
  83. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js +0 -11474
  84. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js.map +0 -7
  85. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js +0 -9172
  86. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js.map +0 -7
  87. package/examples/vitepress/docs/.vitepress/cache/deps/package.json +0 -3
  88. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4339
  89. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  90. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -567
  91. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  92. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js +0 -323
  93. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js.map +0 -7
  94. package/examples/vitepress/docs/.vitepress/config.mts +0 -21
  95. package/examples/vitepress/docs/.vitepress/sidebar.json +0 -119
  96. package/examples/vitepress/docs/api-examples.md +0 -49
  97. package/examples/vitepress/docs/index-frontmatter.md +0 -16
  98. package/examples/vitepress/docs/index.md +0 -56
  99. package/examples/vitepress/docs/markdown-examples.md +0 -85
  100. package/examples/vitepress/docs/miscellaneous/BaseClass.md +0 -20
  101. package/examples/vitepress/docs/miscellaneous/MultiInheritanceClass.md +0 -76
  102. package/examples/vitepress/docs/miscellaneous/ParentInterface.md +0 -19
  103. package/examples/vitepress/docs/miscellaneous/ReferencedEnum.md +0 -15
  104. package/examples/vitepress/docs/miscellaneous/SampleException.md +0 -28
  105. package/examples/vitepress/docs/miscellaneous/SampleInterface.md +0 -116
  106. package/examples/vitepress/docs/miscellaneous/Url.md +0 -317
  107. package/examples/vitepress/docs/sample-enums/SampleEnum.md +0 -40
  108. package/examples/vitepress/docs/samplegroup/SampleClass.md +0 -174
  109. package/examples/vitepress/force-app/main/default/classes/BaseClass.cls +0 -3
  110. package/examples/vitepress/force-app/main/default/classes/MultiInheritanceClass.cls +0 -1
  111. package/examples/vitepress/force-app/main/default/classes/ParentInterface.cls +0 -3
  112. package/examples/vitepress/force-app/main/default/classes/ReferencedEnum.cls +0 -5
  113. package/examples/vitepress/force-app/main/default/classes/SampleClass.cls +0 -72
  114. package/examples/vitepress/force-app/main/default/classes/SampleEnum.cls +0 -30
  115. package/examples/vitepress/force-app/main/default/classes/SampleException.cls +0 -17
  116. package/examples/vitepress/force-app/main/default/classes/SampleInterface.cls +0 -46
  117. package/examples/vitepress/force-app/main/default/classes/Url.cls +0 -198
  118. package/examples/vitepress/package-lock.json +0 -2574
  119. package/examples/vitepress/package.json +0 -18
  120. package/examples/vitepress/sfdx-project.json +0 -12
  121. package/jest.config.js +0 -10
  122. package/jest.d.ts +0 -7
  123. package/src/application/Apexdocs.ts +0 -72
  124. package/src/application/__tests__/apex-file-reader.spec.ts +0 -87
  125. package/src/application/apex-file-reader.ts +0 -55
  126. package/src/application/file-system.ts +0 -69
  127. package/src/application/file-writer.ts +0 -43
  128. package/src/application/generators/markdown.ts +0 -45
  129. package/src/application/generators/openapi.ts +0 -71
  130. package/src/cli/args.ts +0 -46
  131. package/src/cli/commands/markdown.ts +0 -51
  132. package/src/cli/commands/openapi.ts +0 -36
  133. package/src/cli/generate.ts +0 -16
  134. package/src/core/__test__/manifest.spec.ts +0 -16
  135. package/src/core/manifest.ts +0 -90
  136. package/src/core/markdown/__test__/expect-extensions.ts +0 -32
  137. package/src/core/markdown/__test__/generating-class-docs.spec.ts +0 -605
  138. package/src/core/markdown/__test__/generating-docs.spec.ts +0 -111
  139. package/src/core/markdown/__test__/generating-enum-docs.spec.ts +0 -321
  140. package/src/core/markdown/__test__/generating-interface-docs.spec.ts +0 -397
  141. package/src/core/markdown/__test__/generating-reference-guide.spec.ts +0 -180
  142. package/src/core/markdown/__test__/inheritance-chain.test.ts +0 -54
  143. package/src/core/markdown/__test__/test-helpers.ts +0 -23
  144. package/src/core/markdown/adapters/__tests__/documentables.spec.ts +0 -109
  145. package/src/core/markdown/adapters/__tests__/interface-adapter.spec.ts +0 -148
  146. package/src/core/markdown/adapters/__tests__/link-generator.spec.ts +0 -130
  147. package/src/core/markdown/adapters/__tests__/references.spec.ts +0 -136
  148. package/src/core/markdown/adapters/apex-types.ts +0 -238
  149. package/src/core/markdown/adapters/documentables.ts +0 -115
  150. package/src/core/markdown/adapters/fields-and-properties.ts +0 -45
  151. package/src/core/markdown/adapters/generate-link.ts +0 -82
  152. package/src/core/markdown/adapters/inline.ts +0 -143
  153. package/src/core/markdown/adapters/methods-and-constructors.ts +0 -133
  154. package/src/core/markdown/adapters/reference-guide.ts +0 -37
  155. package/src/core/markdown/adapters/renderable-bundle.ts +0 -61
  156. package/src/core/markdown/adapters/renderable-to-page-data.ts +0 -89
  157. package/src/core/markdown/adapters/type-utils.ts +0 -13
  158. package/src/core/markdown/adapters/types.d.ts +0 -180
  159. package/src/core/markdown/generate-docs.ts +0 -212
  160. package/src/core/markdown/reflection/__test__/filter-scope.spec.ts +0 -306
  161. package/src/core/markdown/reflection/filter-scope.ts +0 -13
  162. package/src/core/markdown/reflection/inheritance-chain-expanion.ts +0 -22
  163. package/src/core/markdown/reflection/inheritance-chain.ts +0 -23
  164. package/src/core/markdown/reflection/inherited-member-expansion.ts +0 -105
  165. package/src/core/markdown/reflection/reflect-source.ts +0 -123
  166. package/src/core/markdown/reflection/sort-members.ts +0 -59
  167. package/src/core/markdown/templates/class-template.ts +0 -75
  168. package/src/core/markdown/templates/constructors-partial-template.ts +0 -32
  169. package/src/core/markdown/templates/documentable-partial-template.ts +0 -26
  170. package/src/core/markdown/templates/enum-template.ts +0 -12
  171. package/src/core/markdown/templates/fieldsPartialTemplate.ts +0 -23
  172. package/src/core/markdown/templates/grouped-members-partial-template.ts +0 -6
  173. package/src/core/markdown/templates/hookable.ts +0 -7
  174. package/src/core/markdown/templates/interface-template.ts +0 -16
  175. package/src/core/markdown/templates/methods-partial-template.ts +0 -43
  176. package/src/core/markdown/templates/reference-guide.ts +0 -14
  177. package/src/core/markdown/templates/template.ts +0 -114
  178. package/src/core/markdown/templates/type-doc-partial.ts +0 -27
  179. package/src/core/markdown/utils.ts +0 -3
  180. package/src/core/openApiSettings.ts +0 -41
  181. package/src/core/openapi/__tests__/manifest-factory.spec.ts +0 -16
  182. package/src/core/openapi/__tests__/open-api-docs-processor.spec.ts +0 -56
  183. package/src/core/openapi/__tests__/open-api.spec.ts +0 -22
  184. package/src/core/openapi/apex-doc-types.ts +0 -26
  185. package/src/core/openapi/apex-type-wrappers/ClassMirrorWrapper.ts +0 -12
  186. package/src/core/openapi/apex-type-wrappers/MethodMirrorWrapper.ts +0 -11
  187. package/src/core/openapi/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +0 -15
  188. package/src/core/openapi/file-container.ts +0 -13
  189. package/src/core/openapi/manifest-factory.ts +0 -16
  190. package/src/core/openapi/open-api-docs-processor.ts +0 -93
  191. package/src/core/openapi/open-api-types.ts +0 -119
  192. package/src/core/openapi/open-api.ts +0 -45
  193. package/src/core/openapi/openapi-type-file.ts +0 -12
  194. package/src/core/openapi/parser.ts +0 -160
  195. package/src/core/openapi/parsers/Builder.ts +0 -40
  196. package/src/core/openapi/parsers/MethodParser.ts +0 -249
  197. package/src/core/openapi/parsers/ParameterObjectBuilder.ts +0 -13
  198. package/src/core/openapi/parsers/ReferenceBuilder.ts +0 -299
  199. package/src/core/openapi/parsers/RequestBodyBuilder.ts +0 -19
  200. package/src/core/openapi/parsers/ResponsesBuilder.ts +0 -21
  201. package/src/core/openapi/parsers/__tests__/MethodParser.spec.ts +0 -44
  202. package/src/core/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +0 -68
  203. package/src/core/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +0 -751
  204. package/src/core/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +0 -64
  205. package/src/core/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +0 -55
  206. package/src/core/openapi/transpiler.ts +0 -17
  207. package/src/core/openapi/types-repository.ts +0 -54
  208. package/src/core/parse-apex-metadata.ts +0 -30
  209. package/src/core/shared/types.d.ts +0 -148
  210. package/src/core/shared/utils.ts +0 -5
  211. package/src/defaults.ts +0 -9
  212. package/src/index.ts +0 -49
  213. package/src/test-helpers/AnnotationBuilder.ts +0 -29
  214. package/src/test-helpers/ClassMirrorBuilder.ts +0 -69
  215. package/src/test-helpers/DocCommentAnnotationBuilder.ts +0 -24
  216. package/src/test-helpers/DocCommentBuilder.ts +0 -36
  217. package/src/test-helpers/FieldMirrorBuilder.ts +0 -59
  218. package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -39
  219. package/src/test-helpers/MethodMirrorBuilder.ts +0 -77
  220. package/src/test-helpers/SettingsBuilder.ts +0 -17
  221. package/src/util/error-logger.ts +0 -92
  222. package/src/util/fp.ts +0 -3
  223. package/src/util/logger.ts +0 -44
  224. package/src/util/string-utils.ts +0 -7
  225. package/tsconfig.json +0 -25
  226. package/tslint.json +0 -6
@@ -1,133 +0,0 @@
1
- import { ConstructorMirror, MethodMirror, ParameterMirror, ThrowsAnnotation } from '@cparra/apex-reflection';
2
- import {
3
- RenderableConstructor,
4
- RenderableMethod,
5
- MethodMirrorWithInheritance,
6
- CodeBlock,
7
- GetRenderableContentByTypeName,
8
- } from './types';
9
- import { adaptDescribable, adaptDocumentable } from './documentables';
10
- import { Documentable } from './types';
11
-
12
- export function adaptMethod(
13
- method: MethodMirror,
14
- linkGenerator: GetRenderableContentByTypeName,
15
- baseHeadingLevel: number,
16
- ): RenderableMethod {
17
- function buildTitle(method: MethodMirrorWithInheritance): string {
18
- const { name, parameters } = method;
19
- const parametersString = parameters.map((param) => param.name).join(', ');
20
- return `${name}(${parametersString})`;
21
- }
22
-
23
- function buildSignature(method: MethodMirrorWithInheritance): CodeBlock {
24
- const { access_modifier, typeReference, name, memberModifiers } = method;
25
- const parameters = method.parameters
26
- .map((param) => `${param.typeReference.rawDeclaration} ${param.name}`)
27
- .join(', ');
28
- const members = memberModifiers.length > 0 ? `${memberModifiers.join(' ')} ` : '';
29
- return {
30
- __type: 'code-block',
31
- language: 'apex',
32
- content: [`${access_modifier} ${members}${typeReference.rawDeclaration} ${name}(${parameters})`],
33
- };
34
- }
35
-
36
- return {
37
- headingLevel: baseHeadingLevel,
38
- doc: adaptDocumentable(method, linkGenerator, baseHeadingLevel + 1),
39
- heading: buildTitle(method as MethodMirrorWithInheritance),
40
- signature: {
41
- headingLevel: baseHeadingLevel + 1,
42
- heading: 'Signature',
43
- value: buildSignature(method as MethodMirrorWithInheritance),
44
- },
45
- returnType: {
46
- headingLevel: baseHeadingLevel + 1,
47
- heading: 'Return Type',
48
- value: {
49
- ...adaptDescribable(method.docComment?.returnAnnotation?.bodyLines, linkGenerator),
50
- type: linkGenerator(method.typeReference.rawDeclaration),
51
- },
52
- },
53
- throws: {
54
- headingLevel: baseHeadingLevel + 1,
55
- heading: 'Throws',
56
- value: method.docComment?.throwsAnnotations.map((thrown) => mapThrows(thrown, linkGenerator)),
57
- },
58
- parameters: {
59
- headingLevel: baseHeadingLevel + 1,
60
- heading: 'Parameters',
61
- value: method.parameters.map((param) => mapParameters(method, param, linkGenerator)),
62
- },
63
- inherited: (method as MethodMirrorWithInheritance).inherited,
64
- };
65
- }
66
-
67
- export function adaptConstructor(
68
- typeName: string,
69
- constructor: ConstructorMirror,
70
- linkGenerator: GetRenderableContentByTypeName,
71
- baseHeadingLevel: number,
72
- ): RenderableConstructor {
73
- function buildTitle(name: string, constructor: ConstructorMirror): string {
74
- const { parameters } = constructor;
75
- const parametersString = parameters.map((param) => param.name).join(', ');
76
- return `${name}(${parametersString})`;
77
- }
78
-
79
- function buildSignature(name: string, constructor: ConstructorMirror): CodeBlock {
80
- const { access_modifier } = constructor;
81
- const parameters = constructor.parameters
82
- .map((param) => `${param.typeReference.rawDeclaration} ${param.name}`)
83
- .join(', ');
84
- return {
85
- __type: 'code-block',
86
- language: 'apex',
87
- content: [`${access_modifier} ${name}(${parameters})`],
88
- };
89
- }
90
-
91
- return {
92
- doc: adaptDocumentable(constructor, linkGenerator, baseHeadingLevel + 1),
93
- headingLevel: baseHeadingLevel,
94
- heading: buildTitle(typeName, constructor),
95
- signature: {
96
- headingLevel: baseHeadingLevel + 1,
97
- heading: 'Signature',
98
- value: buildSignature(typeName, constructor),
99
- },
100
- parameters: {
101
- headingLevel: baseHeadingLevel + 1,
102
- heading: 'Parameters',
103
- value: constructor.parameters.map((param) => mapParameters(constructor, param, linkGenerator)),
104
- },
105
- throws: {
106
- headingLevel: baseHeadingLevel + 1,
107
- heading: 'Throws',
108
- value: constructor.docComment?.throwsAnnotations.map((thrown) => mapThrows(thrown, linkGenerator)),
109
- },
110
- };
111
- }
112
-
113
- function mapParameters(
114
- documentable: Documentable,
115
- param: ParameterMirror,
116
- linkGenerator: GetRenderableContentByTypeName,
117
- ) {
118
- const paramAnnotation = documentable.docComment?.paramAnnotations.find(
119
- (pa) => pa.paramName.toLowerCase() === param.name.toLowerCase(),
120
- );
121
- return {
122
- ...adaptDescribable(paramAnnotation?.bodyLines, linkGenerator),
123
- name: param.name,
124
- type: linkGenerator(param.typeReference.rawDeclaration),
125
- };
126
- }
127
-
128
- function mapThrows(thrown: ThrowsAnnotation, linkGenerator: GetRenderableContentByTypeName) {
129
- return {
130
- ...adaptDescribable(thrown.bodyLines, linkGenerator),
131
- type: linkGenerator(thrown.exceptionName),
132
- };
133
- }
@@ -1,37 +0,0 @@
1
- import { MarkdownGeneratorConfig } from '../generate-docs';
2
- import { DocPageReference, ParsedFile } from '../../shared/types';
3
- import { Type } from '@cparra/apex-reflection';
4
-
5
- export function parsedFilesToReferenceGuide(
6
- config: MarkdownGeneratorConfig,
7
- parsedFiles: ParsedFile[],
8
- ): Record<string, DocPageReference> {
9
- return parsedFiles.reduce<Record<string, DocPageReference>>((acc, parsedFile) => {
10
- acc[parsedFile.type.name] = parsedFileToDocPageReference(config, parsedFile);
11
- return acc;
12
- }, {});
13
- }
14
-
15
- function parsedFileToDocPageReference(config: MarkdownGeneratorConfig, parsedFile: ParsedFile): DocPageReference {
16
- const path = `${slugify(getTypeGroup(parsedFile.type, config))}/${parsedFile.type.name}.md`;
17
- return {
18
- source: parsedFile.source,
19
- displayName: parsedFile.type.name,
20
- outputDocPath: path,
21
- referencePath: path,
22
- };
23
- }
24
-
25
- function getTypeGroup(type: Type, config: MarkdownGeneratorConfig): string {
26
- const groupAnnotation = type.docComment?.annotations.find((annotation) => annotation.name.toLowerCase() === 'group');
27
- return groupAnnotation?.body ?? config.defaultGroupName;
28
- }
29
-
30
- function slugify(text: string): string {
31
- return text
32
- .toLowerCase()
33
- .replace(/[^a-z0-9\s-]/g, '') // Remove non-alphanumeric characters except spaces and hyphens
34
- .trim()
35
- .replace(/\s+/g, '-') // Replace spaces with hyphens
36
- .replace(/-+/g, '-'); // Replace multiple hyphens with a single hyphen
37
- }
@@ -1,61 +0,0 @@
1
- import { DocPageReference, ParsedFile } from '../../shared/types';
2
- import { Link, ReferenceGuideReference, Renderable, RenderableBundle } from './types';
3
- import { typeToRenderable } from './apex-types';
4
- import { adaptDescribable } from './documentables';
5
- import { MarkdownGeneratorConfig } from '../generate-docs';
6
- import { apply } from '#utils/fp';
7
- import { Type } from '@cparra/apex-reflection';
8
- import { generateLink } from './generate-link';
9
-
10
- export function parsedFilesToRenderableBundle(
11
- config: MarkdownGeneratorConfig,
12
- parsedFiles: ParsedFile[],
13
- references: Record<string, DocPageReference>,
14
- ): RenderableBundle {
15
- const referenceFinder = apply(generateLink(config.linkingStrategy), references);
16
-
17
- function toReferenceGuide(parsedFiles: ParsedFile[]): Record<string, ReferenceGuideReference[]> {
18
- return parsedFiles.reduce<Record<string, ReferenceGuideReference[]>>(
19
- addToReferenceGuide(apply(referenceFinder, '__base__'), config, references),
20
- {},
21
- );
22
- }
23
-
24
- function toRenderables(parsedFiles: ParsedFile[]): Renderable[] {
25
- return parsedFiles.reduce<Renderable[]>((acc, parsedFile) => {
26
- const renderable = typeToRenderable(parsedFile, apply(referenceFinder, parsedFile.source.name), config);
27
- acc.push(renderable);
28
- return acc;
29
- }, []);
30
- }
31
-
32
- return {
33
- referencesByGroup: toReferenceGuide(parsedFiles),
34
- renderables: toRenderables(parsedFiles),
35
- };
36
- }
37
-
38
- function addToReferenceGuide(
39
- findLinkFromHome: (referenceName: string) => string | Link,
40
- config: MarkdownGeneratorConfig,
41
- references: Record<string, DocPageReference>,
42
- ) {
43
- return (acc: Record<string, ReferenceGuideReference[]>, parsedFile: ParsedFile) => {
44
- const group: string = getTypeGroup(parsedFile.type, config);
45
- if (!acc[group]) {
46
- acc[group] = [];
47
- }
48
- acc[group].push({
49
- reference: references[parsedFile.type.name],
50
- title: findLinkFromHome(parsedFile.type.name) as Link,
51
- description: adaptDescribable(parsedFile.type.docComment?.descriptionLines, findLinkFromHome).description ?? null,
52
- });
53
-
54
- return acc;
55
- };
56
- }
57
-
58
- function getTypeGroup(type: Type, config: MarkdownGeneratorConfig): string {
59
- const groupAnnotation = type.docComment?.annotations.find((annotation) => annotation.name.toLowerCase() === 'group');
60
- return groupAnnotation?.body ?? config.defaultGroupName;
61
- }
@@ -1,89 +0,0 @@
1
- import { ReferenceGuideReference, Renderable, RenderableBundle, RenderableEnum } from './types';
2
- import { DocPageData, DocumentationBundle } from '../../shared/types';
3
- import { pipe } from 'fp-ts/function';
4
- import { CompilationRequest, Template } from '../templates/template';
5
- import { enumMarkdownTemplate } from '../templates/enum-template';
6
- import { interfaceMarkdownTemplate } from '../templates/interface-template';
7
- import { classMarkdownTemplate } from '../templates/class-template';
8
- import { defaults } from '../../../defaults';
9
-
10
- export const convertToDocumentationBundle = (
11
- referenceGuideTemplate: string,
12
- { referencesByGroup, renderables }: RenderableBundle,
13
- ): DocumentationBundle => ({
14
- referenceGuide: {
15
- frontmatter: null,
16
- content: referencesToReferenceGuideContent(referencesByGroup, referenceGuideTemplate),
17
- outputDocPath: 'index.md',
18
- },
19
- docs: renderables.map((renderable: Renderable) =>
20
- renderableToPageData(Object.values(referencesByGroup).flat(), renderable),
21
- ),
22
- });
23
-
24
- function referencesToReferenceGuideContent(
25
- references: { [key: string]: ReferenceGuideReference[] },
26
- template: string,
27
- ): string {
28
- function alphabetizeReferences(references: { [key: string]: ReferenceGuideReference[] }): {
29
- [key: string]: ReferenceGuideReference[];
30
- } {
31
- return Object.keys(references)
32
- .sort((a, b) => a.localeCompare(b))
33
- .reduce<{ [key: string]: ReferenceGuideReference[] }>((acc, key) => {
34
- acc[key] = references[key].sort((a, b) => a.title.toString().localeCompare(b.title.toString()));
35
- return acc;
36
- }, {});
37
- }
38
-
39
- return pipe(references, alphabetizeReferences, (references) =>
40
- compile({
41
- template: template,
42
- source: references,
43
- }),
44
- );
45
- }
46
-
47
- function renderableToPageData(referenceGuideReference: ReferenceGuideReference[], renderable: Renderable): DocPageData {
48
- function buildDocOutput(renderable: Renderable, docContents: string): DocPageData {
49
- const reference: ReferenceGuideReference = referenceGuideReference.find(
50
- (ref) => ref.reference.source.name.toLowerCase() === renderable.name.toLowerCase(),
51
- )!;
52
-
53
- return {
54
- source: {
55
- filePath: renderable.filePath,
56
- name: renderable.name,
57
- type: renderable.type,
58
- },
59
- outputDocPath: reference!.reference.outputDocPath,
60
- frontmatter: null,
61
- content: docContents,
62
- group: renderable.doc.group ?? defaults.defaultGroupName,
63
- };
64
- }
65
-
66
- return pipe(renderable, resolveApexTypeTemplate, compile, (docContents) => buildDocOutput(renderable, docContents));
67
- }
68
-
69
- function resolveApexTypeTemplate(renderable: Renderable): CompilationRequest {
70
- function getTemplate(renderable: Renderable): string {
71
- switch (renderable.type) {
72
- case 'enum':
73
- return enumMarkdownTemplate;
74
- case 'interface':
75
- return interfaceMarkdownTemplate;
76
- case 'class':
77
- return classMarkdownTemplate;
78
- }
79
- }
80
-
81
- return {
82
- template: getTemplate(renderable),
83
- source: renderable as RenderableEnum,
84
- };
85
- }
86
-
87
- function compile(request: CompilationRequest): string {
88
- return Template.getInstance().compile(request);
89
- }
@@ -1,13 +0,0 @@
1
- import { CodeBlock, EmptyLine, InlineCode, RenderableContent } from './types';
2
-
3
- export function isEmptyLine(content: RenderableContent): content is EmptyLine {
4
- return Object.keys(content).includes('__type') && (content as { __type: string }).__type === 'empty-line';
5
- }
6
-
7
- export function isCodeBlock(content: RenderableContent): content is CodeBlock {
8
- return Object.keys(content).includes('__type') && (content as { __type: string }).__type === 'code-block';
9
- }
10
-
11
- export function isInlineCode(content: RenderableContent): content is InlineCode {
12
- return Object.keys(content).includes('__type') && (content as { __type: string }).__type === 'inline-code';
13
- }
@@ -1,180 +0,0 @@
1
- // Apex Reflection-based types
2
- import {
3
- Annotation as MirrorAnnotation,
4
- ClassMirror,
5
- DocComment,
6
- FieldMirror,
7
- MethodMirror,
8
- PropertyMirror,
9
- } from '@cparra/apex-reflection';
10
- import { DocPageReference } from '../../shared/types';
11
-
12
- export type Describable = string[] | undefined;
13
-
14
- export type Documentable = {
15
- annotations: MirrorAnnotation[];
16
- docComment?: DocComment;
17
- };
18
-
19
- export type InheritanceSupport = { inherited: boolean };
20
- export type ClassMirrorWithInheritanceChain = ClassMirror & { inheritanceChain: string[] };
21
- export type FieldMirrorWithInheritance = FieldMirror & InheritanceSupport;
22
- export type PropertyMirrorWithInheritance = PropertyMirror & InheritanceSupport;
23
- export type MethodMirrorWithInheritance = MethodMirror & InheritanceSupport;
24
-
25
- // Renderable types
26
-
27
- export type ReferenceGuideReference = {
28
- reference: DocPageReference;
29
- title: Link;
30
- description: RenderableContent[] | null;
31
- };
32
-
33
- export type RenderableBundle = {
34
- // References are grouped by their defined @group annotation
35
- referencesByGroup: Record<string, ReferenceGuideReference[]>;
36
- renderables: Renderable[];
37
- };
38
-
39
- export type Link = {
40
- readonly __type: 'link';
41
- title: string;
42
- url: string;
43
- };
44
-
45
- export type EmptyLine = {
46
- __type: 'empty-line';
47
- };
48
-
49
- export type StringOrLink = string | Link;
50
-
51
- export type GetRenderableContentByTypeName = (typeName: string) => StringOrLink;
52
-
53
- export type RenderableContent = StringOrLink | EmptyLine | CodeBlock | InlineCode;
54
-
55
- type EnumValue = {
56
- value: string;
57
- description?: RenderableContent[];
58
- };
59
-
60
- type CustomTag = {
61
- name: string;
62
- description?: RenderableContent[];
63
- };
64
-
65
- /**
66
- * Represents an annotation to a top-level type. For example, @NamespaceAccessible.
67
- */
68
- type Annotation = string;
69
-
70
- type CodeBlock = {
71
- readonly __type: 'code-block';
72
- language: string;
73
- content: string[];
74
- };
75
-
76
- type InlineCode = {
77
- readonly __type: 'inline-code';
78
- content: string;
79
- };
80
-
81
- type RenderableDocumentation = {
82
- annotations?: Annotation[];
83
- description?: RenderableContent[];
84
- customTags?: CustomTag[];
85
- example: RenderableSection<RenderableContent[] | undefined>;
86
- group?: string;
87
- author?: string;
88
- date?: string;
89
- sees?: StringOrLink[];
90
- };
91
-
92
- type RenderableType = {
93
- namespace?: string;
94
- headingLevel: number;
95
- heading: string;
96
- name: string;
97
- meta: {
98
- accessModifier: string;
99
- };
100
- doc: RenderableDocumentation;
101
- };
102
-
103
- type RenderableMethodParameter = {
104
- name: string;
105
- type: StringOrLink;
106
- description?: RenderableContent[];
107
- };
108
-
109
- type TypeSource = {
110
- type: StringOrLink;
111
- description?: RenderableContent[];
112
- };
113
-
114
- type RenderableConstructor = {
115
- headingLevel: number;
116
- heading: string;
117
- signature: RenderableSection<CodeBlock>;
118
- parameters?: RenderableSection<RenderableMethodParameter[] | undefined>;
119
- throws?: RenderableSection<TypeSource[] | undefined>;
120
- doc: RenderableDocumentation;
121
- };
122
-
123
- type RenderableMethod = {
124
- doc: RenderableDocumentation;
125
- headingLevel: number;
126
- heading: string;
127
- signature: RenderableSection<CodeBlock>;
128
- parameters: RenderableSection<RenderableMethodParameter[] | undefined>;
129
- returnType: RenderableSection<TypeSource>;
130
- throws: RenderableSection<TypeSource[] | undefined>;
131
- inherited?: boolean;
132
- };
133
-
134
- type RenderableField = {
135
- headingLevel: number;
136
- heading: string;
137
- type: RenderableSection<StringOrLink>;
138
- accessModifier: string;
139
- inherited?: boolean;
140
- signature: RenderableSection<CodeBlock>;
141
- doc: RenderableDocumentation;
142
- };
143
-
144
- export type RenderableSection<T> = {
145
- headingLevel: number;
146
- heading: string;
147
- value: T;
148
- };
149
-
150
- export type GroupedMember<T> = RenderableSection<T[]> & { groupDescription: string | undefined };
151
-
152
- export type RenderableClass = RenderableType & {
153
- type: 'class';
154
- extends?: StringOrLink[];
155
- implements?: StringOrLink[];
156
- classModifier?: string;
157
- sharingModifier?: string;
158
- constructors: RenderableSection<RenderableConstructor[] | GroupedMember<RenderableConstructor>[]> & {
159
- isGrouped: boolean;
160
- };
161
- methods: RenderableSection<RenderableMethod[] | GroupedMember<RenderableMethod>[]> & { isGrouped: boolean };
162
- fields: RenderableSection<RenderableField[] | GroupedMember<RenderableField>[]> & { isGrouped: boolean };
163
- properties: RenderableSection<RenderableField[] | GroupedMember<RenderableField>[]> & { isGrouped: boolean };
164
- innerClasses: RenderableSection<RenderableClass[]>;
165
- innerEnums: RenderableSection<RenderableEnum[]>;
166
- innerInterfaces: RenderableSection<RenderableInterface[]>;
167
- };
168
-
169
- export type RenderableInterface = RenderableType & {
170
- type: 'interface';
171
- extends?: StringOrLink[];
172
- methods: RenderableSection<RenderableMethod[]>;
173
- };
174
-
175
- export type RenderableEnum = RenderableType & {
176
- type: 'enum';
177
- values: RenderableSection<EnumValue[]>;
178
- };
179
-
180
- export type Renderable = (RenderableClass | RenderableInterface | RenderableEnum) & { filePath: string };