@cparra/apexdocs 2.25.0-alpha.9 → 2.25.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 (430) hide show
  1. package/.eslintrc.js +12 -0
  2. package/README.md +12 -73
  3. package/apexdocs.config.ts +13 -0
  4. package/docs/.nojekyll +0 -0
  5. package/docs/README.md +1 -0
  6. package/docs/index.html +22 -0
  7. package/docs/restapi.json +589 -0
  8. package/docs/types/Classes/nspc.AnotherInterface.md +22 -0
  9. package/docs/types/Classes/nspc.ChildClass.md +97 -0
  10. package/docs/types/Main/nspc.GroupedClass.md +10 -0
  11. package/docs/types/Main/nspc.SampleClass.md +190 -0
  12. package/docs/types/Misc-Group/nspc.EscapedAnnotations.md +4 -0
  13. package/docs/types/Misc-Group/nspc.GrandparentClass.md +13 -0
  14. package/docs/types/Misc-Group/nspc.InterfaceWithInheritance.md +29 -0
  15. package/docs/types/Misc-Group/nspc.MemberGrouping.md +13 -0
  16. package/docs/types/Misc-Group/nspc.ParentClass.md +37 -0
  17. package/docs/types/Misc-Group/nspc.Reference1.md +18 -0
  18. package/docs/types/Misc-Group/nspc.Reference2.md +12 -0
  19. package/docs/types/Misc-Group/nspc.Reference3.md +7 -0
  20. package/docs/types/Misc-Group/nspc.Reference4.md +7 -0
  21. package/docs/types/Misc-Group/nspc.Reference5.md +7 -0
  22. package/docs/types/Misc-Group/nspc.Reference6.md +9 -0
  23. package/docs/types/Misc-Group/nspc.Reference7.md +7 -0
  24. package/docs/types/Misc-Group/nspc.SampleClassWithoutModifier.md +11 -0
  25. package/docs/types/Misc-Group/nspc.SampleRestResource.md +211 -0
  26. package/docs/types/Misc-Group/nspc.SampleRestResourceWithInnerClass.md +34 -0
  27. package/docs/types/Misc-Group/nspc.SampleRestResourceWithoutApexDocs.md +14 -0
  28. package/docs/types/README.md +97 -0
  29. package/docs/types/Sample-Interfaces/nspc.SampleInterface.md +23 -0
  30. package/examples/includes/header.md +3 -0
  31. package/jest.config.js +1 -6
  32. package/lib/application/Apexdocs.d.ts +13 -0
  33. package/lib/application/Apexdocs.js +77 -0
  34. package/lib/application/Apexdocs.js.map +1 -0
  35. package/lib/cli/generate.d.ts +2 -0
  36. package/lib/cli/generate.js +131 -0
  37. package/lib/cli/generate.js.map +1 -0
  38. package/lib/index.d.ts +1 -0
  39. package/lib/index.js +18 -0
  40. package/lib/index.js.map +1 -0
  41. package/lib/model/apex-bundle.d.ts +6 -0
  42. package/lib/model/apex-bundle.js +11 -0
  43. package/lib/model/apex-bundle.js.map +1 -0
  44. package/lib/model/apex-type-wrappers/ClassMirrorWrapper.d.ts +7 -0
  45. package/lib/model/apex-type-wrappers/ClassMirrorWrapper.js +14 -0
  46. package/lib/model/apex-type-wrappers/ClassMirrorWrapper.js.map +1 -0
  47. package/lib/model/apex-type-wrappers/MethodMirrorWrapper.d.ts +7 -0
  48. package/lib/model/apex-type-wrappers/MethodMirrorWrapper.js +12 -0
  49. package/lib/model/apex-type-wrappers/MethodMirrorWrapper.js.map +1 -0
  50. package/lib/model/inheritance.d.ts +8 -0
  51. package/lib/model/inheritance.js +3 -0
  52. package/lib/model/inheritance.js.map +1 -0
  53. package/lib/model/manifest-diff.d.ts +27 -0
  54. package/lib/model/manifest-diff.js +69 -0
  55. package/lib/model/manifest-diff.js.map +1 -0
  56. package/lib/model/manifest.d.ts +22 -0
  57. package/lib/model/manifest.js +47 -0
  58. package/lib/model/manifest.js.map +1 -0
  59. package/lib/model/markdown-file.d.ts +16 -0
  60. package/lib/model/markdown-file.js +107 -0
  61. package/lib/model/markdown-file.js.map +1 -0
  62. package/lib/model/markdown-generation-util/doc-comment-annotation-util.d.ts +8 -0
  63. package/lib/model/markdown-generation-util/doc-comment-annotation-util.js +44 -0
  64. package/lib/model/markdown-generation-util/doc-comment-annotation-util.js.map +1 -0
  65. package/lib/model/markdown-generation-util/field-declaration-util.d.ts +3 -0
  66. package/lib/model/markdown-generation-util/field-declaration-util.js +55 -0
  67. package/lib/model/markdown-generation-util/field-declaration-util.js.map +1 -0
  68. package/lib/model/markdown-generation-util/index.d.ts +3 -0
  69. package/lib/model/markdown-generation-util/index.js +20 -0
  70. package/lib/model/markdown-generation-util/index.js.map +1 -0
  71. package/lib/model/markdown-generation-util/method-declaration-util.d.ts +4 -0
  72. package/lib/model/markdown-generation-util/method-declaration-util.js +115 -0
  73. package/lib/model/markdown-generation-util/method-declaration-util.js.map +1 -0
  74. package/lib/model/markdown-generation-util/type-declaration-util.d.ts +3 -0
  75. package/lib/model/markdown-generation-util/type-declaration-util.js +82 -0
  76. package/lib/model/markdown-generation-util/type-declaration-util.js.map +1 -0
  77. package/lib/model/markdown-home-file.d.ts +11 -0
  78. package/lib/model/markdown-home-file.js +54 -0
  79. package/lib/model/markdown-home-file.js.map +1 -0
  80. package/lib/model/markdown-type-file.d.ts +26 -0
  81. package/lib/model/markdown-type-file.js +134 -0
  82. package/lib/model/markdown-type-file.js.map +1 -0
  83. package/lib/model/openapi/apex-doc-types.d.ts +19 -0
  84. package/lib/model/openapi/apex-doc-types.js +5 -0
  85. package/lib/model/openapi/apex-doc-types.js.map +1 -0
  86. package/lib/model/openapi/open-api-types.d.ts +93 -0
  87. package/lib/model/openapi/open-api-types.js +3 -0
  88. package/lib/model/openapi/open-api-types.js.map +1 -0
  89. package/lib/model/openapi/open-api.d.ts +16 -0
  90. package/lib/model/openapi/open-api.js +34 -0
  91. package/lib/model/openapi/open-api.js.map +1 -0
  92. package/lib/model/openapi/openapi-type-file.d.ts +7 -0
  93. package/lib/model/openapi/openapi-type-file.js +17 -0
  94. package/lib/model/openapi/openapi-type-file.js.map +1 -0
  95. package/lib/model/outputFile.d.ts +10 -0
  96. package/lib/model/outputFile.js +29 -0
  97. package/lib/model/outputFile.js.map +1 -0
  98. package/lib/model/types-repository.d.ts +16 -0
  99. package/lib/model/types-repository.js +54 -0
  100. package/lib/model/types-repository.js.map +1 -0
  101. package/lib/service/apex-file-reader.d.ts +14 -0
  102. package/lib/service/apex-file-reader.js +46 -0
  103. package/lib/service/apex-file-reader.js.map +1 -0
  104. package/lib/service/file-system.d.ts +14 -0
  105. package/lib/service/file-system.js +25 -0
  106. package/lib/service/file-system.js.map +1 -0
  107. package/lib/service/file-writer.d.ts +6 -0
  108. package/lib/service/file-writer.js +34 -0
  109. package/lib/service/file-writer.js.map +1 -0
  110. package/lib/service/manifest-factory.d.ts +10 -0
  111. package/lib/service/manifest-factory.js +14 -0
  112. package/lib/service/manifest-factory.js.map +1 -0
  113. package/lib/service/metadata-processor.d.ts +3 -0
  114. package/lib/service/metadata-processor.js +17 -0
  115. package/lib/service/metadata-processor.js.map +1 -0
  116. package/lib/service/parser.d.ts +21 -0
  117. package/lib/service/parser.js +135 -0
  118. package/lib/service/parser.js.map +1 -0
  119. package/lib/service/state.d.ts +9 -0
  120. package/lib/service/state.js +20 -0
  121. package/lib/service/state.js.map +1 -0
  122. package/lib/service/walkers/class-walker.d.ts +4 -0
  123. package/lib/service/walkers/class-walker.js +33 -0
  124. package/lib/service/walkers/class-walker.js.map +1 -0
  125. package/lib/service/walkers/enum-walker.d.ts +4 -0
  126. package/lib/service/walkers/enum-walker.js +11 -0
  127. package/lib/service/walkers/enum-walker.js.map +1 -0
  128. package/lib/service/walkers/interface-walker.d.ts +4 -0
  129. package/lib/service/walkers/interface-walker.js +15 -0
  130. package/lib/service/walkers/interface-walker.js.map +1 -0
  131. package/lib/service/walkers/walker-factory.d.ts +5 -0
  132. package/lib/service/walkers/walker-factory.js +21 -0
  133. package/lib/service/walkers/walker-factory.js.map +1 -0
  134. package/lib/service/walkers/walker.d.ts +19 -0
  135. package/lib/service/walkers/walker.js +17 -0
  136. package/lib/service/walkers/walker.js.map +1 -0
  137. package/lib/settings.d.ts +64 -0
  138. package/lib/settings.js +89 -0
  139. package/lib/settings.js.map +1 -0
  140. package/lib/test-helpers/AnnotationBuilder.d.ts +12 -0
  141. package/lib/test-helpers/AnnotationBuilder.js +31 -0
  142. package/lib/test-helpers/AnnotationBuilder.js.map +1 -0
  143. package/lib/test-helpers/ClassMirrorBuilder.d.ts +18 -0
  144. package/lib/test-helpers/ClassMirrorBuilder.js +54 -0
  145. package/lib/test-helpers/ClassMirrorBuilder.js.map +1 -0
  146. package/lib/test-helpers/DocCommentAnnotationBuilder.d.ts +8 -0
  147. package/lib/test-helpers/DocCommentAnnotationBuilder.js +26 -0
  148. package/lib/test-helpers/DocCommentAnnotationBuilder.js.map +1 -0
  149. package/lib/test-helpers/DocCommentBuilder.d.ts +12 -0
  150. package/lib/test-helpers/DocCommentBuilder.js +38 -0
  151. package/lib/test-helpers/DocCommentBuilder.js.map +1 -0
  152. package/lib/test-helpers/FieldMirrorBuilder.d.ts +18 -0
  153. package/lib/test-helpers/FieldMirrorBuilder.js +54 -0
  154. package/lib/test-helpers/FieldMirrorBuilder.js.map +1 -0
  155. package/lib/test-helpers/MethodMirrorBuilder.d.ts +10 -0
  156. package/lib/test-helpers/MethodMirrorBuilder.js +37 -0
  157. package/lib/test-helpers/MethodMirrorBuilder.js.map +1 -0
  158. package/lib/test-helpers/SettingsBuilder.d.ts +8 -0
  159. package/lib/test-helpers/SettingsBuilder.js +27 -0
  160. package/lib/test-helpers/SettingsBuilder.js.map +1 -0
  161. package/lib/transpiler/factory.d.ts +6 -0
  162. package/lib/transpiler/factory.js +32 -0
  163. package/lib/transpiler/factory.js.map +1 -0
  164. package/lib/transpiler/file-container.d.ts +6 -0
  165. package/lib/transpiler/file-container.js +16 -0
  166. package/lib/transpiler/file-container.js.map +1 -0
  167. package/lib/transpiler/generator-choices.d.ts +1 -0
  168. package/lib/transpiler/generator-choices.js +3 -0
  169. package/lib/transpiler/generator-choices.js.map +1 -0
  170. package/lib/transpiler/markdown/class-file-generatorHelper.d.ts +8 -0
  171. package/lib/transpiler/markdown/class-file-generatorHelper.js +56 -0
  172. package/lib/transpiler/markdown/class-file-generatorHelper.js.map +1 -0
  173. package/lib/transpiler/markdown/docsify/docsify-docs-processor.d.ts +6 -0
  174. package/lib/transpiler/markdown/docsify/docsify-docs-processor.js +13 -0
  175. package/lib/transpiler/markdown/docsify/docsify-docs-processor.js.map +1 -0
  176. package/lib/transpiler/markdown/jekyll/jekyll-docsProcessor.d.ts +11 -0
  177. package/lib/transpiler/markdown/jekyll/jekyll-docsProcessor.js +51 -0
  178. package/lib/transpiler/markdown/jekyll/jekyll-docsProcessor.js.map +1 -0
  179. package/lib/transpiler/markdown/markdown-transpiler-base.d.ts +11 -0
  180. package/lib/transpiler/markdown/markdown-transpiler-base.js +24 -0
  181. package/lib/transpiler/markdown/markdown-transpiler-base.js.map +1 -0
  182. package/lib/transpiler/markdown/plain-markdown/plain-docsProcessor.d.ts +6 -0
  183. package/lib/transpiler/markdown/plain-markdown/plain-docsProcessor.js +14 -0
  184. package/lib/transpiler/markdown/plain-markdown/plain-docsProcessor.js.map +1 -0
  185. package/lib/transpiler/openapi/open-api-docs-processor.d.ts +13 -0
  186. package/lib/transpiler/openapi/open-api-docs-processor.js +75 -0
  187. package/lib/transpiler/openapi/open-api-docs-processor.js.map +1 -0
  188. package/lib/transpiler/openapi/parsers/Builder.d.ts +16 -0
  189. package/lib/transpiler/openapi/parsers/Builder.js +30 -0
  190. package/lib/transpiler/openapi/parsers/Builder.js.map +1 -0
  191. package/lib/transpiler/openapi/parsers/MethodParser.d.ts +20 -0
  192. package/lib/transpiler/openapi/parsers/MethodParser.js +167 -0
  193. package/lib/transpiler/openapi/parsers/MethodParser.js.map +1 -0
  194. package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.d.ts +7 -0
  195. package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.js +11 -0
  196. package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.js.map +1 -0
  197. package/lib/transpiler/openapi/parsers/ReferenceBuilder.d.ts +39 -0
  198. package/lib/transpiler/openapi/parsers/ReferenceBuilder.js +226 -0
  199. package/lib/transpiler/openapi/parsers/ReferenceBuilder.js.map +1 -0
  200. package/lib/transpiler/openapi/parsers/RequestBodyBuilder.d.ts +10 -0
  201. package/lib/transpiler/openapi/parsers/RequestBodyBuilder.js +20 -0
  202. package/lib/transpiler/openapi/parsers/RequestBodyBuilder.js.map +1 -0
  203. package/lib/transpiler/openapi/parsers/ResponsesBuilder.d.ts +7 -0
  204. package/lib/transpiler/openapi/parsers/ResponsesBuilder.js +22 -0
  205. package/lib/transpiler/openapi/parsers/ResponsesBuilder.js.map +1 -0
  206. package/lib/transpiler/processor-type-transpiler.d.ts +10 -0
  207. package/lib/transpiler/processor-type-transpiler.js +9 -0
  208. package/lib/transpiler/processor-type-transpiler.js.map +1 -0
  209. package/lib/transpiler/transpiler.d.ts +5 -0
  210. package/lib/transpiler/transpiler.js +27 -0
  211. package/lib/transpiler/transpiler.js.map +1 -0
  212. package/lib/util/error-logger.d.ts +8 -0
  213. package/lib/util/error-logger.js +90 -0
  214. package/lib/util/error-logger.js.map +1 -0
  215. package/lib/util/logger.d.ts +21 -0
  216. package/lib/util/logger.js +58 -0
  217. package/lib/util/logger.js.map +1 -0
  218. package/lib/util/string-utils.d.ts +2 -0
  219. package/lib/util/string-utils.js +15 -0
  220. package/lib/util/string-utils.js.map +1 -0
  221. package/package.json +36 -35
  222. package/src/application/Apexdocs.ts +70 -17
  223. package/src/cli/generate.ts +131 -10
  224. package/src/index.ts +1 -36
  225. package/src/model/__tests__/manifest-diff.spec.ts +147 -0
  226. package/src/model/apex-bundle.ts +3 -0
  227. package/src/{core/openapi → model}/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +3 -3
  228. package/src/model/inheritance.ts +7 -0
  229. package/src/model/manifest-diff.ts +94 -0
  230. package/src/model/manifest.ts +74 -0
  231. package/src/model/markdown-file.ts +121 -0
  232. package/src/model/markdown-generation-util/doc-comment-annotation-util.ts +50 -0
  233. package/src/model/markdown-generation-util/field-declaration-util.ts +71 -0
  234. package/src/model/markdown-generation-util/index.ts +3 -0
  235. package/src/model/markdown-generation-util/method-declaration-util.ts +166 -0
  236. package/src/model/markdown-generation-util/type-declaration-util.ts +91 -0
  237. package/src/model/markdown-home-file.ts +58 -0
  238. package/src/model/markdown-type-file.ts +165 -0
  239. package/src/{core → model}/openapi/open-api-types.ts +2 -2
  240. package/src/model/openapi/openapi-type-file.ts +14 -0
  241. package/src/model/outputFile.ts +29 -0
  242. package/src/{core/openapi → model}/types-repository.ts +9 -0
  243. package/src/service/__tests__/apex-file-reader.spec.ts +92 -0
  244. package/src/{core/openapi → service}/__tests__/manifest-factory.spec.ts +2 -1
  245. package/src/service/apex-file-reader.ts +51 -0
  246. package/src/service/file-writer.ts +34 -0
  247. package/src/{core/openapi → service}/manifest-factory.ts +3 -3
  248. package/src/service/metadata-processor.ts +16 -0
  249. package/src/{core/openapi → service}/parser.ts +9 -9
  250. package/src/service/state.ts +24 -0
  251. package/src/service/walkers/class-walker.ts +30 -0
  252. package/src/service/walkers/enum-walker.ts +7 -0
  253. package/src/service/walkers/interface-walker.ts +12 -0
  254. package/src/service/walkers/walker-factory.ts +19 -0
  255. package/src/service/walkers/walker.ts +42 -0
  256. package/src/settings.ts +147 -0
  257. package/src/test-helpers/ClassMirrorBuilder.ts +1 -14
  258. package/src/test-helpers/FieldMirrorBuilder.ts +1 -1
  259. package/src/test-helpers/MethodMirrorBuilder.ts +6 -46
  260. package/src/test-helpers/SettingsBuilder.ts +4 -1
  261. package/src/transpiler/factory.ts +33 -0
  262. package/src/transpiler/file-container.ts +13 -0
  263. package/src/transpiler/generator-choices.ts +1 -0
  264. package/src/transpiler/markdown/class-file-generatorHelper.ts +58 -0
  265. package/src/transpiler/markdown/docsify/docsify-docs-processor.ts +12 -0
  266. package/src/transpiler/markdown/jekyll/jekyll-docsProcessor.ts +50 -0
  267. package/src/transpiler/markdown/markdown-transpiler-base.ts +28 -0
  268. package/src/transpiler/markdown/plain-markdown/plain-docsProcessor.ts +12 -0
  269. package/src/{core → transpiler}/openapi/__tests__/open-api-docs-processor.spec.ts +1 -1
  270. package/src/{core → transpiler}/openapi/open-api-docs-processor.ts +10 -9
  271. package/src/{core → transpiler}/openapi/parsers/Builder.ts +3 -3
  272. package/src/{core → transpiler}/openapi/parsers/MethodParser.ts +6 -6
  273. package/src/{core → transpiler}/openapi/parsers/ParameterObjectBuilder.ts +2 -2
  274. package/src/{core → transpiler}/openapi/parsers/ReferenceBuilder.ts +6 -7
  275. package/src/{core → transpiler}/openapi/parsers/RequestBodyBuilder.ts +2 -2
  276. package/src/{core → transpiler}/openapi/parsers/ResponsesBuilder.ts +2 -2
  277. package/src/{core → transpiler}/openapi/parsers/__tests__/MethodParser.spec.ts +1 -1
  278. package/src/{core → transpiler}/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +2 -2
  279. package/src/{core → transpiler}/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +2 -2
  280. package/src/{core → transpiler}/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +2 -2
  281. package/src/{core → transpiler}/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +1 -1
  282. package/src/transpiler/processor-type-transpiler.ts +18 -0
  283. package/src/{core/openapi → transpiler}/transpiler.ts +6 -2
  284. package/src/util/error-logger.ts +4 -4
  285. package/src/util/logger.ts +6 -6
  286. package/src/util/string-utils.ts +4 -0
  287. package/tsconfig.json +3 -8
  288. package/.github/workflows/ci.yaml +0 -22
  289. package/__mocks__/chalk.js +0 -12
  290. package/__mocks__/log-update.js +0 -6
  291. package/dist/cli/generate.js +0 -2964
  292. package/dist/defaults-DUwru49Q.js +0 -12
  293. package/dist/defaults-SH0Rsi5E.js +0 -11
  294. package/dist/index.d.ts +0 -100
  295. package/dist/index.js +0 -36
  296. package/eslint.config.mjs +0 -10
  297. package/examples/plain-markdown/.forceignore +0 -12
  298. package/examples/plain-markdown/config/project-scratch-def.json +0 -5
  299. package/examples/plain-markdown/docs/index.md +0 -109
  300. package/examples/plain-markdown/docs/miscellaneous/BaseClass.md +0 -16
  301. package/examples/plain-markdown/docs/miscellaneous/MultiInheritanceClass.md +0 -72
  302. package/examples/plain-markdown/docs/miscellaneous/ParentInterface.md +0 -15
  303. package/examples/plain-markdown/docs/miscellaneous/ReferencedEnum.md +0 -8
  304. package/examples/plain-markdown/docs/miscellaneous/SampleException.md +0 -24
  305. package/examples/plain-markdown/docs/miscellaneous/SampleInterface.md +0 -112
  306. package/examples/plain-markdown/docs/miscellaneous/Url.md +0 -309
  307. package/examples/plain-markdown/docs/sample-enums/SampleEnum.md +0 -36
  308. package/examples/plain-markdown/docs/samplegroup/SampleClass.md +0 -170
  309. package/examples/plain-markdown/force-app/classes/BaseClass.cls +0 -3
  310. package/examples/plain-markdown/force-app/classes/MultiInheritanceClass.cls +0 -1
  311. package/examples/plain-markdown/force-app/classes/ParentInterface.cls +0 -3
  312. package/examples/plain-markdown/force-app/classes/ReferencedEnum.cls +0 -3
  313. package/examples/plain-markdown/force-app/classes/SampleClass.cls +0 -72
  314. package/examples/plain-markdown/force-app/classes/SampleEnum.cls +0 -30
  315. package/examples/plain-markdown/force-app/classes/SampleException.cls +0 -17
  316. package/examples/plain-markdown/force-app/classes/SampleInterface.cls +0 -46
  317. package/examples/plain-markdown/force-app/classes/Url.cls +0 -194
  318. package/examples/plain-markdown/package-lock.json +0 -665
  319. package/examples/plain-markdown/package.json +0 -20
  320. package/examples/plain-markdown/sfdx-project.json +0 -12
  321. package/examples/vitepress/.forceignore +0 -12
  322. package/examples/vitepress/apexdocs.config.ts +0 -106
  323. package/examples/vitepress/config/project-scratch-def.json +0 -13
  324. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js +0 -259
  325. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js.map +0 -7
  326. package/examples/vitepress/docs/.vitepress/cache/deps/_metadata.json +0 -40
  327. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js +0 -11474
  328. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js.map +0 -7
  329. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js +0 -9172
  330. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js.map +0 -7
  331. package/examples/vitepress/docs/.vitepress/cache/deps/package.json +0 -3
  332. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4339
  333. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  334. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -567
  335. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  336. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js +0 -323
  337. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js.map +0 -7
  338. package/examples/vitepress/docs/.vitepress/config.mts +0 -21
  339. package/examples/vitepress/docs/.vitepress/sidebar.json +0 -119
  340. package/examples/vitepress/docs/api-examples.md +0 -49
  341. package/examples/vitepress/docs/index-frontmatter.md +0 -16
  342. package/examples/vitepress/docs/index.md +0 -56
  343. package/examples/vitepress/docs/markdown-examples.md +0 -85
  344. package/examples/vitepress/docs/miscellaneous/BaseClass.md +0 -20
  345. package/examples/vitepress/docs/miscellaneous/MultiInheritanceClass.md +0 -76
  346. package/examples/vitepress/docs/miscellaneous/ParentInterface.md +0 -19
  347. package/examples/vitepress/docs/miscellaneous/ReferencedEnum.md +0 -15
  348. package/examples/vitepress/docs/miscellaneous/SampleException.md +0 -28
  349. package/examples/vitepress/docs/miscellaneous/SampleInterface.md +0 -116
  350. package/examples/vitepress/docs/miscellaneous/Url.md +0 -317
  351. package/examples/vitepress/docs/sample-enums/SampleEnum.md +0 -40
  352. package/examples/vitepress/docs/samplegroup/SampleClass.md +0 -174
  353. package/examples/vitepress/force-app/main/default/classes/BaseClass.cls +0 -3
  354. package/examples/vitepress/force-app/main/default/classes/MultiInheritanceClass.cls +0 -1
  355. package/examples/vitepress/force-app/main/default/classes/ParentInterface.cls +0 -3
  356. package/examples/vitepress/force-app/main/default/classes/ReferencedEnum.cls +0 -5
  357. package/examples/vitepress/force-app/main/default/classes/SampleClass.cls +0 -72
  358. package/examples/vitepress/force-app/main/default/classes/SampleEnum.cls +0 -30
  359. package/examples/vitepress/force-app/main/default/classes/SampleException.cls +0 -17
  360. package/examples/vitepress/force-app/main/default/classes/SampleInterface.cls +0 -46
  361. package/examples/vitepress/force-app/main/default/classes/Url.cls +0 -198
  362. package/examples/vitepress/package-lock.json +0 -2574
  363. package/examples/vitepress/package.json +0 -18
  364. package/examples/vitepress/sfdx-project.json +0 -12
  365. package/jest.d.ts +0 -7
  366. package/src/application/__tests__/apex-file-reader.spec.ts +0 -104
  367. package/src/application/apex-file-reader.ts +0 -42
  368. package/src/application/file-writer.ts +0 -21
  369. package/src/application/generators/markdown.ts +0 -58
  370. package/src/application/generators/openapi.ts +0 -56
  371. package/src/cli/args.ts +0 -43
  372. package/src/cli/commands/markdown.ts +0 -58
  373. package/src/core/manifest.ts +0 -90
  374. package/src/core/markdown/__test__/expect-extensions.ts +0 -32
  375. package/src/core/markdown/__test__/generating-class-docs.spec.ts +0 -735
  376. package/src/core/markdown/__test__/generating-enum-docs.spec.ts +0 -385
  377. package/src/core/markdown/__test__/generating-interface-docs.spec.ts +0 -461
  378. package/src/core/markdown/__test__/generating-reference-guide.spec.ts +0 -180
  379. package/src/core/markdown/__test__/inheritance-chain.test.ts +0 -54
  380. package/src/core/markdown/__test__/test-helpers.ts +0 -22
  381. package/src/core/markdown/adapters/__tests__/documentables.spec.ts +0 -109
  382. package/src/core/markdown/adapters/__tests__/interface-adapter.spec.ts +0 -147
  383. package/src/core/markdown/adapters/__tests__/references.spec.ts +0 -136
  384. package/src/core/markdown/adapters/apex-types.ts +0 -238
  385. package/src/core/markdown/adapters/documentables.ts +0 -116
  386. package/src/core/markdown/adapters/fields-and-properties.ts +0 -45
  387. package/src/core/markdown/adapters/inline.ts +0 -143
  388. package/src/core/markdown/adapters/methods-and-constructors.ts +0 -133
  389. package/src/core/markdown/adapters/reference-guide.ts +0 -35
  390. package/src/core/markdown/adapters/renderable-bundle.ts +0 -68
  391. package/src/core/markdown/adapters/renderable-to-page-data.ts +0 -89
  392. package/src/core/markdown/adapters/type-utils.ts +0 -13
  393. package/src/core/markdown/adapters/types.d.ts +0 -180
  394. package/src/core/markdown/generate-docs.ts +0 -215
  395. package/src/core/markdown/reflection/error-handling.ts +0 -37
  396. package/src/core/markdown/reflection/filter-scope.ts +0 -13
  397. package/src/core/markdown/reflection/inheritance-chain-expanion.ts +0 -22
  398. package/src/core/markdown/reflection/inheritance-chain.ts +0 -23
  399. package/src/core/markdown/reflection/inherited-member-expansion.ts +0 -105
  400. package/src/core/markdown/reflection/reflect-source.ts +0 -45
  401. package/src/core/markdown/reflection/sort-members.ts +0 -59
  402. package/src/core/markdown/templates/class-template.ts +0 -75
  403. package/src/core/markdown/templates/constructors-partial-template.ts +0 -32
  404. package/src/core/markdown/templates/documentable-partial-template.ts +0 -26
  405. package/src/core/markdown/templates/enum-template.ts +0 -12
  406. package/src/core/markdown/templates/fieldsPartialTemplate.ts +0 -23
  407. package/src/core/markdown/templates/grouped-members-partial-template.ts +0 -6
  408. package/src/core/markdown/templates/hookable.ts +0 -7
  409. package/src/core/markdown/templates/interface-template.ts +0 -16
  410. package/src/core/markdown/templates/methods-partial-template.ts +0 -43
  411. package/src/core/markdown/templates/reference-guide.ts +0 -14
  412. package/src/core/markdown/templates/template.ts +0 -114
  413. package/src/core/markdown/templates/type-doc-partial.ts +0 -27
  414. package/src/core/markdown/utils.ts +0 -3
  415. package/src/core/openapi/file-container.ts +0 -13
  416. package/src/core/openapi/openapi-type-file.ts +0 -12
  417. package/src/core/parse-apex-metadata.ts +0 -14
  418. package/src/core/settings.ts +0 -56
  419. package/src/core/shared/types.d.ts +0 -130
  420. package/src/core/shared/utils.ts +0 -5
  421. package/src/defaults.ts +0 -8
  422. package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -39
  423. package/src/util/fp.ts +0 -3
  424. /package/src/{core/__test__ → model/__tests__}/manifest.spec.ts +0 -0
  425. /package/src/{core/openapi → model}/apex-type-wrappers/ClassMirrorWrapper.ts +0 -0
  426. /package/src/{core/openapi → model}/apex-type-wrappers/MethodMirrorWrapper.ts +0 -0
  427. /package/src/{core → model}/openapi/__tests__/open-api.spec.ts +0 -0
  428. /package/src/{core → model}/openapi/apex-doc-types.ts +0 -0
  429. /package/src/{core → model}/openapi/open-api.ts +0 -0
  430. /package/src/{application → service}/file-system.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cparra/apexdocs",
3
- "version": "2.25.0-alpha.9",
3
+ "version": "2.25.0",
4
4
  "description": "Library with CLI capabilities to generate documentation for Salesforce Apex classes.",
5
5
  "keywords": [
6
6
  "apex",
@@ -10,18 +10,23 @@
10
10
  "apex-docs",
11
11
  "docs"
12
12
  ],
13
- "exports": "./dist/index.js",
14
- "types": "./dist/index.d.ts",
13
+ "main": "lib/index.js",
15
14
  "bin": {
16
- "apexdocs": "./dist/cli/generate.js"
15
+ "apexdocs-generate": "lib/cli/generate.js"
17
16
  },
17
+ "types": "lib/index.d.ts",
18
18
  "scripts": {
19
- "test": "npm run build && jest",
20
- "build": "rimraf ./lib && npm run lint && tsc --noEmit && pkgroll",
19
+ "test": "jest --coverage",
20
+ "build": "rimraf ./lib && npm run lint && tsc --declaration",
21
21
  "lint": "eslint \"./src/**/*.{js,ts}\" --quiet --fix",
22
22
  "prepare": "npm run build",
23
23
  "version": "npm run format && git add -A src",
24
- "postversion": "git push && git push --tags"
24
+ "postversion": "git push && git push --tags",
25
+ "docs:init": "docsify init docs",
26
+ "docs:serve": "docsify serve docs",
27
+ "execute:example": "rimraf ./docs/types && node lib/cli/generate.js -s examples/force-app -t docs/types --scope global public private protected -g docsify --defaultGroupName \"Misc Group\" --namespace nspc --title \"Sample Documentation\" --documentationRootDir types",
28
+ "execute:example:index:only": "node lib/cli/generate.js -s examples/force-app -t docs --scope global public private -g docsify --indexOnly",
29
+ "execute:example:openapi": "node lib/cli/generate.js -s examples/force-app -t docs -g openapi --openApiTitle \"Sample REST Api\" --namespace nspc --openApiFileName restapi"
25
30
  },
26
31
  "author": "Cesar Parra",
27
32
  "license": "MIT",
@@ -30,22 +35,26 @@
30
35
  "url": "https://github.com/cesarParra/apexdocs"
31
36
  },
32
37
  "devDependencies": {
33
- "@eslint/js": "^9.6.0",
34
- "@types/eslint__js": "^8.42.3",
35
- "@types/jest": "^29.5.12",
36
- "@types/node": "^20.14.10",
37
- "@types/shelljs": "^0.8.15",
38
- "eslint": "^8.57.0",
39
- "eslint-config-prettier": "^9.1.0",
40
- "husky": "^9.0.11",
41
- "jest": "^29.7.0",
42
- "lint-staged": "^15.2.7",
43
- "pkgroll": "^2.4.2",
44
- "prettier": "^3.3.2",
45
- "rimraf": "^6.0.0",
46
- "ts-jest": "^29.2.0",
47
- "typescript": "^5.5.3",
48
- "typescript-eslint": "^7.16.0"
38
+ "@types/html-entities": "^1.3.4",
39
+ "@types/jest": "^27.4.1",
40
+ "@types/js-yaml": "^4.0.5",
41
+ "@types/node": "^13.7.4",
42
+ "@types/shelljs": "^0.8.6",
43
+ "@types/yargs": "^15.0.3",
44
+ "@typescript-eslint/eslint-plugin": "^5.41.0",
45
+ "@typescript-eslint/parser": "^5.41.0",
46
+ "docsify": "^4.13.1",
47
+ "docsify-cli": "^4.4.4",
48
+ "eslint": "^8.0.1",
49
+ "eslint-config-prettier": "^8.3.0",
50
+ "eslint-plugin-prettier": "^4.0.0",
51
+ "husky": "^8.0.3",
52
+ "jest": "^27.5.1",
53
+ "lint-staged": "^13.2.1",
54
+ "prettier": "^2.4.1",
55
+ "rimraf": "^3.0.2",
56
+ "ts-jest": "^27.1.3",
57
+ "typescript": "^4.8.4"
49
58
  },
50
59
  "husky": {
51
60
  "hooks": {
@@ -58,21 +67,13 @@
58
67
  ]
59
68
  },
60
69
  "dependencies": {
61
- "@cparra/apex-reflection": "2.11.3",
62
- "@types/js-yaml": "^4.0.9",
63
- "@types/yargs": "^17.0.32",
70
+ "@cparra/apex-reflection": "2.12.1",
64
71
  "chalk": "^4.1.2",
65
72
  "cosmiconfig": "^9.0.0",
66
- "cosmiconfig-typescript-loader": "^5.0.0",
67
- "fast-xml-parser": "^4.4.0",
68
- "fp-ts": "^2.16.8",
69
- "handlebars": "^4.7.8",
73
+ "fast-xml-parser": "^4.0.1",
70
74
  "js-yaml": "^4.1.0",
71
75
  "log-update": "4.0.0",
72
- "type-fest": "^4.23.0",
73
- "yargs": "^17.7.2"
74
- },
75
- "imports": {
76
- "#utils/*": "./src/util/*.ts"
76
+ "xss": "^1.0.11",
77
+ "yargs": "^16.0.3"
77
78
  }
78
79
  }
@@ -1,10 +1,17 @@
1
- import markdown from './generators/markdown';
2
- import openApi from './generators/openapi';
3
-
4
- import { ApexFileReader } from './apex-file-reader';
5
- import { DefaultFileSystem } from './file-system';
6
- import { Logger } from '#utils/logger';
7
- import { UserDefinedConfig } from '../core/shared/types';
1
+ import { ApexFileReader } from '../service/apex-file-reader';
2
+ import { DefaultFileSystem } from '../service/file-system';
3
+ import { ReflectionResult, reflect, Type } from '@cparra/apex-reflection';
4
+ import { Logger } from '../util/logger';
5
+ import { createManifest } from '../service/manifest-factory';
6
+ import { RawBodyParser } from '../service/parser';
7
+ import { Settings, TargetFile } from '../settings';
8
+ import Transpiler from '../transpiler/transpiler';
9
+ import { FileWriter } from '../service/file-writer';
10
+ import ErrorLogger from '../util/error-logger';
11
+ import ApexBundle from '../model/apex-bundle';
12
+ import Manifest from '../model/manifest';
13
+ import { TypesRepository } from '../model/types-repository';
14
+ import { TypeTranspilerFactory } from '../transpiler/factory';
8
15
 
9
16
  /**
10
17
  * Application entry-point to generate documentation out of Apex source files.
@@ -13,18 +20,64 @@ export class Apexdocs {
13
20
  /**
14
21
  * Generates documentation out of Apex source files.
15
22
  */
16
- static async generate(config: UserDefinedConfig): Promise<void> {
17
- Logger.logSingle('Initializing...', false);
23
+ static generate(): void {
24
+ Logger.log('Initializing...');
25
+ const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem());
26
+ const manifest = createManifest(new RawBodyParser(fileBodies), this._reflectionWithLogger);
27
+ TypesRepository.getInstance().populateAll(manifest.types);
28
+ const filteredTypes = this.filterByScopes(manifest);
29
+ TypesRepository.getInstance().populateScoped(filteredTypes);
30
+ const processor = TypeTranspilerFactory.get(Settings.getInstance().targetGenerator);
31
+ Transpiler.generate(filteredTypes, processor);
32
+ const generatedFiles = processor.fileBuilder().files();
33
+
34
+ const files: TargetFile[] = [];
35
+ FileWriter.write(generatedFiles, (file: TargetFile) => {
36
+ Logger.logSingle(`${file.name} processed.`, false, 'green', false);
37
+ files.push(file);
38
+ });
18
39
 
19
- const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem(), config.sourceDir, config.includeMetadata);
40
+ Settings.getInstance().onAfterProcess(files);
41
+
42
+ // Error logging
43
+ ErrorLogger.logErrors(filteredTypes);
44
+ }
20
45
 
21
- switch (config.targetGenerator) {
22
- case 'markdown':
23
- await markdown(fileBodies, config);
24
- break;
25
- case 'openapi':
26
- openApi(fileBodies, config);
27
- break;
46
+ private static filterByScopes(manifest: Manifest) {
47
+ let filteredTypes: Type[];
48
+ let filteredLogMessage;
49
+ if (Settings.getInstance().config.targetGenerator !== 'openapi') {
50
+ filteredTypes = manifest.filteredByAccessModifierAndAnnotations(Settings.getInstance().scope);
51
+ filteredLogMessage = `Filtered ${manifest.types.length - filteredTypes.length} file(s) based on scope: ${
52
+ Settings.getInstance().scope
53
+ }`;
54
+ } else {
55
+ // If we are dealing with an OpenApi generator, we ignore the passed in access modifiers, and instead
56
+ // we only keep classes annotated as @RestResource
57
+ filteredTypes = manifest.filteredByAccessModifierAndAnnotations([
58
+ 'restresource',
59
+ 'httpdelete',
60
+ 'httpget',
61
+ 'httppatch',
62
+ 'httppost',
63
+ 'httpput',
64
+ ]);
65
+ filteredLogMessage = `Filtered ${
66
+ manifest.types.length - filteredTypes.length
67
+ } file(s), only keeping classes annotated as @RestResource.`;
28
68
  }
69
+ Logger.clear();
70
+
71
+ Logger.logSingle(filteredLogMessage, false, 'green', false);
72
+ Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, 'green', false);
73
+ return filteredTypes;
29
74
  }
75
+
76
+ static _reflectionWithLogger = (apexBundle: ApexBundle): ReflectionResult => {
77
+ const result = reflect(apexBundle.rawTypeContent);
78
+ if (result.error) {
79
+ Logger.error(`${apexBundle.filePath} - Parsing error ${result.error?.message}`);
80
+ }
81
+ return result;
82
+ };
30
83
  }
@@ -1,16 +1,137 @@
1
1
  #!/usr/bin/env node
2
+ import * as yargs from 'yargs';
3
+
4
+ import { Settings } from '../settings';
2
5
  import { Apexdocs } from '../application/Apexdocs';
3
- import { extractArgs } from './args';
6
+ import { GeneratorChoices } from '../transpiler/generator-choices';
7
+ import { cosmiconfig } from 'cosmiconfig';
4
8
 
5
- function main() {
6
- function cathError(error: Error) {
7
- console.error(error);
8
- process.exit(1);
9
+ const result = cosmiconfig('apexdocs').search();
10
+ result.then((config) => {
11
+ yargs.config(config?.config);
12
+ let argv = yargs.options({
13
+ sourceDir: {
14
+ type: 'string',
15
+ alias: 's',
16
+ demandOption: true,
17
+ describe: 'The directory location which contains your apex .cls classes.',
18
+ },
19
+ targetDir: {
20
+ type: 'string',
21
+ alias: 't',
22
+ default: './docs/',
23
+ describe: 'The directory location where documentation will be generated to.',
24
+ },
25
+ recursive: {
26
+ type: 'boolean',
27
+ alias: 'r',
28
+ default: true,
29
+ describe: 'Whether .cls classes will be searched for recursively in the directory provided.',
30
+ },
31
+ scope: {
32
+ type: 'array',
33
+ alias: 'p',
34
+ default: ['global'],
35
+ describe:
36
+ 'A list of scopes to document. Values should be separated by a space, e.g --scope global public namespaceaccessible. ' +
37
+ 'Annotations are supported and should be passed lowercased and without the @ symbol, e.g. namespaceaccessible auraenabled. ' +
38
+ 'Note that this setting is ignored if generating an OpenApi REST specification since that looks for classes annotated with @RestResource.',
39
+ },
40
+ targetGenerator: {
41
+ type: 'string',
42
+ alias: 'g',
43
+ default: 'jekyll',
44
+ choices: ['jekyll', 'docsify', 'plain-markdown', 'openapi'],
45
+ describe:
46
+ 'Define the static file generator for which the documents will be created. ' +
47
+ 'Currently supports jekyll, docsify, plain markdown, and OpenAPI v3.1.0.',
48
+ },
49
+ indexOnly: {
50
+ type: 'boolean',
51
+ default: false,
52
+ describe: 'Defines whether only the index file should be generated.',
53
+ },
54
+ defaultGroupName: {
55
+ type: 'string',
56
+ default: 'Miscellaneous',
57
+ describe: 'Defines the @group name to be used when a file does not specify it.',
58
+ },
59
+ sanitizeHtml: {
60
+ type: 'boolean',
61
+ default: true,
62
+ describe:
63
+ 'When on, any special character within your ApexDocs is converted into its HTML code representation. ' +
64
+ 'This is specially useful when generic objects are described within the docs, e.g. "List< Foo>", "Map<Foo, Bar>" ' +
65
+ 'because otherwise the content within < and > would be treated as HTML tags and not shown in the output. ' +
66
+ 'Content in @example blocks are never sanitized.',
67
+ },
68
+ openApiTitle: {
69
+ type: 'string',
70
+ default: 'Apex REST Api',
71
+ describe: 'If using "openapi" as the target generator, this allows you to specify the OpenApi title value.',
72
+ },
73
+ title: {
74
+ type: 'string',
75
+ describe: "If this allows you to specify the title of the generated documentation's home file.",
76
+ default: 'Classes',
77
+ },
78
+ namespace: {
79
+ type: 'string',
80
+ describe:
81
+ 'The package namespace, if any. If this value is provided the namespace will be added as a prefix to all of the parsed files. ' +
82
+ "If generating an OpenApi definition, it will be added to the file's Server Url.",
83
+ },
84
+ openApiFileName: {
85
+ type: 'string',
86
+ describe: 'If using "openapi" as the target generator, this allows you to specify the name of the output file.',
87
+ default: 'openapi',
88
+ },
89
+ sortMembersAlphabetically: {
90
+ type: 'boolean',
91
+ describe: 'Whether to sort members alphabetically.',
92
+ default: false,
93
+ },
94
+ includeMetadata: {
95
+ type: 'boolean',
96
+ describe: "Whether to include the file's meta.xml information: Whether it is active and and the API version",
97
+ default: false,
98
+ },
99
+ documentationRootDir: {
100
+ type: 'string',
101
+ describe:
102
+ 'Allows you to specify the root documentation directory where the files are being generated. This can be helpful when embedding the generated docs into an existing site so that the links are generated correctly.',
103
+ },
104
+ }).argv;
105
+
106
+ if (config) {
107
+ argv = { ...config.config, ...argv };
9
108
  }
10
109
 
11
- extractArgs()
12
- .then((config) => Apexdocs.generate(config).catch(cathError))
13
- .catch(cathError);
14
- }
110
+ Settings.build({
111
+ sourceDirectory: argv.sourceDir,
112
+ recursive: argv.recursive,
113
+ scope: argv.scope,
114
+ outputDir: argv.targetDir,
115
+ targetGenerator: argv.targetGenerator as GeneratorChoices,
116
+ indexOnly: argv.indexOnly,
117
+ defaultGroupName: argv.defaultGroupName,
118
+ sanitizeHtml: argv.sanitizeHtml,
119
+ openApiTitle: argv.openApiTitle,
120
+ title: argv.title,
121
+ namespace: argv.namespace,
122
+ openApiFileName: argv.openApiFileName,
123
+ sortMembersAlphabetically: argv.sortMembersAlphabetically,
124
+ includeMetadata: argv.includeMetadata,
125
+ rootDir: argv.documentationRootDir,
126
+ onAfterProcess: config?.config?.onAfterProcess,
127
+ onBeforeFileWrite: config?.config?.onBeforeFileWrite,
128
+ frontMatterHeader: config?.config?.frontMatterHeader,
129
+ });
15
130
 
16
- main();
131
+ try {
132
+ Apexdocs.generate();
133
+ } catch (error) {
134
+ console.error(error);
135
+ process.exit(1);
136
+ }
137
+ });
package/src/index.ts CHANGED
@@ -1,36 +1 @@
1
- import { SetOptional } from 'type-fest';
2
- import type {
3
- ConfigurableHooks,
4
- Skip,
5
- UserDefinedMarkdownConfig,
6
- ReferenceGuidePageData,
7
- DocPageData,
8
- DocPageReference,
9
- } from './core/shared/types';
10
- import { defaults } from './defaults';
11
-
12
- type ConfigurableMarkdownConfig = Omit<
13
- SetOptional<
14
- UserDefinedMarkdownConfig,
15
- 'targetDir' | 'scope' | 'defaultGroupName' | 'includeMetadata' | 'sortMembersAlphabetically'
16
- >,
17
- 'targetGenerator'
18
- >;
19
-
20
- function defineMarkdownConfig(config: ConfigurableMarkdownConfig): UserDefinedMarkdownConfig {
21
- return {
22
- ...defaults,
23
- ...config,
24
- targetGenerator: 'markdown',
25
- };
26
- }
27
-
28
- function skip(): Skip {
29
- return {
30
- _tag: 'Skip',
31
- };
32
- }
33
-
34
- // Exports
35
-
36
- export { defineMarkdownConfig, skip, ConfigurableHooks, ReferenceGuidePageData, DocPageData, DocPageReference };
1
+ export * from './service/manifest-factory';
@@ -0,0 +1,147 @@
1
+ import Manifest from '../manifest';
2
+ import { EnumMirror } from '@cparra/apex-reflection';
3
+ import { ManifestDiff } from '../manifest-diff';
4
+ import { Annotation } from '@cparra/apex-reflection/index';
5
+
6
+ const deprecatedAnnotation: Annotation = {
7
+ rawDeclaration: '@deprecated',
8
+ name: 'deprecated',
9
+ type: 'deprecated',
10
+ };
11
+
12
+ const namespaceAccessibleAnnotation: Annotation = {
13
+ rawDeclaration: '@NamespaceAccessible',
14
+ name: 'namespaceaccessible',
15
+ type: 'namespaceaccessible',
16
+ };
17
+
18
+ it('detects when new types are added', () => {
19
+ const commonType = {
20
+ annotations: [],
21
+ name: 'CommonEnum',
22
+ type_name: 'enum',
23
+ access_modifier: 'public',
24
+ values: [],
25
+ } as EnumMirror;
26
+
27
+ const originalManifest = new Manifest([commonType]);
28
+
29
+ const addedType = {
30
+ annotations: [],
31
+ name: 'NewEnum',
32
+ type_name: 'enum',
33
+ access_modifier: 'public',
34
+ values: [],
35
+ } as EnumMirror;
36
+ const newManifest = new Manifest([addedType, commonType]);
37
+
38
+ const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
39
+ expect(manifestDiff.added.length).toBe(1);
40
+ expect(manifestDiff.added[0].name).toBe('NewEnum');
41
+ });
42
+
43
+ it('detects when types are deleted', () => {
44
+ const commonType = {
45
+ annotations: [],
46
+ name: 'CommonEnum',
47
+ type_name: 'enum',
48
+ access_modifier: 'public',
49
+ values: [],
50
+ } as EnumMirror;
51
+
52
+ const deletedType = {
53
+ annotations: [],
54
+ name: 'OldEnum',
55
+ type_name: 'enum',
56
+ access_modifier: 'public',
57
+ values: [],
58
+ } as EnumMirror;
59
+ const originalManifest = new Manifest([commonType, deletedType]);
60
+ const newManifest = new Manifest([commonType]);
61
+
62
+ const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
63
+ expect(manifestDiff.deleted.length).toBe(1);
64
+ expect(manifestDiff.deleted[0].name).toBe('OldEnum');
65
+ });
66
+
67
+ it('does not add enums that have no changes', () => {
68
+ const originalEnum = {
69
+ annotations: [],
70
+ name: 'CommonEnum',
71
+ type_name: 'enum',
72
+ access_modifier: 'public',
73
+ values: [],
74
+ } as EnumMirror;
75
+
76
+ const modifiedEnum = {
77
+ annotations: [],
78
+ name: 'CommonEnum',
79
+ type_name: 'enum',
80
+ access_modifier: 'public',
81
+ values: [],
82
+ } as EnumMirror;
83
+
84
+ const originalManifest = new Manifest([originalEnum]);
85
+ const newManifest = new Manifest([modifiedEnum]);
86
+
87
+ const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
88
+ expect(manifestDiff.changes.length).toBe(0);
89
+ });
90
+
91
+ it('detects changes to access modifiers within an enum', () => {
92
+ const originalEnum = {
93
+ annotations: [],
94
+ name: 'CommonEnum',
95
+ type_name: 'enum',
96
+ access_modifier: 'public',
97
+ values: [],
98
+ } as EnumMirror;
99
+
100
+ const modifiedEnum = {
101
+ annotations: [],
102
+ name: 'CommonEnum',
103
+ type_name: 'enum',
104
+ access_modifier: 'private',
105
+ values: [],
106
+ } as EnumMirror;
107
+
108
+ const originalManifest = new Manifest([originalEnum]);
109
+ const newManifest = new Manifest([modifiedEnum]);
110
+
111
+ const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
112
+ expect(manifestDiff.changes.length).toBe(1);
113
+ expect(manifestDiff.changes[0].originalType).toBe(originalEnum);
114
+ expect(manifestDiff.changes[0].newType).toBe(modifiedEnum);
115
+ expect(manifestDiff.changes[0].accessModifierChange).not.toBeNull();
116
+ expect(manifestDiff.changes[0].accessModifierChange?.oldAccessModifier).toBe('public');
117
+ expect(manifestDiff.changes[0].accessModifierChange?.newAccessModifier).toBe('private');
118
+ });
119
+
120
+ it('detects changes to annotations within an enum', () => {
121
+ const originalEnum = {
122
+ annotations: [deprecatedAnnotation],
123
+ name: 'CommonEnum',
124
+ type_name: 'enum',
125
+ access_modifier: 'public',
126
+ } as EnumMirror;
127
+
128
+ const modifiedEnum = {
129
+ annotations: [namespaceAccessibleAnnotation],
130
+ name: 'CommonEnum',
131
+ type_name: 'enum',
132
+ access_modifier: 'private',
133
+ } as EnumMirror;
134
+
135
+ const originalManifest = new Manifest([originalEnum]);
136
+ const newManifest = new Manifest([modifiedEnum]);
137
+
138
+ const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
139
+ expect(manifestDiff.changes.length).toBe(1);
140
+ expect(manifestDiff.changes[0].annotationChanges.length).toBe(2);
141
+ expect(manifestDiff.changes[0].annotationChanges.find((change) => change.type === 'added')?.annotation.name).toBe(
142
+ namespaceAccessibleAnnotation.name,
143
+ );
144
+ expect(manifestDiff.changes[0].annotationChanges.find((change) => change.type === 'removed')?.annotation.name).toBe(
145
+ deprecatedAnnotation.name,
146
+ );
147
+ });
@@ -0,0 +1,3 @@
1
+ export default class ApexBundle {
2
+ constructor(public filePath: string, public rawTypeContent: string, public rawMetadataContent: string | null) {}
3
+ }
@@ -1,7 +1,7 @@
1
+ import { ClassMirrorBuilder } from '../../../test-helpers/ClassMirrorBuilder';
1
2
  import { ClassMirrorWrapper } from '../ClassMirrorWrapper';
2
- import { ClassMirrorBuilder } from '../../../../test-helpers/ClassMirrorBuilder';
3
- import { MethodMirrorBuilder } from '../../../../test-helpers/MethodMirrorBuilder';
4
- import { AnnotationBuilder } from '../../../../test-helpers/AnnotationBuilder';
3
+ import { AnnotationBuilder } from '../../../test-helpers/AnnotationBuilder';
4
+ import { MethodMirrorBuilder } from '../../../test-helpers/MethodMirrorBuilder';
5
5
 
6
6
  it('should return methods by annotation when they exist', function () {
7
7
  const classMirror = new ClassMirrorBuilder()
@@ -0,0 +1,7 @@
1
+ import { FieldMirror, MethodMirror, PropertyMirror } from '@cparra/apex-reflection';
2
+
3
+ export type InheritanceSupport = { inherited: boolean };
4
+ export type FieldMirrorWithInheritance = FieldMirror & InheritanceSupport;
5
+ export type PropertyMirrorWithInheritance = PropertyMirror & InheritanceSupport;
6
+ export type MethodMirrorWithInheritance = MethodMirror & InheritanceSupport;
7
+ export type FieldOrProperty = FieldMirrorWithInheritance | PropertyMirrorWithInheritance;
@@ -0,0 +1,94 @@
1
+ import Manifest from './manifest';
2
+ import { Type } from '@cparra/apex-reflection';
3
+ import { Annotation } from '@cparra/apex-reflection/index';
4
+
5
+ export class ManifestDiff {
6
+ added: Type[] = [];
7
+ deleted: Type[] = [];
8
+ changes: DiffChange[] = [];
9
+
10
+ static build(originalManifest: Manifest, newManifest: Manifest) {
11
+ const addedTypes = newManifest.types.filter(
12
+ (currentType) => !originalManifest.types.find((originalType) => currentType.name === originalType.name),
13
+ );
14
+ const deletedTypes = originalManifest.types.filter(
15
+ (currentType) => !newManifest.types.find((newType) => currentType.name === newType.name),
16
+ );
17
+
18
+ const changes: DiffChange[] = [];
19
+ for (const newType of newManifest.types) {
20
+ const oldType = originalManifest.types.find((oldType) => oldType.name === newType.name);
21
+ if (!oldType) {
22
+ continue;
23
+ }
24
+
25
+ const change = new DiffChange(oldType, newType);
26
+ if (change.hasChanges()) {
27
+ changes.push(change);
28
+ }
29
+ }
30
+
31
+ const diff = new ManifestDiff();
32
+ diff.added = addedTypes;
33
+ diff.deleted = deletedTypes;
34
+ diff.changes = changes;
35
+ return diff;
36
+ }
37
+ }
38
+
39
+ class DiffChange {
40
+ accessModifierChange?: AccessModifierChange;
41
+ annotationChanges: AnnotationChange[] = [];
42
+
43
+ constructor(public originalType: Type, public newType: Type) {
44
+ this.parse();
45
+ }
46
+
47
+ public hasChanges(): boolean {
48
+ return !!this.accessModifierChange || this.annotationChanges.length > 0;
49
+ }
50
+
51
+ private parse() {
52
+ // Access modifier changes
53
+ if (this.originalType.access_modifier !== this.newType.access_modifier) {
54
+ this.accessModifierChange = {
55
+ oldAccessModifier: this.originalType.access_modifier,
56
+ newAccessModifier: this.newType.access_modifier,
57
+ };
58
+ }
59
+
60
+ // Annotation changes
61
+ const addedAnnotations = this.newType.annotations.filter(
62
+ (currentAnnotation) =>
63
+ !this.originalType.annotations.find((originalAnnotation) => currentAnnotation.name === originalAnnotation.name),
64
+ );
65
+ const removedAnnotations = this.originalType.annotations.filter(
66
+ (currentAnnotation) =>
67
+ !this.newType.annotations.find((newAnnotation) => currentAnnotation.name === newAnnotation.name),
68
+ );
69
+ const annotationChangeMapper = (annotation: Annotation, changeType: 'added' | 'removed') => {
70
+ return {
71
+ annotation: annotation,
72
+ type: changeType,
73
+ } as AnnotationChange;
74
+ };
75
+ this.annotationChanges = [
76
+ ...addedAnnotations.map((annotation) => {
77
+ return annotationChangeMapper(annotation, 'added');
78
+ }),
79
+ ...removedAnnotations.map((annotation) => {
80
+ return annotationChangeMapper(annotation, 'removed');
81
+ }),
82
+ ];
83
+ }
84
+ }
85
+
86
+ interface AccessModifierChange {
87
+ oldAccessModifier: string;
88
+ newAccessModifier: string;
89
+ }
90
+
91
+ interface AnnotationChange {
92
+ annotation: Annotation;
93
+ type: 'added' | 'removed';
94
+ }